git.delta.rocks / unique-network / refs/commits / d535fbacbf44

difftreelog

refactor abi tests

Trubnikov Sergey2022-11-14parent: #00d3414.patch.diff
in: master

3 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1058,16 +1058,6 @@
 ]
 
 [[package]]
-name = "concat-idents"
-version = "1.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fe0e1d9f7de897d18e590a7496b5facbe87813f746cf4b8db596ba77e07e832"
-dependencies = [
- "quote",
- "syn",
-]
-
-[[package]]
 name = "concurrent-queue"
 version = "1.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2349,7 +2339,6 @@
 name = "evm-coder"
 version = "0.1.4"
 dependencies = [
- "concat-idents",
  "ethereum",
  "evm-coder-procedural",
  "evm-core",
modifiedcrates/evm-coder/Cargo.tomldiffbeforeafterboth
--- a/crates/evm-coder/Cargo.toml
+++ b/crates/evm-coder/Cargo.toml
@@ -26,7 +26,6 @@
 hex = "0.4.3"
 hex-literal = "0.3.4"
 similar-asserts = "1.4.2"
-concat-idents = "1.1.3"
 trybuild = "1.0"
 
 [features]
modifiedcrates/evm-coder/src/abi/test.rsdiffbeforeafterboth
before · crates/evm-coder/src/abi/test.rs
1use crate::{2	abi::{AbiRead, AbiWrite},3	types::*,4};56use super::{AbiReader, AbiWriter};7use hex_literal::hex;8use primitive_types::{H160, U256};9use concat_idents::concat_idents;1011macro_rules! test_impl {12    ($name:ident, $type:ty, $function_identifier:expr, $decoded_data:expr, $encoded_data:expr) => {13        concat_idents!(test_name = encode_decode_, $name {14            #[test]15            fn test_name() {16                let function_identifier: u32 = $function_identifier;17                let decoded_data = $decoded_data;18                let encoded_data = $encoded_data;1920                let (call, mut decoder) = AbiReader::new_call(encoded_data).unwrap();21                assert_eq!(call, u32::to_be_bytes(function_identifier));22                let data = <$type>::abi_read(&mut decoder).unwrap();23                assert_eq!(data, decoded_data);2425                let mut writer = AbiWriter::new_call(function_identifier);26                decoded_data.abi_write(&mut writer);27                let ed = writer.finish();28                similar_asserts::assert_eq!(encoded_data, ed.as_slice());29            }30        });31    };32}3334macro_rules! test_impl_uint {35	($type:ident) => {36		test_impl!(37			$type,38			$type,39			0xdeadbeef,40			255 as $type,41			&hex!(42				"43                    deadbeef44                    00000000000000000000000000000000000000000000000000000000000000ff45                "46			)47		);48	};49}5051test_impl_uint!(uint8);52test_impl_uint!(uint32);53test_impl_uint!(uint128);5455test_impl!(56	uint256,57	uint256,58	0xdeadbeef,59	U256([255, 0, 0, 0]),60	&hex!(61		"62            deadbeef63            00000000000000000000000000000000000000000000000000000000000000ff64        "65	)66);6768test_impl!(69    vec_tuple_address_uint256,70    Vec<(address, uint256)>,71    0x1ACF2D55,72    vec![73        (74            H160(hex!("2D2FF76104B7BACB2E8F6731D5BFC184EBECDDBC")),75            U256([10, 0, 0, 0]),76        ),77        (78            H160(hex!("AB8E3D9134955566483B11E6825C9223B6737B10")),79            U256([20, 0, 0, 0]),80        ),81        (82            H160(hex!("8C582BDF2953046705FC56F189385255EFC1BE18")),83            U256([30, 0, 0, 0]),84        ),85    ],86    &hex!(87        "88            1ACF2D5589            0000000000000000000000000000000000000000000000000000000000000020 // offset of (address, uint256)[]90            0000000000000000000000000000000000000000000000000000000000000003 // length of (address, uint256)[]9192            0000000000000000000000002D2FF76104B7BACB2E8F6731D5BFC184EBECDDBC // address93            000000000000000000000000000000000000000000000000000000000000000A // uint2569495            000000000000000000000000AB8E3D9134955566483B11E6825C9223B6737B10 // address96            0000000000000000000000000000000000000000000000000000000000000014 // uint2569798            0000000000000000000000008C582BDF2953046705FC56F189385255EFC1BE18 // address99            000000000000000000000000000000000000000000000000000000000000001E // uint256100        "101    )102);103104test_impl!(105    vec_tuple_uint256_string,106    Vec<(uint256, string)>,107    0xdeadbeef,108    vec![109        (1.into(), "Test URI 0".to_string()),110        (11.into(), "Test URI 1".to_string()),111        (12.into(), "Test URI 2".to_string()),112    ],113    &hex!(114        "115            deadbeef116            0000000000000000000000000000000000000000000000000000000000000020 // offset of (uint256, string)[]117            0000000000000000000000000000000000000000000000000000000000000003 // length of (uint256, string)[]118119            0000000000000000000000000000000000000000000000000000000000000060 // offset of first elem120            00000000000000000000000000000000000000000000000000000000000000e0 // offset of second elem121            0000000000000000000000000000000000000000000000000000000000000160 // offset of third elem122123            0000000000000000000000000000000000000000000000000000000000000001 // first token id?   					#60124            0000000000000000000000000000000000000000000000000000000000000040 // offset of string125            000000000000000000000000000000000000000000000000000000000000000a // size of string126            5465737420555249203000000000000000000000000000000000000000000000 // string127128            000000000000000000000000000000000000000000000000000000000000000b // second token id? Why ==11?			#e0129            0000000000000000000000000000000000000000000000000000000000000040 // offset of string130            000000000000000000000000000000000000000000000000000000000000000a // size of string131            5465737420555249203100000000000000000000000000000000000000000000 // string132133            000000000000000000000000000000000000000000000000000000000000000c // third token id?  Why ==12?			#160134            0000000000000000000000000000000000000000000000000000000000000040 // offset of string135            000000000000000000000000000000000000000000000000000000000000000a // size of string136            5465737420555249203200000000000000000000000000000000000000000000 // string137        "138    )139);140141#[test]142fn dynamic_after_static() {143	let mut encoder = AbiWriter::new();144	encoder.bool(&true);145	encoder.string("test");146	let encoded = encoder.finish();147148	let mut encoder = AbiWriter::new();149	encoder.bool(&true);150	// Offset to subresult151	encoder.uint32(&(32 * 2));152	// Len of "test"153	encoder.uint32(&4);154	encoder.write_padright(&[b't', b'e', b's', b't']);155	let alternative_encoded = encoder.finish();156157	assert_eq!(encoded, alternative_encoded);158159	let mut decoder = AbiReader::new(&encoded);160	assert!(decoder.bool().unwrap());161	assert_eq!(decoder.string().unwrap(), "test");162}163164#[test]165fn mint_sample() {166	let (call, mut decoder) = AbiReader::new_call(&hex!(167		"168            50bb4e7f169            000000000000000000000000ad2c0954693c2b5404b7e50967d3481bea432374170            0000000000000000000000000000000000000000000000000000000000000001171            0000000000000000000000000000000000000000000000000000000000000060172            0000000000000000000000000000000000000000000000000000000000000008173            5465737420555249000000000000000000000000000000000000000000000000174        "175	))176	.unwrap();177	assert_eq!(call, u32::to_be_bytes(0x50bb4e7f));178	assert_eq!(179		format!("{:?}", decoder.address().unwrap()),180		"0xad2c0954693c2b5404b7e50967d3481bea432374"181	);182	assert_eq!(decoder.uint32().unwrap(), 1);183	assert_eq!(decoder.string().unwrap(), "Test URI");184}185186#[test]187fn parse_vec_with_dynamic_type() {188	let decoded_data = (189		0x36543006,190		vec![191			(1.into(), "Test URI 0".to_string()),192			(11.into(), "Test URI 1".to_string()),193			(12.into(), "Test URI 2".to_string()),194		],195	);196197	let encoded_data = &hex!(198        "199            36543006200            00000000000000000000000053744e6da587ba10b32a2554d2efdcd985bc27a3 // address201            0000000000000000000000000000000000000000000000000000000000000040 // offset of (uint256, string)[]202            0000000000000000000000000000000000000000000000000000000000000003 // length of (uint256, string)[]203204            0000000000000000000000000000000000000000000000000000000000000060 // offset of first elem205            00000000000000000000000000000000000000000000000000000000000000e0 // offset of second elem206            0000000000000000000000000000000000000000000000000000000000000160 // offset of third elem207208            0000000000000000000000000000000000000000000000000000000000000001 // first token id?   					#60209            0000000000000000000000000000000000000000000000000000000000000040 // offset of string210            000000000000000000000000000000000000000000000000000000000000000a // size of string211            5465737420555249203000000000000000000000000000000000000000000000 // string212213            000000000000000000000000000000000000000000000000000000000000000b // second token id? Why ==11?			#e0214            0000000000000000000000000000000000000000000000000000000000000040 // offset of string215            000000000000000000000000000000000000000000000000000000000000000a // size of string216            5465737420555249203100000000000000000000000000000000000000000000 // string217218            000000000000000000000000000000000000000000000000000000000000000c // third token id?  Why ==12?			#160219            0000000000000000000000000000000000000000000000000000000000000040 // offset of string220            000000000000000000000000000000000000000000000000000000000000000a // size of string221            5465737420555249203200000000000000000000000000000000000000000000 // string222        "223    );224225	let (call, mut decoder) = AbiReader::new_call(encoded_data).unwrap();226	assert_eq!(call, u32::to_be_bytes(decoded_data.0));227	let address = decoder.address().unwrap();228	let data = <Vec<(uint256, string)>>::abi_read(&mut decoder).unwrap();229	assert_eq!(data, decoded_data.1);230231	let mut writer = AbiWriter::new_call(decoded_data.0);232	address.abi_write(&mut writer);233	decoded_data.1.abi_write(&mut writer);234	let ed = writer.finish();235	similar_asserts::assert_eq!(encoded_data, ed.as_slice());236}237238test_impl!(239	vec_tuple_string_bytes,240	Vec<(string, bytes)>,241	0xdeadbeef,242	vec![243		(244			"Test URI 0".to_string(),245			bytes(vec![246				0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,247				0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,248				0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,249				0x11, 0x11, 0x11, 0x11, 0x11, 0x11250			])251		),252		(253			"Test URI 1".to_string(),254			bytes(vec![255				0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,256				0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,257				0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,258				0x22, 0x22, 0x22, 0x22, 0x22259			])260		),261		("Test URI 2".to_string(), bytes(vec![0x33, 0x33])),262	],263	&hex!(264		"265            deadbeef266            0000000000000000000000000000000000000000000000000000000000000020267            0000000000000000000000000000000000000000000000000000000000000003268            269            0000000000000000000000000000000000000000000000000000000000000060270            0000000000000000000000000000000000000000000000000000000000000140271            0000000000000000000000000000000000000000000000000000000000000220272273            0000000000000000000000000000000000000000000000000000000000000040274            0000000000000000000000000000000000000000000000000000000000000080275            000000000000000000000000000000000000000000000000000000000000000a276            5465737420555249203000000000000000000000000000000000000000000000277            0000000000000000000000000000000000000000000000000000000000000030278            1111111111111111111111111111111111111111111111111111111111111111279            1111111111111111111111111111111100000000000000000000000000000000280281            0000000000000000000000000000000000000000000000000000000000000040282            0000000000000000000000000000000000000000000000000000000000000080283            000000000000000000000000000000000000000000000000000000000000000a284            5465737420555249203100000000000000000000000000000000000000000000285            000000000000000000000000000000000000000000000000000000000000002f286            2222222222222222222222222222222222222222222222222222222222222222287            2222222222222222222222222222220000000000000000000000000000000000288289            0000000000000000000000000000000000000000000000000000000000000040290            0000000000000000000000000000000000000000000000000000000000000080291            000000000000000000000000000000000000000000000000000000000000000a292            5465737420555249203200000000000000000000000000000000000000000000293            0000000000000000000000000000000000000000000000000000000000000002294            3333000000000000000000000000000000000000000000000000000000000000295        "296	)297);
after · crates/evm-coder/src/abi/test.rs
1use crate::{2	abi::{AbiRead, AbiWrite},3	types::*,4};56use super::{AbiReader, AbiWriter};7use hex_literal::hex;8use primitive_types::{H160, U256};910fn test_impl<T>(function_identifier: u32, decoded_data: T, encoded_data: &[u8])11where12	T: AbiWrite + AbiRead + std::cmp::PartialEq + std::fmt::Debug,13{14	let (call, mut decoder) = AbiReader::new_call(encoded_data).unwrap();15	assert_eq!(call, u32::to_be_bytes(function_identifier));16	let data = <T>::abi_read(&mut decoder).unwrap();17	assert_eq!(data, decoded_data);1819	let mut writer = AbiWriter::new_call(function_identifier);20	decoded_data.abi_write(&mut writer);21	let ed = writer.finish();22	similar_asserts::assert_eq!(encoded_data, ed.as_slice());23}2425macro_rules! test_impl_uint {26	($type:ident) => {27		test_impl::<$type>(28			0xdeadbeef,29			255 as $type,30			&hex!(31				"32                    deadbeef33                    00000000000000000000000000000000000000000000000000000000000000ff34                "35			),36		);37	};38}3940#[test]41fn encode_decode_uint8() {42	test_impl_uint!(uint8);43}4445#[test]46fn encode_decode_uint32() {47	test_impl_uint!(uint32);48}4950#[test]51fn encode_decode_uint128() {52	test_impl_uint!(uint128);53}5455#[test]56fn encode_decode_uint256() {57	test_impl::<uint256>(58		0xdeadbeef,59		U256([255, 0, 0, 0]),60		&hex!(61			"62                deadbeef63                00000000000000000000000000000000000000000000000000000000000000ff64            "65		),66	);67}6869#[test]70fn encode_decode_string() {71	test_impl::<String>(72		0xdeadbeef,73		"some string".to_string(),74		&hex!(75			"76                deadbeef77                000000000000000000000000000000000000000000000000000000000000002078                000000000000000000000000000000000000000000000000000000000000000b79                736f6d6520737472696e6700000000000000000000000000000000000000000080            "81		),82	);83}8485#[test]86fn encode_decode_tuple_string() {87	test_impl::<(String,)>(88		0xdeadbeef,89		("some string".to_string(),),90		&hex!(91			"92                deadbeef93                000000000000000000000000000000000000000000000000000000000000002094                000000000000000000000000000000000000000000000000000000000000002095                000000000000000000000000000000000000000000000000000000000000000b96                736f6d6520737472696e6700000000000000000000000000000000000000000097            "98		),99	);100}101102#[test]103fn encode_decode_vec_tuple_address_uint256() {104	test_impl::<Vec<(address, uint256)>>(105        0x1ACF2D55,106        vec![107            (108                H160(hex!("2D2FF76104B7BACB2E8F6731D5BFC184EBECDDBC")),109                U256([10, 0, 0, 0]),110            ),111            (112                H160(hex!("AB8E3D9134955566483B11E6825C9223B6737B10")),113                U256([20, 0, 0, 0]),114            ),115            (116                H160(hex!("8C582BDF2953046705FC56F189385255EFC1BE18")),117                U256([30, 0, 0, 0]),118            ),119        ],120        &hex!(121            "122                1ACF2D55123                0000000000000000000000000000000000000000000000000000000000000020 // offset of (address, uint256)[]124                0000000000000000000000000000000000000000000000000000000000000003 // length of (address, uint256)[]125126                0000000000000000000000002D2FF76104B7BACB2E8F6731D5BFC184EBECDDBC // address127                000000000000000000000000000000000000000000000000000000000000000A // uint256128129                000000000000000000000000AB8E3D9134955566483B11E6825C9223B6737B10 // address130                0000000000000000000000000000000000000000000000000000000000000014 // uint256131132                0000000000000000000000008C582BDF2953046705FC56F189385255EFC1BE18 // address133                000000000000000000000000000000000000000000000000000000000000001E // uint256134            "135        )136    );137}138139#[test]140fn encode_decode_vec_tuple_uint256_string() {141	test_impl::<Vec<(uint256, string)>>(142        0xdeadbeef,143        vec![144            (1.into(), "Test URI 0".to_string()),145            (11.into(), "Test URI 1".to_string()),146            (12.into(), "Test URI 2".to_string()),147        ],148        &hex!(149            "150                deadbeef151                0000000000000000000000000000000000000000000000000000000000000020 // offset of (uint256, string)[]152                0000000000000000000000000000000000000000000000000000000000000003 // length of (uint256, string)[]153154                0000000000000000000000000000000000000000000000000000000000000060 // offset of first elem155                00000000000000000000000000000000000000000000000000000000000000e0 // offset of second elem156                0000000000000000000000000000000000000000000000000000000000000160 // offset of third elem157158                0000000000000000000000000000000000000000000000000000000000000001 // first token id?   					#60159                0000000000000000000000000000000000000000000000000000000000000040 // offset of string160                000000000000000000000000000000000000000000000000000000000000000a // size of string161                5465737420555249203000000000000000000000000000000000000000000000 // string162163                000000000000000000000000000000000000000000000000000000000000000b // second token id? Why ==11?			#e0164                0000000000000000000000000000000000000000000000000000000000000040 // offset of string165                000000000000000000000000000000000000000000000000000000000000000a // size of string166                5465737420555249203100000000000000000000000000000000000000000000 // string167168                000000000000000000000000000000000000000000000000000000000000000c // third token id?  Why ==12?			#160169                0000000000000000000000000000000000000000000000000000000000000040 // offset of string170                000000000000000000000000000000000000000000000000000000000000000a // size of string171                5465737420555249203200000000000000000000000000000000000000000000 // string172            "173        )174    );175}176177#[test]178fn dynamic_after_static() {179	let mut encoder = AbiWriter::new();180	encoder.bool(&true);181	encoder.string("test");182	let encoded = encoder.finish();183184	let mut encoder = AbiWriter::new();185	encoder.bool(&true);186	// Offset to subresult187	encoder.uint32(&(32 * 2));188	// Len of "test"189	encoder.uint32(&4);190	encoder.write_padright(&[b't', b'e', b's', b't']);191	let alternative_encoded = encoder.finish();192193	assert_eq!(encoded, alternative_encoded);194195	let mut decoder = AbiReader::new(&encoded);196	assert!(decoder.bool().unwrap());197	assert_eq!(decoder.string().unwrap(), "test");198}199200#[test]201fn mint_sample() {202	let (call, mut decoder) = AbiReader::new_call(&hex!(203		"204            50bb4e7f205            000000000000000000000000ad2c0954693c2b5404b7e50967d3481bea432374206            0000000000000000000000000000000000000000000000000000000000000001207            0000000000000000000000000000000000000000000000000000000000000060208            0000000000000000000000000000000000000000000000000000000000000008209            5465737420555249000000000000000000000000000000000000000000000000210        "211	))212	.unwrap();213	assert_eq!(call, u32::to_be_bytes(0x50bb4e7f));214	assert_eq!(215		format!("{:?}", decoder.address().unwrap()),216		"0xad2c0954693c2b5404b7e50967d3481bea432374"217	);218	assert_eq!(decoder.uint32().unwrap(), 1);219	assert_eq!(decoder.string().unwrap(), "Test URI");220}221222#[test]223fn parse_vec_with_dynamic_type() {224	let decoded_data = (225		0x36543006,226		vec![227			(1.into(), "Test URI 0".to_string()),228			(11.into(), "Test URI 1".to_string()),229			(12.into(), "Test URI 2".to_string()),230		],231	);232233	let encoded_data = &hex!(234        "235            36543006236            00000000000000000000000053744e6da587ba10b32a2554d2efdcd985bc27a3 // address237            0000000000000000000000000000000000000000000000000000000000000040 // offset of (uint256, string)[]238            0000000000000000000000000000000000000000000000000000000000000003 // length of (uint256, string)[]239240            0000000000000000000000000000000000000000000000000000000000000060 // offset of first elem241            00000000000000000000000000000000000000000000000000000000000000e0 // offset of second elem242            0000000000000000000000000000000000000000000000000000000000000160 // offset of third elem243244            0000000000000000000000000000000000000000000000000000000000000001 // first token id?   					#60245            0000000000000000000000000000000000000000000000000000000000000040 // offset of string246            000000000000000000000000000000000000000000000000000000000000000a // size of string247            5465737420555249203000000000000000000000000000000000000000000000 // string248249            000000000000000000000000000000000000000000000000000000000000000b // second token id? Why ==11?			#e0250            0000000000000000000000000000000000000000000000000000000000000040 // offset of string251            000000000000000000000000000000000000000000000000000000000000000a // size of string252            5465737420555249203100000000000000000000000000000000000000000000 // string253254            000000000000000000000000000000000000000000000000000000000000000c // third token id?  Why ==12?			#160255            0000000000000000000000000000000000000000000000000000000000000040 // offset of string256            000000000000000000000000000000000000000000000000000000000000000a // size of string257            5465737420555249203200000000000000000000000000000000000000000000 // string258        "259    );260261	let (call, mut decoder) = AbiReader::new_call(encoded_data).unwrap();262	assert_eq!(call, u32::to_be_bytes(decoded_data.0));263	let address = decoder.address().unwrap();264	let data = <Vec<(uint256, string)>>::abi_read(&mut decoder).unwrap();265	assert_eq!(data, decoded_data.1);266267	let mut writer = AbiWriter::new_call(decoded_data.0);268	address.abi_write(&mut writer);269	decoded_data.1.abi_write(&mut writer);270	let ed = writer.finish();271	similar_asserts::assert_eq!(encoded_data, ed.as_slice());272}273274#[test]275fn encode_decode_vec_tuple_string_bytes() {276	test_impl::<Vec<(string, bytes)>>(277		0xdeadbeef,278		vec![279			(280				"Test URI 0".to_string(),281				bytes(vec![282					0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,283					0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,284					0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,285					0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,286				]),287			),288			(289				"Test URI 1".to_string(),290				bytes(vec![291					0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,292					0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,293					0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,294					0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,295				]),296			),297			("Test URI 2".to_string(), bytes(vec![0x33, 0x33])),298		],299		&hex!(300			"301                deadbeef302                0000000000000000000000000000000000000000000000000000000000000020303                0000000000000000000000000000000000000000000000000000000000000003304305                0000000000000000000000000000000000000000000000000000000000000060306                0000000000000000000000000000000000000000000000000000000000000140307                0000000000000000000000000000000000000000000000000000000000000220308309                0000000000000000000000000000000000000000000000000000000000000040310                0000000000000000000000000000000000000000000000000000000000000080311                000000000000000000000000000000000000000000000000000000000000000a312                5465737420555249203000000000000000000000000000000000000000000000313                0000000000000000000000000000000000000000000000000000000000000030314                1111111111111111111111111111111111111111111111111111111111111111315                1111111111111111111111111111111100000000000000000000000000000000316317                0000000000000000000000000000000000000000000000000000000000000040318                0000000000000000000000000000000000000000000000000000000000000080319                000000000000000000000000000000000000000000000000000000000000000a320                5465737420555249203100000000000000000000000000000000000000000000321                000000000000000000000000000000000000000000000000000000000000002f322                2222222222222222222222222222222222222222222222222222222222222222323                2222222222222222222222222222220000000000000000000000000000000000324325                0000000000000000000000000000000000000000000000000000000000000040326                0000000000000000000000000000000000000000000000000000000000000080327                000000000000000000000000000000000000000000000000000000000000000a328                5465737420555249203200000000000000000000000000000000000000000000329                0000000000000000000000000000000000000000000000000000000000000002330                3333000000000000000000000000000000000000000000000000000000000000331            "332		),333	);334}