diff --git a/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorImpl.java b/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorImpl.java index 16bc673646a..cb022ef79ca 100644 --- a/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorImpl.java +++ b/hedera-mirror-web3/src/main/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorImpl.java @@ -30,6 +30,7 @@ import com.hedera.node.app.service.evm.contracts.execution.PricesAndFeesProvider; import com.hedera.node.app.service.evm.store.contracts.AbstractCodeCache; import com.hedera.node.app.service.evm.store.contracts.HederaEvmMutableWorldState; +import com.hedera.node.app.service.evm.store.tokens.TokenAccessor; import com.hedera.services.store.models.Account; import com.hedera.services.utils.EntityIdUtils; import com.hederahashgraph.api.proto.java.ResponseCodeEnum; @@ -55,6 +56,7 @@ public class MirrorEvmTxProcessorImpl extends HederaEvmTxProcessor implements Mi private final MirrorEvmContractAliases aliasManager; private final Store store; private final EntityAddressSequencer entityAddressSequencer; + private final TokenAccessor tokenAccessor; @SuppressWarnings("java:S107") public MirrorEvmTxProcessorImpl( @@ -69,7 +71,8 @@ public MirrorEvmTxProcessorImpl( final AbstractCodeCache codeCache, final MirrorOperationTracer operationTracer, final Store store, - final EntityAddressSequencer entityAddressSequencer) { + final EntityAddressSequencer entityAddressSequencer, + TokenAccessor tokenAccessor) { super( worldState, pricesAndFeesProvider, @@ -84,6 +87,7 @@ public MirrorEvmTxProcessorImpl( this.codeCache = codeCache; this.store = store; this.entityAddressSequencer = entityAddressSequencer; + this.tokenAccessor = tokenAccessor; } public HederaEvmTransactionProcessingResult execute(CallServiceParameters params, long estimatedGas) { @@ -97,10 +101,10 @@ public HederaEvmTransactionProcessingResult execute(CallServiceParameters params Account.getDummySenderAccount(params.getSender().canonicalAddress()); store.updateAccount(senderAccount); } - + Address receiverAddress = determineReceiverAddress(params.getReceiver()); return super.execute( params.getSender(), - params.getReceiver(), + receiverAddress, gasPrice, params.isEstimate(), params.isEstimate() ? estimatedGas : params.getGas(), @@ -148,4 +152,17 @@ protected MessageFrame buildInitialFrame( .build(); } } + + private Address determineReceiverAddress(Address receiver) { + if (receiver == null || receiver.equals(Address.ZERO) || !aliasManager.isMirror(receiver)) { + return receiver; + } + + Address canonical = tokenAccessor.canonicalAddress(receiver); + if (canonical == null || Address.ZERO.equals(canonical)) { + return receiver; + } else { + return canonical; + } + } } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorTest.java index 8b7fd93aeb9..65ebcdfcd5f 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/evm/contracts/execution/MirrorEvmTxProcessorTest.java @@ -45,6 +45,7 @@ import com.hedera.node.app.service.evm.store.contracts.AbstractCodeCache; import com.hedera.node.app.service.evm.store.contracts.HederaEvmEntityAccess; import com.hedera.node.app.service.evm.store.models.HederaEvmAccount; +import com.hedera.node.app.service.evm.store.tokens.TokenAccessor; import com.hedera.services.store.models.Account; import com.hederahashgraph.api.proto.java.ResponseCodeEnum; import com.swirlds.common.utility.SemanticVersion; @@ -131,6 +132,9 @@ class MirrorEvmTxProcessorTest { @Mock private StoreImpl store; + @Mock + private TokenAccessor tokenAccessor; + private MirrorEvmTxProcessorImpl mirrorEvmTxProcessor; private Pair result; @@ -180,7 +184,8 @@ void setup() { new AbstractCodeCache(10, hederaEvmEntityAccess), mirrorOperationTracer, store, - new EntityAddressSequencer()); + new EntityAddressSequencer(), + tokenAccessor); Pair result = Pair.of(ResponseCodeEnum.OK, 100L); } diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java index 33f013f09a7..d40490aeed5 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallDynamicCallsTest.java @@ -30,6 +30,7 @@ import java.math.BigInteger; import lombok.RequiredArgsConstructor; import org.assertj.core.data.Percentage; +import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; @@ -77,6 +78,30 @@ void dynamicCallsTestWithAliasSenderForEstimateGas(DynamicCallsContractFunctions } } + @Test + void testGetAddressThisWithEvmAliasRecipient() { + String ethCallContractWithout0x = + DYNAMIC_ETH_CALLS_CONTRACT_ALIAS.toString().substring(2); + String successfulResponse = "0x000000000000000000000000" + ethCallContractWithout0x; + final var functionHash = functionEncodeDecoder.functionHashFor("getAddressThis", DYNAMIC_ETH_CALLS_ABI_PATH); + final var serviceParameters = serviceParametersForExecution( + functionHash, DYNAMIC_ETH_CALLS_CONTRACT_ALIAS, ETH_CALL, 0L, BlockType.LATEST); + + assertThat(contractCallService.processCall(serviceParameters)).isEqualTo(successfulResponse); + } + + @Test + void testGetAddressThisWithLongZeroRecipientThatHasEvmAlias() { + String ethCallContractWithout0x = + DYNAMIC_ETH_CALLS_CONTRACT_ALIAS.toString().substring(2); + String successfulResponse = "0x000000000000000000000000" + ethCallContractWithout0x; + final var functionHash = functionEncodeDecoder.functionHashFor("getAddressThis", DYNAMIC_ETH_CALLS_ABI_PATH); + final var serviceParameters = serviceParametersForExecution( + functionHash, DYNAMIC_ETH_CALLS_CONTRACT_ADDRESS, ETH_CALL, 0L, BlockType.LATEST); + + assertThat(contractCallService.processCall(serviceParameters)).isEqualTo(successfulResponse); + } + @RequiredArgsConstructor enum DynamicCallsContractFunctions { MINT_FUNGIBLE_TOKEN( @@ -245,7 +270,8 @@ enum DynamicCallsContractFunctions { }, null), GRANT_KYC_REVOKE_KYC_FUNGIBLE("grantKycRevokeKyc", new Object[] {FUNGIBLE_TOKEN_ADDRESS, SENDER_ALIAS}, null), - GRANT_KYC_REVOKE_KYC_NFT("grantKycRevokeKyc", new Object[] {NFT_ADDRESS, SENDER_ALIAS}, null); + GRANT_KYC_REVOKE_KYC_NFT("grantKycRevokeKyc", new Object[] {NFT_ADDRESS, SENDER_ALIAS}, null), + ADDRESS_THIS("getAddressThis", null, null); private final String name; private final Object[] functionParameters; private final String expectedErrorMessage; diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallEvmCodesTest.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallEvmCodesTest.java index fd0709909e3..f42d6763585 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallEvmCodesTest.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallEvmCodesTest.java @@ -256,7 +256,7 @@ void testNonSystemContractCodeHash(String input, String expectedOutput) { @Test void deployAddressThisContract() { final var serviceParameters = serviceParametersForAddressThis( - Bytes.wrap(functionEncodeDecoder.getContractBytes(ADDRESS_THIS_CONTRACT_BYTES_PATH))); + Bytes.wrap(functionEncodeDecoder.getContractBytes(ADDRESS_THIS_CONTRACT_INIT_BYTES_PATH))); final var expectedGasUsed = gasUsedAfterExecution(serviceParameters); assertThat(isWithinExpectedGasRange( @@ -278,6 +278,19 @@ void addressThisFromFunction() { .isTrue(); } + @Test + void addressThisEthCallWithoutEvmAlias() { + String addressThisContractAddressWithout0x = + ADDRESS_THIS_CONTRACT_ADDRESS.toString().substring(2); + String successfulResponse = "0x000000000000000000000000" + addressThisContractAddressWithout0x; + final var functionHash = + functionEncodeDecoder.functionHashFor("getAddressThis", ADDRESS_THIS_CONTRACT_ABI_PATH); + final var serviceParameters = serviceParametersForExecution( + functionHash, ADDRESS_THIS_CONTRACT_ADDRESS, ETH_CALL, 0L, BlockType.LATEST); + + assertThat(contractCallService.processCall(serviceParameters)).isEqualTo(successfulResponse); + } + @Test void deployNestedAddressThisContract() { final var serviceParameters = serviceParametersForAddressThis( diff --git a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallTestSetup.java b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallTestSetup.java index 811b90f269f..479fd5bf9e4 100644 --- a/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallTestSetup.java +++ b/hedera-mirror-web3/src/test/java/com/hedera/mirror/web3/service/ContractCallTestSetup.java @@ -576,6 +576,9 @@ public class ContractCallTestSetup extends Web3IntegrationTest { @Value("classpath:contracts/TestContractAddress/TestAddressThis.bin") protected Path ADDRESS_THIS_CONTRACT_BYTES_PATH; + @Value("classpath:contracts/TestContractAddress/TestAddressThisInit.bin") + protected Path ADDRESS_THIS_CONTRACT_INIT_BYTES_PATH; + @Value("classpath:contracts/TestContractAddress/TestAddressThis.json") protected Path ADDRESS_THIS_CONTRACT_ABI_PATH; diff --git a/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.bin b/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.bin index e7ceec14344..5fc8fef19c1 100644 --- a/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.bin +++ b/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.bin @@ -1 +1 @@ -608060405234801562000010575f80fd5b506004361062000152575f3560e01c806375f2e08711620000c7578063e11bf7741162000085578063e11bf7741462000379578063ebe1e5fb1462000399578063ec679c0714620003b9578063efe60aeb14620003d9578063f8c2942514620003f9578063fccbaa1c14620004195762000152565b806375f2e08714620002c35780639b23d3d914620002e3578063a626444e1462000319578063af4494fb1462000339578063cce8abc314620003595762000152565b80634b27d1ac11620001155780634b27d1ac146200020c5780634dc21f9f146200022c578063618dc65e146200024c5780636a31efd814620002835780636f9dc0e014620002a35762000152565b80630865dc5a146200015657806315dacbea146200017657806318f0c5d214620001ac5780632535f20e14620001cc578063348db43414620001ec575b5f80fd5b6200017460048036038101906200016e91906200707a565b62000439565b005b6200019460048036038101906200018e9190620070e9565b62000cb2565b604051620001a3919062007175565b60405180910390f35b620001ca6004803603810190620001c4919062007190565b62000dd4565b005b620001ea6004803603810190620001e49190620071d5565b62000fd8565b005b6200020a60048036038101906200020491906200707a565b6200140e565b005b6200022a60048036038101906200022491906200707a565b6200179e565b005b6200024a6004803603810190620002449190620073c9565b62001a24565b005b6200026a60048036038101906200026491906200751a565b62001f2e565b6040516200027a9291906200761c565b60405180910390f35b620002a160048036038101906200029b9190620073c9565b620020a0565b005b620002c16004803603810190620002bb91906200764e565b620025af565b005b620002e16004803603810190620002db91906200707a565b62002a38565b005b620003016004803603810190620002fb9190620070e9565b62002f94565b60405162000310919062007175565b60405180910390f35b62000337600480360381019062000331919062007ba5565b620030b6565b005b6200035760048036038101906200035191906200764e565b6200361f565b005b62000377600480360381019062000371919062007ba5565b62003900565b005b620003976004803603810190620003919190620071d5565b62003df0565b005b620003b76004803603810190620003b1919062007d1c565b6200425b565b005b620003d76004803603810190620003d1919062007ba5565b620047b3565b005b620003f76004803603810190620003f1919062007daa565b62004f7c565b005b62000417600480360381019062000411919062007190565b62005174565b005b62000437600480360381019062000431919062007dda565b62005378565b005b5f604051620004489062006ec2565b604051809103905ff08015801562000462573d5f803e3d5ffd5b5090505f600167ffffffffffffffff81111562000484576200048362007271565b5b604051908082528060200260200182016040528015620004b35781602001602082028036833780820191505090505b50905085815f81518110620004cd57620004cc62007e1f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f62000514838362005590565b90505f851180156200052557505f84145b156200091757601660030b811462000574576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200056b9062007eaa565b60405180910390fd5b62000581878487620056ac565b9050601660030b8114620005cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c39062007f3e565b60405180910390fd5b5f8773ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b815260040162000608919062007f6f565b602060405180830381865afa15801562000624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200064a919062007fa0565b9050858873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b81526004016200068a92919062007fd0565b602060405180830381865afa158015620006a6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620006cc919062007fa0565b146200070f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000706906200806f565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16634444fbf78988308b6040518563ffffffff1660e01b8152600401620007509493929190620080a0565b5f604051808303815f87803b15801562000768575f80fd5b505af11580156200077b573d5f803e3d5ffd5b5050505085816200078d919062008118565b8873ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401620007c8919062007f6f565b602060405180830381865afa158015620007e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200080a919062007fa0565b146200084d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200084490620081a0565b60405180910390fd5b5f8873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b81526004016200088b92919062007fd0565b602060405180830381865afa158015620008a7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620008cd919062007fa0565b1462000910576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009079062008234565b60405180910390fd5b5062000ca9565b5f62000925888587620057cb565b9050601660030b811462000970576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096790620082c8565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1663081812fc876040518263ffffffff1660e01b8152600401620009c29190620082e8565b602060405180830381865afa158015620009de573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000a04919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462000a5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5490620083bd565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16634adcaa718987308b6040518563ffffffff1660e01b815260040162000a9e9493929190620080a0565b5f604051808303815f87803b15801562000ab6575f80fd5b505af115801562000ac9573d5f803e3d5ffd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b815260040162000b1f9190620082e8565b602060405180830381865afa15801562000b3b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000b61919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462000bba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bb19062008451565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1663081812fc876040518263ffffffff1660e01b815260040162000c0c9190620082e8565b602060405180830381865afa15801562000c28573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000c4e919062008319565b73ffffffffffffffffffffffffffffffffffffffff160362000ca7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c9e90620084e5565b60405180910390fd5b505b50505050505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff166315dacbea60e01b8888888860405160240162000cef949392919062008505565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162000d5b919062008590565b5f604051808303815f865af19150503d805f811462000d96576040519150601f19603f3d011682016040523d82523d5f602084013e62000d9b565b606091505b50915091508162000dae57601562000dc5565b8080602001905181019062000dc49190620085e3565b5b60030b92505050949350505050565b5f62000de18383620058ea565b60070b9050601660030b811462000e2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e269062008687565b60405180910390fd5b5f8062000e3d858562005a06565b915060070b9150601660030b821462000e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e84906200871b565b60405180910390fd5b8062000ed0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ec79062008789565b60405180910390fd5b62000edc858562005b2e565b60070b9250601660030b831462000f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f2190620087f7565b60405180910390fd5b62000f36858562005a06565b8160070b91508092508193505050601660030b821462000f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f84906200888b565b60405180910390fd5b801562000fd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fc890620088f9565b60405180910390fd5b5050505050565b5f62001063848573ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401620010199190620082e8565b602060405180830381865afa15801562001035573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200105b919062008319565b308562005c4a565b9050601660030b8114620010ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010a59062008967565b60405180910390fd5b620010bc8484600162005d6c565b9050601660030b811462001107576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010fe90620082c8565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663e985e9c530856040518363ffffffff1660e01b81526004016200114492919062007fd0565b602060405180830381865afa15801562001160573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200118691906200899d565b620011c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011bf90620083bd565b60405180910390fd5b620011d68430858562005c4a565b9050601660030b811462001221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012189062008967565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401620012739190620082e8565b602060405180830381865afa1580156200128f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620012b5919062008319565b73ffffffffffffffffffffffffffffffffffffffff16146200130e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013059062008451565b60405180910390fd5b6200131b84845f62005d6c565b9050601660030b811462001366576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200135d90620082c8565b60405180910390fd5b5f806200137586308762005e8b565b91509150601660030b8214620013c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013b99062008a1b565b60405180910390fd5b801562001406576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620013fd90620083bd565b60405180910390fd5b505050505050565b5f821180156200141d57505f81145b15620015d3575f8473ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b81526004016200145f919062007f6f565b602060405180830381865afa1580156200147b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620014a1919062007fa0565b90505f620014b28630878762005fb6565b9050601660030b8114620014fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620014f49062008aaf565b60405180910390fd5b83826200150b919062008118565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040162001546919062007f6f565b602060405180830381865afa15801562001562573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001588919062007fa0565b14620015cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015c290620081a0565b60405180910390fd5b505062001798565b5f6200165e858673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401620016149190620082e8565b602060405180830381865afa15801562001630573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001656919062008319565b308562005c4a565b9050601660030b8114620016a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016a09062008967565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401620016fb9190620082e8565b602060405180830381865afa15801562001717573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200173d919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462001796576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200178d9062008451565b60405180910390fd5b505b50505050565b5f82118015620017ad57505f81145b15620018d6575f620017c1858585620056ac565b9050601660030b81146200180c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018039062008b1d565b60405180910390fd5b828573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30876040518363ffffffff1660e01b81526004016200184a92919062007fd0565b602060405180830381865afa15801562001866573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200188c919062007fa0565b14620018cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018c69062008b8b565b60405180910390fd5b5062001a1e565b5f620018e4858584620057cb565b9050601660030b81146200192f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620019269062008bf9565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1663081812fc846040518263ffffffff1660e01b8152600401620019819190620082e8565b602060405180830381865afa1580156200199d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620019c3919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462001a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001a139062008c67565b60405180910390fd5b505b50505050565b5f808460070b13801562001a3857505f8351145b1562001ac3578473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040162001a79919062007f6f565b602060405180830381865afa15801562001a95573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001abb919062007fa0565b905062001b43565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040162001afe919062007f6f565b602060405180830381865afa15801562001b1a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001b40919062007fa0565b90505b5f8062001b5087620060d8565b91509150601660030b821462001b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001b949062008cfb565b60405180910390fd5b5f816020015160070b90505f62001bb689898962006210565b8060070b90508092508195505050601660030b841462001c0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c049062008d69565b60405180910390fd5b62001c1889620060d8565b8094508195505050601660030b841462001c69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c609062008dfd565b60405180910390fd5b5f836020015160070b90505f8960070b13801562001c8757505f8851145b1562001cf657808960070b8462001c9f919062008e1d565b14158062001cad5750808214155b1562001cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001ce79062008ed8565b60405180910390fd5b62001d58565b8088518462001d06919062008e1d565b14158062001d145750808214155b1562001d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001d4e9062008f6c565b60405180910390fd5b5b5f8960070b13801562001d6b57505f8851145b1562001e4d575f8a73ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b815260040162001dad919062007f6f565b602060405180830381865afa15801562001dc9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001def919062007fa0565b9050808a60070b8862001e03919062008f8c565b1462001e46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001e3d906200903a565b60405180910390fd5b5062001f22565b5f8a73ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b815260040162001e89919062007f6f565b602060405180830381865afa15801562001ea5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001ecb919062007fa0565b90508089518862001edd919062008f8c565b1462001f20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001f1790620090ce565b60405180910390fd5b505b50505050505050505050565b5f60605f8061016773ffffffffffffffffffffffffffffffffffffffff1663618dc65e60e01b878760405160240162001f69929190620090ee565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162001fd5919062008590565b5f604051808303815f865af19150503d805f811462002010576040519150601f19603f3d011682016040523d82523d5f602084013e62002015565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc82826040516200204d92919062009131565b60405180910390a1816200207257601560405180602001604052805f81525062002089565b80806020019051810190620020889190620091df565b5b8160030b9150809450819550505050509250929050565b5f808460070b138015620020b457505f8351145b156200213f578473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401620020f5919062007f6f565b602060405180830381865afa15801562002111573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002137919062007fa0565b9050620021bf565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b81526004016200217a919062007f6f565b602060405180830381865afa15801562002196573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620021bc919062007fa0565b90505b5f80620021cc87620060d8565b91509150601660030b821462002219576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200221090620092b7565b60405180910390fd5b5f816020015160070b90505f8760070b1380156200223757505f8651145b1562002252576200224a8886896200633b565b925062002262565b6200225f8886886200645a565b92505b601660030b8314620022ab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022a29062009325565b60405180910390fd5b620022b688620060d8565b8093508194505050601660030b831462002307576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620022fe90620093b9565b60405180910390fd5b5f826020015160070b90505f8860070b1380156200232557505f8751145b156200238657808860070b836200233d919062008e1d565b1462002380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002377906200944d565b60405180910390fd5b620023da565b8087518362002396919062008e1d565b14620023d9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620023d09062008f6c565b60405180910390fd5b5b5f8860070b138015620023ed57505f8751145b15620024cf575f8973ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016200242f919062007f6f565b602060405180830381865afa1580156200244b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002471919062007fa0565b9050808960070b8762002485919062008f8c565b14620024c8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620024bf90620094e1565b60405180910390fd5b50620025a4565b5f8973ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b81526004016200250b919062007f6f565b602060405180830381865afa15801562002527573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200254d919062007fa0565b9050808851876200255f919062008f8c565b14620025a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620025999062009575565b60405180910390fd5b505b505050505050505050565b5f600167ffffffffffffffff811115620025ce57620025cd62007271565b5b604051908082528060200260200182016040528015620025fd5781602001602082028036833780820191505090505b50905085815f8151811062002617576200261662007e1f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f6200265e858362005590565b9050601660030b8114620026a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620026a090620095e3565b60405180910390fd5b5f84118015620026b857505f83145b156200286c575f8773ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b8152600401620026fa919062007f6f565b602060405180830381865afa15801562002716573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200273c919062007fa0565b90506200274c8888888862005fb6565b9150601660030b821462002797576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200278e9062008aaf565b60405180910390fd5b8481620027a5919062008118565b8873ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401620027e0919062007f6f565b602060405180830381865afa158015620027fc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002822919062007fa0565b1462002865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200285c90620081a0565b60405180910390fd5b5062002a2f565b620028f6878873ffffffffffffffffffffffffffffffffffffffff16636352211e866040518263ffffffff1660e01b8152600401620028ac9190620082e8565b602060405180830381865afa158015620028c8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620028ee919062008319565b878662005c4a565b9050601660030b811462002941576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620029389062008967565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401620029939190620082e8565b602060405180830381865afa158015620029af573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620029d5919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462002a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002a259062008451565b60405180910390fd5b5b50505050505050565b5f8211801562002a4757505f81145b1562002d18575f62002a5b858585620056ac565b9050601660030b811462002aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002a9d9062007f3e565b60405180910390fd5b5f8573ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040162002ae2919062007f6f565b602060405180830381865afa15801562002afe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002b24919062007fa0565b9050838673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30886040518363ffffffff1660e01b815260040162002b6492919062007fd0565b602060405180830381865afa15801562002b80573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002ba6919062007fa0565b1462002be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002be0906200806f565b60405180910390fd5b62002bf78630878762005fb6565b9150601660030b821462002c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002c399062008aaf565b60405180910390fd5b838162002c50919062008118565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040162002c8b919062007f6f565b602060405180830381865afa15801562002ca7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002ccd919062007fa0565b1462002d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002d0790620081a0565b60405180910390fd5b505062002f8e565b5f62002da3858673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b815260040162002d599190620082e8565b602060405180830381865afa15801562002d75573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002d9b919062008319565b308562005c4a565b9050601660030b811462002dee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002de59062008967565b60405180910390fd5b62002dfb858584620057cb565b9050601660030b811462002e46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002e3d90620082c8565b60405180910390fd5b62002e548530868562005c4a565b9050601660030b811462002e9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002e969062008967565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040162002ef19190620082e8565b602060405180830381865afa15801562002f0d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062002f33919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462002f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162002f839062008451565b60405180910390fd5b505b50505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16639b23d3d960e01b8888888860405160240162002fd1949392919062008505565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200303d919062008590565b5f604051808303815f865af19150503d805f811462003078576040519150601f19603f3d011682016040523d82523d5f602084013e6200307d565b606091505b50915091508162003090576015620030a7565b80806020019051810190620030a69190620085e3565b5b60030b92505050949350505050565b5f815f81518110620030cd57620030cc62007e1f565b5b60200260200101515f015190505f805f80855f81518110620030f457620030f362007e1f565b5b602002602001015160200151511115620031a357845f815181106200311e576200311d62007e1f565b5b60200260200101516020015160018151811062003140576200313f62007e1f565b5b60200260200101515f01519250845f8151811062003163576200316262007e1f565b5b60200260200101516020015160018151811062003185576200318462007e1f565b5b60200260200101516020015167ffffffffffffffff16915062003238565b845f81518110620031b957620031b862007e1f565b5b6020026020010151604001515f81518110620031da57620031d962007e1f565b5b6020026020010151602001519250845f81518110620031fe57620031fd62007e1f565b5b6020026020010151604001515f815181106200321f576200321e62007e1f565b5b60200260200101516040015167ffffffffffffffff1690505b5f821180156200324757505f81145b15620033fb575f8473ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040162003289919062007f6f565b602060405180830381865afa158015620032a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620032cb919062007fa0565b90505f620032da888862006579565b9050601660030b811462003325576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200331c9062008aaf565b60405180910390fd5b838262003333919062008118565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b81526004016200336e919062007f6f565b602060405180830381865afa1580156200338a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620033b0919062007fa0565b14620033f3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620033ea90620081a0565b60405180910390fd5b505062003617565b5f62003486858673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b81526004016200343c9190620082e8565b602060405180830381865afa15801562003458573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200347e919062008319565b308562005c4a565b9050601660030b8114620034d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620034c89062008967565b60405180910390fd5b620034dd878762006579565b9050601660030b811462003528576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200351f9062008967565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b81526004016200357a9190620082e8565b602060405180830381865afa15801562003596573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620035bc919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462003615576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200360c9062008451565b60405180910390fd5b505b505050505050565b5f600167ffffffffffffffff8111156200363e576200363d62007271565b5b6040519080825280602002602001820160405280156200366d5781602001602082028036833780820191505090505b50905085815f8151811062003687576200368662007e1f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f620036ce868362005590565b9050601660030b811462003719576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200371090620095e3565b60405180910390fd5b62003725868362006695565b9050601660030b811462003770576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620037679062009651565b60405180910390fd5b5f841180156200377f57505f83145b156200384b578673ffffffffffffffffffffffffffffffffffffffff166323b872dd8787876040518463ffffffff1660e01b8152600401620037c49392919062009671565b6020604051808303815f875af19250505080156200380257506040513d601f19601f82011682018060405250810190620037ff91906200899d565b60015b62003844576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200383b90620096fa565b60405180910390fd5b50620038f7565b8673ffffffffffffffffffffffffffffffffffffffff166323b872dd8787866040518463ffffffff1660e01b81526004016200388a9392919062009671565b5f604051808303815f87803b158015620038a2575f80fd5b505af1925050508015620038b4575060015b620038f6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620038ed9062009768565b60405180910390fd5b5b50505050505050565b5f815f8151811062003917576200391662007e1f565b5b60200260200101515f015190505f825f815181106200393b576200393a62007e1f565b5b6020026020010151604001515f815181106200395c576200395b62007e1f565b5b60200260200101516020015190505f835f8151811062003981576200398062007e1f565b5b6020026020010151604001515f81518110620039a257620039a162007e1f565b5b60200260200101516040015167ffffffffffffffff1690505f62003a45848573ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b8152600401620039fb9190620082e8565b602060405180830381865afa15801562003a17573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003a3d919062008319565b308562005c4a565b9050601660030b811462003a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003a879062008967565b60405180910390fd5b62003a9e8484600162005d6c565b9050601660030b811462003ae9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003ae090620082c8565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663e985e9c530856040518363ffffffff1660e01b815260040162003b2692919062007fd0565b602060405180830381865afa15801562003b42573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003b6891906200899d565b62003baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003ba190620083bd565b60405180910390fd5b62003bb6868662006579565b9050601660030b811462003c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003bf89062008967565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040162003c539190620082e8565b602060405180830381865afa15801562003c6f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003c95919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462003cee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003ce59062008451565b60405180910390fd5b62003cfb84845f62005d6c565b9050601660030b811462003d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003d3d90620082c8565b60405180910390fd5b5f8062003d5586308762005e8b565b91509150601660030b821462003da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003d999062008a1b565b60405180910390fd5b801562003de6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003ddd90620083bd565b60405180910390fd5b5050505050505050565b5f62003e7b848573ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b815260040162003e319190620082e8565b602060405180830381865afa15801562003e4d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003e73919062008319565b308562005c4a565b9050601660030b811462003ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003ebd9062008967565b60405180910390fd5b62003ed48484600162005d6c565b9050601660030b811462003f1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003f1690620082c8565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663e985e9c530856040518363ffffffff1660e01b815260040162003f5c92919062007fd0565b602060405180830381865afa15801562003f78573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062003f9e91906200899d565b62003fe0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162003fd790620083bd565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3085856040518463ffffffff1660e01b81526004016200401f9392919062009671565b5f604051808303815f87803b15801562004037575f80fd5b505af11580156200404a573d5f803e3d5ffd5b505050508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401620040a09190620082e8565b602060405180830381865afa158015620040bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620040e2919062008319565b73ffffffffffffffffffffffffffffffffffffffff16146200413b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620041329062008451565b60405180910390fd5b6200414884845f62005d6c565b9050601660030b811462004193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200418a90620082c8565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663e985e9c530856040518363ffffffff1660e01b8152600401620041d092919062007fd0565b602060405180830381865afa158015620041ec573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200421291906200899d565b1562004255576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200424c90620083bd565b60405180910390fd5b50505050565b5f808460070b1380156200426f57505f8351145b15620042fa578473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401620042b0919062007f6f565b602060405180830381865afa158015620042cc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620042f2919062007fa0565b90506200437a565b8473ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040162004335919062007f6f565b602060405180830381865afa15801562004351573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004377919062007fa0565b90505b5f806200438787620060d8565b91509150601660030b8214620043d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620043cb90620097d6565b60405180910390fd5b5f816020015160070b90505f6060620043ef8a8a8a620067b1565b8160070b9150809350819450829750505050601660030b85146200444a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620044419062009844565b60405180910390fd5b620044558a620060d8565b8095508196505050601660030b8514620044a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200449d90620098d8565b60405180910390fd5b5f846020015160070b90505f8a60070b138015620044c457505f8951145b156200453357808a60070b85620044dc9190620098f8565b141580620044ea5750808314155b156200452d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200452490620099b4565b60405180910390fd5b620045dc565b88518251146200457a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620045719062009a48565b60405180910390fd5b808951856200458a9190620098f8565b141580620045985750808314155b15620045db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620045d29062009adc565b60405180910390fd5b5b5f8a60070b138015620045ef57505f8951145b15620046d1575f8b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b815260040162004631919062007f6f565b602060405180830381865afa1580156200464d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004673919062007fa0565b9050808b60070b8962004687919062008118565b14620046ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620046c19062009b70565b60405180910390fd5b50620047a6565b5f8b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b81526004016200470d919062007f6f565b602060405180830381865afa15801562004729573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200474f919062007fa0565b9050808a518962004761919062008118565b14620047a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200479b9062009c04565b60405180910390fd5b505b5050505050505050505050565b5f815f81518110620047ca57620047c962007e1f565b5b60200260200101515f015190505f805f80855f81518110620047f157620047f062007e1f565b5b602002602001015160200151511115620048a057845f815181106200481b576200481a62007e1f565b5b6020026020010151602001516001815181106200483d576200483c62007e1f565b5b60200260200101515f01519250845f8151811062004860576200485f62007e1f565b5b60200260200101516020015160018151811062004882576200488162007e1f565b5b60200260200101516020015167ffffffffffffffff16915062004935565b845f81518110620048b657620048b562007e1f565b5b6020026020010151604001515f81518110620048d757620048d662007e1f565b5b6020026020010151602001519250845f81518110620048fb57620048fa62007e1f565b5b6020026020010151604001515f815181106200491c576200491b62007e1f565b5b60200260200101516040015167ffffffffffffffff1690505b5f821180156200494457505f81145b1562004c13575f62004958858585620056ac565b9050601660030b8114620049a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200499a9062007f3e565b60405180910390fd5b5f8573ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401620049df919062007f6f565b602060405180830381865afa158015620049fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004a21919062007fa0565b9050838673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30886040518363ffffffff1660e01b815260040162004a6192919062007fd0565b602060405180830381865afa15801562004a7d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004aa3919062007fa0565b1462004ae6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004add906200806f565b60405180910390fd5b62004af2888862006579565b9150601660030b821462004b3d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004b349062008aaf565b60405180910390fd5b838162004b4b919062008118565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231876040518263ffffffff1660e01b815260040162004b86919062007f6f565b602060405180830381865afa15801562004ba2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004bc8919062007fa0565b1462004c0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004c0290620081a0565b60405180910390fd5b505062004f74565b5f62004c9e858673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff1660e01b815260040162004c549190620082e8565b602060405180830381865afa15801562004c70573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004c96919062008319565b308562005c4a565b9050601660030b811462004ce9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004ce09062008967565b60405180910390fd5b62004cf6858584620057cb565b9050601660030b811462004d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004d3890620082c8565b60405180910390fd5b62004d4d878762006579565b9050601660030b811462004d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004d8f9062008967565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b815260040162004dea9190620082e8565b602060405180830381865afa15801562004e06573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004e2c919062008319565b73ffffffffffffffffffffffffffffffffffffffff161462004e85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004e7c9062008451565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1663081812fc846040518263ffffffff1660e01b815260040162004ed79190620082e8565b602060405180830381865afa15801562004ef3573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062004f19919062008319565b73ffffffffffffffffffffffffffffffffffffffff160362004f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004f6990620084e5565b60405180910390fd5b505b505050505050565b5f62004f888262006930565b9050601660030b811462004fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162004fca9062009c72565b60405180910390fd5b5f8062004fe084620060d8565b91509150601660030b82146200502d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620050249062009d06565b60405180910390fd5b806080015162005074576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200506b9062009d74565b60405180910390fd5b6200507f8462006a49565b9250601660030b8314620050ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620050c19062009de2565b60405180910390fd5b620050d584620060d8565b8092508193505050601660030b821462005126576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200511d9062009e76565b60405180910390fd5b8060800151156200516e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620051659062009ee4565b60405180910390fd5b50505050565b5f62005181838362006b62565b60070b9050601660030b8114620051cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620051c69062009f52565b60405180910390fd5b5f80620051dd858562006c7e565b915060070b9150601660030b82146200522d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620052249062009fc0565b60405180910390fd5b8062005270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162005267906200a02e565b60405180910390fd5b6200527c858562006da6565b60070b9250601660030b8314620052ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620052c19062009f52565b60405180910390fd5b620052d6858562006c7e565b8160070b91508092508193505050601660030b82146200532d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620053249062009fc0565b60405180910390fd5b801562005371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162005368906200a02e565b60405180910390fd5b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd8373ffffffffffffffffffffffffffffffffffffffff16636352211e846040518263ffffffff1660e01b8152600401620053cf9190620082e8565b602060405180830381865afa158015620053eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005411919062008319565b30846040518463ffffffff1660e01b8152600401620054339392919062009671565b5f604051808303815f87803b1580156200544b575f80fd5b505af19250505080156200545d575060015b6200549f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620054969062009768565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401620054f19190620082e8565b602060405180830381865afa1580156200550d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062005533919062008319565b73ffffffffffffffffffffffffffffffffffffffff16146200558c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620055839062008451565b60405180910390fd5b5050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16632e63879b60e01b8686604051602401620055c99291906200a115565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005635919062008590565b5f604051808303815f865af19150503d805f811462005670576040519150601f19603f3d011682016040523d82523d5f602084013e62005675565b606091505b509150915081620056885760156200569f565b808060200190518101906200569e9190620085e3565b5b60030b9250505092915050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff1663e1f21c6760e01b878787604051602401620056e79392919062009671565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005753919062008590565b5f604051808303815f865af19150503d805f81146200578e576040519150601f19603f3d011682016040523d82523d5f602084013e62005793565b606091505b509150915081620057a6576015620057bd565b80806020019051810190620057bc9190620085e3565b5b60030b925050509392505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16637336aaf060e01b878787604051602401620058069392919062009671565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005872919062008590565b5f604051808303815f865af19150503d805f8114620058ad576040519150601f19603f3d011682016040523d82523d5f602084013e620058b2565b606091505b509150915081620058c5576015620058dc565b80806020019051810190620058db9190620085e3565b5b60030b925050509392505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16635b8f858460e01b86866040516024016200592392919062007fd0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200598f919062008590565b5f604051808303815f865af19150503d805f8114620059ca576040519150601f19603f3d011682016040523d82523d5f602084013e620059cf565b606091505b509150915081620059e2576015620059f9565b80806020019051810190620059f89190620085e3565b5b60030b9250505092915050565b5f805f8061016773ffffffffffffffffffffffffffffffffffffffff166346de0fb160e01b878760405160240162005a4092919062007fd0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005aac919062008590565b5f604051808303815f865af19150503d805f811462005ae7576040519150601f19603f3d011682016040523d82523d5f602084013e62005aec565b606091505b50915091508162005b005760155f62005b17565b8080602001905181019062005b1691906200a147565b5b8160030b9150809450819550505050509250929050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff166352f9138760e01b868660405160240162005b6792919062007fd0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005bd3919062008590565b5f604051808303815f865af19150503d805f811462005c0e576040519150601f19603f3d011682016040523d82523d5f602084013e62005c13565b606091505b50915091508162005c2657601562005c3d565b8080602001905181019062005c3c9190620085e3565b5b60030b9250505092915050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16635cfc901160e01b8888888860405160240162005c8794939291906200a18c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005cf3919062008590565b5f604051808303815f865af19150503d805f811462005d2e576040519150601f19603f3d011682016040523d82523d5f602084013e62005d33565b606091505b50915091508162005d4657601562005d5d565b8080602001905181019062005d5c9190620085e3565b5b60030b92505050949350505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff1663367605ca60e01b87878760405160240162005da7939291906200a1d7565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005e13919062008590565b5f604051808303815f865af19150503d805f811462005e4e576040519150601f19603f3d011682016040523d82523d5f602084013e62005e53565b606091505b50915091508162005e6657601562005e7d565b8080602001905181019062005e7c9190620085e3565b5b60030b925050509392505050565b5f805f8061016773ffffffffffffffffffffffffffffffffffffffff1663f49f40db60e01b88888860405160240162005ec7939291906200a212565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162005f33919062008590565b5f604051808303815f865af19150503d805f811462005f6e576040519150601f19603f3d011682016040523d82523d5f602084013e62005f73565b606091505b50915091508162005f875760155f62005f9e565b8080602001905181019062005f9d91906200a147565b5b8160030b915080945081955050505050935093915050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff1663eca3691760e01b8888888860405160240162005ff394939291906200a18c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200605f919062008590565b5f604051808303815f865af19150503d805f81146200609a576040519150601f19603f3d011682016040523d82523d5f602084013e6200609f565b606091505b509150915081620060b2576015620060c9565b80806020019051810190620060c89190620085e3565b5b60030b92505050949350505050565b5f620060e362006ed0565b5f8061016773ffffffffffffffffffffffffffffffffffffffff16631f69565f60e01b8660405160240162006119919062007f6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162006185919062008590565b5f604051808303815f865af19150503d805f8114620061c0576040519150601f19603f3d011682016040523d82523d5f602084013e620061c5565b606091505b5091509150620061d462006ed0565b82620061e357601581620061fa565b81806020019051810190620061f991906200ad2b565b5b8160030b91508095508196505050505050915091565b5f805f8061016773ffffffffffffffffffffffffffffffffffffffff1663d6910d0660e01b8888886040516024016200624c939291906200ae56565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620062b8919062008590565b5f604051808303815f865af19150503d805f8114620062f3576040519150601f19603f3d011682016040523d82523d5f602084013e620062f8565b606091505b5091509150816200630c5760155f62006323565b808060200190518101906200632291906200ae98565b5b8160030b915080945081955050505050935093915050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff1663efef57f960e01b87878760405160240162006376939291906200aedd565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620063e2919062008590565b5f604051808303815f865af19150503d805f81146200641d576040519150601f19603f3d011682016040523d82523d5f602084013e62006422565b606091505b509150915081620064355760156200644c565b808060200190518101906200644b9190620085e3565b5b60030b925050509392505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff1663f7f38e2660e01b87878760405160240162006495939291906200af18565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162006501919062008590565b5f604051808303815f865af19150503d805f81146200653c576040519150601f19603f3d011682016040523d82523d5f602084013e62006541565b606091505b509150915081620065545760156200656b565b808060200190518101906200656a9190620085e3565b5b60030b925050509392505050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16630e71804f60e01b8686604051602401620065b29291906200b2c4565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200661e919062008590565b5f604051808303815f865af19150503d805f811462006659576040519150601f19603f3d011682016040523d82523d5f602084013e6200665e565b606091505b5091509150816200667157601562006688565b80806020019051810190620066879190620085e3565b5b60030b9250505092915050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff166378b6391860e01b8686604051602401620066ce9291906200a115565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200673a919062008590565b5f604051808303815f865af19150503d805f811462006775576040519150601f19603f3d011682016040523d82523d5f602084013e6200677a565b606091505b5091509150816200678d576015620067a4565b80806020019051810190620067a39190620085e3565b5b60030b9250505092915050565b5f8060605f8061016773ffffffffffffffffffffffffffffffffffffffff1663e0f4059a60e01b898989604051602401620067ef939291906200b416565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516200685b919062008590565b5f604051808303815f865af19150503d805f811462006896576040519150601f19603f3d011682016040523d82523d5f602084013e6200689b565b606091505b509150915081620068fc5760155f8067ffffffffffffffff811115620068c657620068c562007271565b5b604051908082528060200260200182016040528015620068f55781602001602082028036833780820191505090505b5062006913565b808060200190518101906200691291906200b4fd565b5b8260030b9250809550819650829750505050505093509350939050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16637c41ad2c60e01b8560405160240162006967919062007f6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051620069d3919062008590565b5f604051808303815f865af19150503d805f811462006a0e576040519150601f19603f3d011682016040523d82523d5f602084013e62006a13565b606091505b50915091508162006a2657601562006a3d565b8080602001905181019062006a3c9190620085e3565b5b60030b92505050919050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16633b3bff0f60e01b8560405160240162006a80919062007f6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162006aec919062008590565b5f604051808303815f865af19150503d805f811462006b27576040519150601f19603f3d011682016040523d82523d5f602084013e62006b2c565b606091505b50915091508162006b3f57601562006b56565b8080602001905181019062006b559190620085e3565b5b60030b92505050919050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff16638f8d7f9960e01b868660405160240162006b9b92919062007fd0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162006c07919062008590565b5f604051808303815f865af19150503d805f811462006c42576040519150601f19603f3d011682016040523d82523d5f602084013e62006c47565b606091505b50915091508162006c5a57601562006c71565b8080602001905181019062006c709190620085e3565b5b60030b9250505092915050565b5f805f8061016773ffffffffffffffffffffffffffffffffffffffff1663f2c31ff460e01b878760405160240162006cb892919062007fd0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162006d24919062008590565b5f604051808303815f865af19150503d805f811462006d5f576040519150601f19603f3d011682016040523d82523d5f602084013e62006d64565b606091505b50915091508162006d785760155f62006d8f565b8080602001905181019062006d8e91906200a147565b5b8160030b9150809450819550505050509250929050565b5f805f61016773ffffffffffffffffffffffffffffffffffffffff1663af99c63360e01b868660405160240162006ddf92919062007fd0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505060405162006e4b919062008590565b5f604051808303815f865af19150503d805f811462006e86576040519150601f19603f3d011682016040523d82523d5f602084013e62006e8b565b606091505b50915091508162006e9e57601562006eb5565b8080602001905181019062006eb49190620085e3565b5b60030b9250505092915050565b61035f806200b57683390190565b60405180610120016040528062006ee662006f29565b81526020015f60070b81526020015f151581526020015f151581526020015f15158152602001606081526020016060815260200160608152602001606081525090565b60405180610120016040528060608152602001606081526020015f73ffffffffffffffffffffffffffffffffffffffff168152602001606081526020015f151581526020015f60070b81526020015f151581526020016060815260200162006f9062006f96565b81525090565b60405180606001604052805f60070b81526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f60070b81525090565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200700c8262006fe1565b9050919050565b6200701e8162007000565b811462007029575f80fd5b50565b5f813590506200703c8162007013565b92915050565b5f819050919050565b620070568162007042565b811462007061575f80fd5b50565b5f8135905062007074816200704b565b92915050565b5f805f806080858703121562007095576200709462006fd9565b5b5f620070a4878288016200702c565b9450506020620070b7878288016200702c565b9350506040620070ca8782880162007064565b9250506060620070dd8782880162007064565b91505092959194509250565b5f805f806080858703121562007104576200710362006fd9565b5b5f62007113878288016200702c565b945050602062007126878288016200702c565b935050604062007139878288016200702c565b92505060606200714c8782880162007064565b91505092959194509250565b5f8160070b9050919050565b6200716f8162007158565b82525050565b5f6020820190506200718a5f83018462007164565b92915050565b5f8060408385031215620071a957620071a862006fd9565b5b5f620071b8858286016200702c565b9250506020620071cb858286016200702c565b9150509250929050565b5f805f60608486031215620071ef57620071ee62006fd9565b5b5f620071fe868287016200702c565b935050602062007211868287016200702c565b9250506040620072248682870162007064565b9150509250925092565b620072398162007158565b811462007244575f80fd5b50565b5f8135905062007257816200722e565b92915050565b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620072a98262007261565b810181811067ffffffffffffffff82111715620072cb57620072ca62007271565b5b80604052505050565b5f620072df62006fd0565b9050620072ed82826200729e565b919050565b5f67ffffffffffffffff8211156200730f576200730e62007271565b5b602082029050602081019050919050565b5f80fd5b5f6200733a6200733484620072f2565b620072d4565b9050808382526020820190506020840283018581111562007360576200735f62007320565b5b835b818110156200738d578062007378888262007247565b84526020840193505060208101905062007362565b5050509392505050565b5f82601f830112620073ae57620073ad6200725d565b5b8135620073c084826020860162007324565b91505092915050565b5f805f8060808587031215620073e457620073e362006fd9565b5b5f620073f3878288016200702c565b9450506020620074068782880162007247565b935050604085013567ffffffffffffffff8111156200742a576200742962006fdd565b5b620074388782880162007397565b92505060606200744b878288016200702c565b91505092959194509250565b5f80fd5b5f67ffffffffffffffff82111562007478576200747762007271565b5b620074838262007261565b9050602081019050919050565b828183375f83830152505050565b5f620074b4620074ae846200745b565b620072d4565b905082815260208101848484011115620074d357620074d262007457565b5b620074e084828562007490565b509392505050565b5f82601f830112620074ff57620074fe6200725d565b5b8135620075118482602086016200749e565b91505092915050565b5f806040838503121562007533576200753262006fd9565b5b5f62007542858286016200702c565b925050602083013567ffffffffffffffff81111562007566576200756562006fdd565b5b6200757485828601620074e8565b9150509250929050565b5f819050919050565b62007592816200757e565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015620075d1578082015181840152602081019050620075b4565b5f8484015250505050565b5f620075e88262007598565b620075f48185620075a2565b935062007606818560208601620075b2565b620076118162007261565b840191505092915050565b5f604082019050620076315f83018562007587565b8181036020830152620076458184620075dc565b90509392505050565b5f805f805f60a086880312156200766a576200766962006fd9565b5b5f62007679888289016200702c565b95505060206200768c888289016200702c565b94505060406200769f888289016200702c565b9350506060620076b28882890162007064565b9250506080620076c58882890162007064565b9150509295509295909350565b5f80fd5b5f80fd5b5f67ffffffffffffffff821115620076f757620076f662007271565b5b602082029050602081019050919050565b5f8115159050919050565b6200771e8162007708565b811462007729575f80fd5b50565b5f813590506200773c8162007713565b92915050565b5f606082840312156200775a5762007759620076d2565b5b620077666060620072d4565b90505f62007777848285016200702c565b5f8301525060206200778c8482850162007247565b6020830152506040620077a2848285016200772c565b60408301525092915050565b5f620077c4620077be84620076da565b620072d4565b90508083825260208201905060608402830185811115620077ea57620077e962007320565b5b835b8181101562007817578062007802888262007742565b845260208401935050606081019050620077ec565b5050509392505050565b5f82601f8301126200783857620078376200725d565b5b81356200784a848260208601620077ae565b91505092915050565b5f602082840312156200786b576200786a620076d2565b5b620078776020620072d4565b90505f82013567ffffffffffffffff811115620078995762007898620076d6565b5b620078a78482850162007821565b5f8301525092915050565b5f67ffffffffffffffff821115620078cf57620078ce62007271565b5b602082029050602081019050919050565b5f67ffffffffffffffff821115620078fd57620078fc62007271565b5b602082029050602081019050919050565b5f60808284031215620079265762007925620076d2565b5b620079326080620072d4565b90505f62007943848285016200702c565b5f83015250602062007958848285016200702c565b60208301525060406200796e8482850162007247565b604083015250606062007984848285016200772c565b60608301525092915050565b5f620079a6620079a084620078e0565b620072d4565b90508083825260208201905060808402830185811115620079cc57620079cb62007320565b5b835b81811015620079f95780620079e488826200790e565b845260208401935050608081019050620079ce565b5050509392505050565b5f82601f83011262007a1a5762007a196200725d565b5b813562007a2c84826020860162007990565b91505092915050565b5f6060828403121562007a4d5762007a4c620076d2565b5b62007a596060620072d4565b90505f62007a6a848285016200702c565b5f83015250602082013567ffffffffffffffff81111562007a905762007a8f620076d6565b5b62007a9e8482850162007821565b602083015250604082013567ffffffffffffffff81111562007ac55762007ac4620076d6565b5b62007ad38482850162007a03565b60408301525092915050565b5f62007af562007aef84620078b2565b620072d4565b9050808382526020820190506020840283018581111562007b1b5762007b1a62007320565b5b835b8181101562007b6957803567ffffffffffffffff81111562007b445762007b436200725d565b5b80860162007b53898262007a35565b8552602085019450505060208101905062007b1d565b5050509392505050565b5f82601f83011262007b8a5762007b896200725d565b5b813562007b9c84826020860162007adf565b91505092915050565b5f806040838503121562007bbe5762007bbd62006fd9565b5b5f83013567ffffffffffffffff81111562007bde5762007bdd62006fdd565b5b62007bec8582860162007853565b925050602083013567ffffffffffffffff81111562007c105762007c0f62006fdd565b5b62007c1e8582860162007b73565b9150509250929050565b5f67ffffffffffffffff82111562007c455762007c4462007271565b5b602082029050602081019050919050565b5f62007c6c62007c668462007c28565b620072d4565b9050808382526020820190506020840283018581111562007c925762007c9162007320565b5b835b8181101562007ce057803567ffffffffffffffff81111562007cbb5762007cba6200725d565b5b80860162007cca8982620074e8565b8552602085019450505060208101905062007c94565b5050509392505050565b5f82601f83011262007d015762007d006200725d565b5b813562007d1384826020860162007c56565b91505092915050565b5f805f806080858703121562007d375762007d3662006fd9565b5b5f62007d46878288016200702c565b945050602062007d598782880162007247565b935050604085013567ffffffffffffffff81111562007d7d5762007d7c62006fdd565b5b62007d8b8782880162007cea565b925050606062007d9e878288016200702c565b91505092959194509250565b5f6020828403121562007dc25762007dc162006fd9565b5b5f62007dd1848285016200702c565b91505092915050565b5f806040838503121562007df35762007df262006fd9565b5b5f62007e02858286016200702c565b925050602062007e158582860162007064565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82825260208201905092915050565b7f4661696c656420746f206173736f636961746520746f6b656e000000000000005f82015250565b5f62007e9260198362007e4c565b915062007e9f8262007e5c565b602082019050919050565b5f6020820190508181035f83015262007ec38162007e84565b9050919050565b7f4661696c656420746f20617070726f766520746f6b656e20666f72207472616e5f8201527f7366657200000000000000000000000000000000000000000000000000000000602082015250565b5f62007f2660248362007e4c565b915062007f338262007eca565b604082019050919050565b5f6020820190508181035f83015262007f578162007f18565b9050919050565b62007f698162007000565b82525050565b5f60208201905062007f845f83018462007f5e565b92915050565b5f8151905062007f9a816200704b565b92915050565b5f6020828403121562007fb85762007fb762006fd9565b5b5f62007fc78482850162007f8a565b91505092915050565b5f60408201905062007fe55f83018562007f5e565b62007ff4602083018462007f5e565b9392505050565b7f416c6c6f77616e6365206d69736d61746368206265666f7265207472616e73665f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200805760228362007e4c565b9150620080648262007ffb565b604082019050919050565b5f6020820190508181035f830152620080888162008049565b9050919050565b6200809a8162007042565b82525050565b5f608082019050620080b55f83018762007f5e565b620080c460208301866200808f565b620080d3604083018562007f5e565b620080e2606083018462007f5e565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620081248262007042565b9150620081318362007042565b92508282019050808211156200814c576200814b620080eb565b5b92915050565b7f42616c616e6365206d69736d61746368206166746572207472616e73666572005f82015250565b5f62008188601f8362007e4c565b9150620081958262008152565b602082019050919050565b5f6020820190508181035f830152620081b9816200817a565b9050919050565b7f46756e6769626c6520746f6b656e20616c6c6f77616e6365206d69736d6174635f8201527f68206166746572207472616e7366657200000000000000000000000000000000602082015250565b5f6200821c60308362007e4c565b91506200822982620081c0565b604082019050919050565b5f6020820190508181035f8301526200824d816200820e565b9050919050565b7f4661696c656420746f20617070726f7665204e465420666f72207472616e73665f8201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b5f620082b060228362007e4c565b9150620082bd8262008254565b604082019050919050565b5f6020820190508181035f830152620082e181620082a2565b9050919050565b5f602082019050620082fd5f8301846200808f565b92915050565b5f81519050620083138162007013565b92915050565b5f6020828403121562008331576200833062006fd9565b5b5f620083408482850162008303565b91505092915050565b7f4e465420617070726f76616c206d69736d61746368206265666f7265207472615f8201527f6e73666572000000000000000000000000000000000000000000000000000000602082015250565b5f620083a560258362007e4c565b9150620083b28262008349565b604082019050919050565b5f6020820190508181035f830152620083d68162008397565b9050919050565b7f4e4654206f776e657273686970206d69736d61746368206166746572207472615f8201527f6e73666572000000000000000000000000000000000000000000000000000000602082015250565b5f6200843960258362007e4c565b91506200844682620083dd565b604082019050919050565b5f6020820190508181035f8301526200846a816200842b565b9050919050565b7f4e465420616c6c6f77616e6365206d69736d61746368206166746572207472615f8201527f6e73666572000000000000000000000000000000000000000000000000000000602082015250565b5f620084cd60258362007e4c565b9150620084da8262008471565b604082019050919050565b5f6020820190508181035f830152620084fe81620084bf565b9050919050565b5f6080820190506200851a5f83018762007f5e565b62008529602083018662007f5e565b62008538604083018562007f5e565b6200854760608301846200808f565b95945050505050565b5f81905092915050565b5f620085668262007598565b62008572818562008550565b935062008584818560208601620075b2565b80840191505092915050565b5f6200859d82846200855a565b915081905092915050565b5f8160030b9050919050565b620085bf81620085a8565b8114620085ca575f80fd5b50565b5f81519050620085dd81620085b4565b92915050565b5f60208284031215620085fb57620085fa62006fd9565b5b5f6200860a84828501620085cd565b91505092915050565b7f4661696c656420746f20667265657a6520746f6b656e20666f722074686520615f8201527f63636f756e740000000000000000000000000000000000000000000000000000602082015250565b5f6200866f60268362007e4c565b91506200867c8262008613565b604082019050919050565b5f6020820190508181035f830152620086a08162008661565b9050919050565b7f4661696c656420746f20636865636b20667265657a6520737461747573206f665f8201527f206163636f756e74000000000000000000000000000000000000000000000000602082015250565b5f6200870360288362007e4c565b91506200871082620086a7565b604082019050919050565b5f6020820190508181035f8301526200873481620086f5565b9050919050565b7f4163636f756e74206973206e6f742066726f7a656e00000000000000000000005f82015250565b5f6200877160158362007e4c565b91506200877e826200873b565b602082019050919050565b5f6020820190508181035f830152620087a28162008763565b9050919050565b7f4661696c656420746f20756e667265657a65206163636f756e740000000000005f82015250565b5f620087df601a8362007e4c565b9150620087ec82620087a9565b602082019050919050565b5f6020820190508181035f8301526200881081620087d1565b9050919050565b7f4661696c656420746f20636865636b20756e667265657a6520737461747573205f8201527f6f66206163636f756e7400000000000000000000000000000000000000000000602082015250565b5f62008873602a8362007e4c565b9150620088808262008817565b604082019050919050565b5f6020820190508181035f830152620088a48162008865565b9050919050565b7f4163636f756e74206973207374696c6c2066726f7a656e0000000000000000005f82015250565b5f620088e160178362007e4c565b9150620088ee82620088ab565b602082019050919050565b5f6020820190508181035f8301526200891281620088d3565b9050919050565b7f4661696c656420746f207472616e73666572204e4654000000000000000000005f82015250565b5f6200894f60168362007e4c565b91506200895c8262008919565b602082019050919050565b5f6020820190508181035f830152620089808162008941565b9050919050565b5f81519050620089978162007713565b92915050565b5f60208284031215620089b557620089b462006fd9565b5b5f620089c48482850162008987565b91505092915050565b7f4661696c656420746f2067657420617070726f7665616c20666f72204e4654005f82015250565b5f62008a03601f8362007e4c565b915062008a1082620089cd565b602082019050919050565b5f6020820190508181035f83015262008a3481620089f5565b9050919050565b7f4661696c656420746f207472616e736665722066756e6769626c6520746f6b655f8201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b5f62008a9760218362007e4c565b915062008aa48262008a3b565b604082019050919050565b5f6020820190508181035f83015262008ac88162008a89565b9050919050565b7f4661696c656420746f20617070726f766520746f6b656e0000000000000000005f82015250565b5f62008b0560178362007e4c565b915062008b128262008acf565b602082019050919050565b5f6020820190508181035f83015262008b368162008af7565b9050919050565b7f416c6c6f77616e6365206d69736d6174636800000000000000000000000000005f82015250565b5f62008b7360128362007e4c565b915062008b808262008b3d565b602082019050919050565b5f6020820190508181035f83015262008ba48162008b65565b9050919050565b7f4661696c656420746f20617070726f7665204e465400000000000000000000005f82015250565b5f62008be160158362007e4c565b915062008bee8262008bab565b602082019050919050565b5f6020820190508181035f83015262008c128162008bd3565b9050919050565b7f4e465420617070726f76616c206d69736d6174636800000000000000000000005f82015250565b5f62008c4f60158362007e4c565b915062008c5c8262008c19565b602082019050919050565b5f6020820190508181035f83015262008c808162008c41565b9050919050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f2062655f8201527f666f7265206275726e0000000000000000000000000000000000000000000000602082015250565b5f62008ce360298362007e4c565b915062008cf08262008c87565b604082019050919050565b5f6020820190508181035f83015262008d148162008cd5565b9050919050565b7f4661696c656420746f206275726e20746f6b656e0000000000000000000000005f82015250565b5f62008d5160148362007e4c565b915062008d5e8262008d1b565b602082019050919050565b5f6020820190508181035f83015262008d828162008d43565b9050919050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f2061665f8201527f746572206275726e000000000000000000000000000000000000000000000000602082015250565b5f62008de560288362007e4c565b915062008df28262008d89565b604082019050919050565b5f6020820190508181035f83015262008e168162008dd7565b9050919050565b5f62008e29826200757e565b915062008e36836200757e565b925082820390508181125f8412168282135f85121516171562008e5e5762008e5d620080eb565b5b92915050565b7f546f74616c20737570706c79206d69736d61746368206166746572206275726e5f8201527f202846756e6769626c6529000000000000000000000000000000000000000000602082015250565b5f62008ec0602b8362007e4c565b915062008ecd8262008e64565b604082019050919050565b5f6020820190508181035f83015262008ef18162008eb2565b9050919050565b7f546f74616c20737570706c79206d69736d61746368206166746572206275726e5f8201527f20284e4654290000000000000000000000000000000000000000000000000000602082015250565b5f62008f5460268362007e4c565b915062008f618262008ef8565b604082019050919050565b5f6020820190508181035f83015262008f858162008f46565b9050919050565b5f62008f988262007042565b915062008fa58362007042565b925082820390508181111562008fc05762008fbf620080eb565b5b92915050565b7f42616c616e6365206d69736d61746368206166746572206275726e202846756e5f8201527f6769626c65290000000000000000000000000000000000000000000000000000602082015250565b5f6200902260268362007e4c565b91506200902f8262008fc6565b604082019050919050565b5f6020820190508181035f830152620090538162009014565b9050919050565b7f42616c616e6365206d69736d61746368206166746572206275726e20284e46545f8201527f2900000000000000000000000000000000000000000000000000000000000000602082015250565b5f620090b660218362007e4c565b9150620090c3826200905a565b604082019050919050565b5f6020820190508181035f830152620090e781620090a8565b9050919050565b5f604082019050620091035f83018562007f5e565b8181036020830152620091178184620075dc565b90509392505050565b6200912b8162007708565b82525050565b5f604082019050620091465f83018562009120565b81810360208301526200915a8184620075dc565b90509392505050565b5f6200917962009173846200745b565b620072d4565b90508281526020810184848401111562009198576200919762007457565b5b620091a5848285620075b2565b509392505050565b5f82601f830112620091c457620091c36200725d565b5b8151620091d684826020860162009163565b91505092915050565b5f8060408385031215620091f857620091f762006fd9565b5b5f6200920785828601620085cd565b925050602083015167ffffffffffffffff8111156200922b576200922a62006fdd565b5b6200923985828601620091ad565b9150509250929050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f2062655f8201527f666f726520776970650000000000000000000000000000000000000000000000602082015250565b5f6200929f60298362007e4c565b9150620092ac8262009243565b604082019050919050565b5f6020820190508181035f830152620092d08162009291565b9050919050565b7f4661696c656420746f207769706520746f6b656e0000000000000000000000005f82015250565b5f6200930d60148362007e4c565b91506200931a82620092d7565b602082019050919050565b5f6020820190508181035f8301526200933e81620092ff565b9050919050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f2061665f8201527f7465722077697065000000000000000000000000000000000000000000000000602082015250565b5f620093a160288362007e4c565b9150620093ae8262009345565b604082019050919050565b5f6020820190508181035f830152620093d28162009393565b9050919050565b7f546f74616c20737570706c79206d69736d6174636820616674657220776970655f8201527f202846756e6769626c6529000000000000000000000000000000000000000000602082015250565b5f62009435602b8362007e4c565b91506200944282620093d9565b604082019050919050565b5f6020820190508181035f830152620094668162009427565b9050919050565b7f42616c616e6365206d69736d617463682061667465722077697065202846756e5f8201527f6769626c65290000000000000000000000000000000000000000000000000000602082015250565b5f620094c960268362007e4c565b9150620094d6826200946d565b604082019050919050565b5f6020820190508181035f830152620094fa81620094bb565b9050919050565b7f42616c616e6365206d69736d61746368206166746572207769706520284e46545f8201527f2900000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200955d60218362007e4c565b91506200956a8262009501565b604082019050919050565b5f6020820190508181035f8301526200958e816200954f565b9050919050565b7f4661696c656420746f206173736f636961746520746f6b656e730000000000005f82015250565b5f620095cb601a8362007e4c565b9150620095d88262009595565b602082019050919050565b5f6020820190508181035f830152620095fc81620095bd565b9050919050565b7f4661696c656420746f20646973736f636961746520746f6b656e7300000000005f82015250565b5f62009639601b8362007e4c565b9150620096468262009603565b602082019050919050565b5f6020820190508181035f8301526200966a816200962b565b9050919050565b5f606082019050620096865f83018662007f5e565b62009695602083018562007f5e565b620096a460408301846200808f565b949350505050565b7f4945524332303a206661696c656420746f207472616e736665720000000000005f82015250565b5f620096e2601a8362007e4c565b9150620096ef82620096ac565b602082019050919050565b5f6020820190508181035f8301526200971381620096d4565b9050919050565b7f494552433732313a206661696c656420746f207472616e7366657200000000005f82015250565b5f62009750601b8362007e4c565b91506200975d826200971a565b602082019050919050565b5f6020820190508181035f830152620097818162009742565b9050919050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f0000005f82015250565b5f620097be601d8362007e4c565b9150620097cb8262009788565b602082019050919050565b5f6020820190508181035f830152620097ef81620097b0565b9050919050565b7f4661696c656420746f206d696e7420746f6b656e0000000000000000000000005f82015250565b5f6200982c60148362007e4c565b91506200983982620097f6565b602082019050919050565b5f6020820190508181035f8301526200985d816200981e565b9050919050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f2061665f8201527f746572206d696e74000000000000000000000000000000000000000000000000602082015250565b5f620098c060288362007e4c565b9150620098cd8262009864565b604082019050919050565b5f6020820190508181035f830152620098f181620098b2565b9050919050565b5f62009904826200757e565b915062009911836200757e565b92508282019050828112155f8312168382125f8412151617156200993a5762009939620080eb565b5b92915050565b7f546f74616c20737570706c79206d69736d61746368206166746572206d696e745f8201527f202846756e6769626c6529000000000000000000000000000000000000000000602082015250565b5f6200999c602b8362007e4c565b9150620099a98262009940565b604082019050919050565b5f6020820190508181035f830152620099cd816200998e565b9050919050565b7f53657269616c206e756d62657273206d69736d61746368206166746572206d695f8201527f6e7420284e465429000000000000000000000000000000000000000000000000602082015250565b5f62009a3060288362007e4c565b915062009a3d82620099d4565b604082019050919050565b5f6020820190508181035f83015262009a618162009a22565b9050919050565b7f546f74616c20737570706c79206d69736d61746368206166746572206d696e745f8201527f20284e4654290000000000000000000000000000000000000000000000000000602082015250565b5f62009ac460268362007e4c565b915062009ad18262009a68565b604082019050919050565b5f6020820190508181035f83015262009af58162009ab6565b9050919050565b7f42616c616e6365206d69736d61746368206166746572206d696e74202846756e5f8201527f6769626c65290000000000000000000000000000000000000000000000000000602082015250565b5f62009b5860268362007e4c565b915062009b658262009afc565b604082019050919050565b5f6020820190508181035f83015262009b898162009b4a565b9050919050565b7f42616c616e6365206d69736d61746368206166746572206d696e7420284e46545f8201527f2900000000000000000000000000000000000000000000000000000000000000602082015250565b5f62009bec60218362007e4c565b915062009bf98262009b90565b604082019050919050565b5f6020820190508181035f83015262009c1d8162009bde565b9050919050565b7f4661696c656420746f20706175736520746f6b656e00000000000000000000005f82015250565b5f62009c5a60158362007e4c565b915062009c678262009c24565b602082019050919050565b5f6020820190508181035f83015262009c8b8162009c4c565b9050919050565b7f4661696c656420746f2067657420746f6b656e20696e666f20616674657220705f8201527f6175736500000000000000000000000000000000000000000000000000000000602082015250565b5f62009cee60248362007e4c565b915062009cfb8262009c92565b604082019050919050565b5f6020820190508181035f83015262009d1f8162009ce0565b9050919050565b7f546f6b656e206973206e6f7420706175736564000000000000000000000000005f82015250565b5f62009d5c60138362007e4c565b915062009d698262009d26565b602082019050919050565b5f6020820190508181035f83015262009d8d8162009d4e565b9050919050565b7f4661696c656420746f20756e706175736520746f6b656e0000000000000000005f82015250565b5f62009dca60178362007e4c565b915062009dd78262009d94565b602082019050919050565b5f6020820190508181035f83015262009dfb8162009dbc565b9050919050565b7f4661696c656420746f20726574726965766520746f6b656e20696e666f2061665f8201527f74657220756e7061757365000000000000000000000000000000000000000000602082015250565b5f62009e5e602b8362007e4c565b915062009e6b8262009e02565b604082019050919050565b5f6020820190508181035f83015262009e8f8162009e50565b9050919050565b7f546f6b656e206973207374696c6c2070617573656400000000000000000000005f82015250565b5f62009ecc60158362007e4c565b915062009ed98262009e96565b602082019050919050565b5f6020820190508181035f83015262009efd8162009ebe565b9050919050565b7f4772616e74206b7963206f7065726174696f6e206661696c65640000000000005f82015250565b5f62009f3a601a8362007e4c565b915062009f478262009f04565b602082019050919050565b5f6020820190508181035f83015262009f6b8162009f2c565b9050919050565b7f4973206b7963206f7065726174696f6e206661696c65640000000000000000005f82015250565b5f62009fa860178362007e4c565b915062009fb58262009f72565b602082019050919050565b5f6020820190508181035f83015262009fd98162009f9a565b9050919050565b7f4b796320737461747573206d69736d61746368000000000000000000000000005f82015250565b5f6200a01660138362007e4c565b91506200a0238262009fe0565b602082019050919050565b5f6020820190508181035f8301526200a047816200a008565b9050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6200a0828162007000565b82525050565b5f6200a09583836200a077565b60208301905092915050565b5f602082019050919050565b5f6200a0b9826200a04e565b6200a0c581856200a058565b93506200a0d2836200a068565b805f5b838110156200a1085781516200a0ec88826200a088565b97506200a0f9836200a0a1565b9250506001810190506200a0d5565b5085935050505092915050565b5f6040820190506200a12a5f83018562007f5e565b81810360208301526200a13e81846200a0ad565b90509392505050565b5f80604083850312156200a160576200a15f62006fd9565b5b5f6200a16f85828601620085cd565b92505060206200a1828582860162008987565b9150509250929050565b5f6080820190506200a1a15f83018762007f5e565b6200a1b0602083018662007f5e565b6200a1bf604083018562007f5e565b6200a1ce606083018462007164565b95945050505050565b5f6060820190506200a1ec5f83018662007f5e565b6200a1fb602083018562007f5e565b6200a20a604083018462009120565b949350505050565b5f6060820190506200a2275f83018662007f5e565b6200a236602083018562007f5e565b6200a245604083018462007f5e565b949350505050565b5f67ffffffffffffffff8211156200a26a576200a26962007271565b5b6200a2758262007261565b9050602081019050919050565b5f6200a2986200a292846200a24d565b620072d4565b9050828152602081018484840111156200a2b7576200a2b662007457565b5b6200a2c4848285620075b2565b509392505050565b5f82601f8301126200a2e3576200a2e26200725d565b5b81516200a2f58482602086016200a282565b91505092915050565b5f815190506200a30e816200722e565b92915050565b5f67ffffffffffffffff8211156200a331576200a33062007271565b5b602082029050602081019050919050565b5f60a082840312156200a35a576200a359620076d2565b5b6200a36660a0620072d4565b90505f6200a3778482850162008987565b5f8301525060206200a38c8482850162008303565b602083015250604082015167ffffffffffffffff8111156200a3b3576200a3b2620076d6565b5b6200a3c184828501620091ad565b604083015250606082015167ffffffffffffffff8111156200a3e8576200a3e7620076d6565b5b6200a3f684828501620091ad565b60608301525060806200a40c8482850162008303565b60808301525092915050565b5f604082840312156200a430576200a42f620076d2565b5b6200a43c6040620072d4565b90505f6200a44d8482850162007f8a565b5f83015250602082015167ffffffffffffffff8111156200a473576200a472620076d6565b5b6200a481848285016200a342565b60208301525092915050565b5f6200a4a36200a49d846200a314565b620072d4565b905080838252602082019050602084028301858111156200a4c9576200a4c862007320565b5b835b818110156200a51757805167ffffffffffffffff8111156200a4f2576200a4f16200725d565b5b8086016200a50189826200a418565b855260208501945050506020810190506200a4cb565b5050509392505050565b5f82601f8301126200a538576200a5376200725d565b5b81516200a54a8482602086016200a48d565b91505092915050565b5f606082840312156200a56b576200a56a620076d2565b5b6200a5776060620072d4565b90505f6200a588848285016200a2fe565b5f8301525060206200a59d8482850162008303565b60208301525060406200a5b3848285016200a2fe565b60408301525092915050565b5f61016082840312156200a5d8576200a5d7620076d2565b5b6200a5e5610120620072d4565b90505f82015167ffffffffffffffff8111156200a607576200a606620076d6565b5b6200a615848285016200a2cc565b5f83015250602082015167ffffffffffffffff8111156200a63b576200a63a620076d6565b5b6200a649848285016200a2cc565b60208301525060406200a65f8482850162008303565b604083015250606082015167ffffffffffffffff8111156200a686576200a685620076d6565b5b6200a694848285016200a2cc565b60608301525060806200a6aa8482850162008987565b60808301525060a06200a6c0848285016200a2fe565b60a08301525060c06200a6d68482850162008987565b60c08301525060e082015167ffffffffffffffff8111156200a6fd576200a6fc620076d6565b5b6200a70b848285016200a521565b60e0830152506101006200a722848285016200a553565b6101008301525092915050565b5f67ffffffffffffffff8211156200a74c576200a74b62007271565b5b602082029050602081019050919050565b5f60a082840312156200a775576200a774620076d2565b5b6200a78160a0620072d4565b90505f6200a792848285016200a2fe565b5f8301525060206200a7a78482850162008303565b60208301525060406200a7bd8482850162008987565b60408301525060606200a7d38482850162008987565b60608301525060806200a7e98482850162008303565b60808301525092915050565b5f6200a80b6200a805846200a72f565b620072d4565b90508083825260208201905060a084028301858111156200a831576200a83062007320565b5b835b818110156200a85e57806200a84988826200a75d565b84526020840193505060a0810190506200a833565b5050509392505050565b5f82601f8301126200a87f576200a87e6200725d565b5b81516200a8918482602086016200a7f5565b91505092915050565b5f67ffffffffffffffff8211156200a8b7576200a8b662007271565b5b602082029050602081019050919050565b5f60c082840312156200a8e0576200a8df620076d2565b5b6200a8ec60c0620072d4565b90505f6200a8fd848285016200a2fe565b5f8301525060206200a912848285016200a2fe565b60208301525060406200a928848285016200a2fe565b60408301525060606200a93e848285016200a2fe565b60608301525060806200a9548482850162008987565b60808301525060a06200a96a8482850162008303565b60a08301525092915050565b5f6200a98c6200a986846200a89a565b620072d4565b90508083825260208201905060c084028301858111156200a9b2576200a9b162007320565b5b835b818110156200a9df57806200a9ca88826200a8c8565b84526020840193505060c0810190506200a9b4565b5050509392505050565b5f82601f8301126200aa00576200a9ff6200725d565b5b81516200aa128482602086016200a976565b91505092915050565b5f67ffffffffffffffff8211156200aa38576200aa3762007271565b5b602082029050602081019050919050565b5f60c082840312156200aa61576200aa60620076d2565b5b6200aa6d60c0620072d4565b90505f6200aa7e848285016200a2fe565b5f8301525060206200aa93848285016200a2fe565b60208301525060406200aaa9848285016200a2fe565b60408301525060606200aabf8482850162008303565b60608301525060806200aad58482850162008987565b60808301525060a06200aaeb8482850162008303565b60a08301525092915050565b5f6200ab0d6200ab07846200aa1b565b620072d4565b90508083825260208201905060c084028301858111156200ab33576200ab3262007320565b5b835b818110156200ab6057806200ab4b88826200aa49565b84526020840193505060c0810190506200ab35565b5050509392505050565b5f82601f8301126200ab81576200ab806200725d565b5b81516200ab938482602086016200aaf7565b91505092915050565b5f61012082840312156200abb5576200abb4620076d2565b5b6200abc2610120620072d4565b90505f82015167ffffffffffffffff8111156200abe4576200abe3620076d6565b5b6200abf2848285016200a5bf565b5f8301525060206200ac07848285016200a2fe565b60208301525060406200ac1d8482850162008987565b60408301525060606200ac338482850162008987565b60608301525060806200ac498482850162008987565b60808301525060a082015167ffffffffffffffff8111156200ac70576200ac6f620076d6565b5b6200ac7e848285016200a868565b60a08301525060c082015167ffffffffffffffff8111156200aca5576200aca4620076d6565b5b6200acb3848285016200a9e9565b60c08301525060e082015167ffffffffffffffff8111156200acda576200acd9620076d6565b5b6200ace8848285016200ab6a565b60e08301525061010082015167ffffffffffffffff8111156200ad10576200ad0f620076d6565b5b6200ad1e848285016200a2cc565b6101008301525092915050565b5f80604083850312156200ad44576200ad4362006fd9565b5b5f6200ad5385828601620085cd565b925050602083015167ffffffffffffffff8111156200ad77576200ad7662006fdd565b5b6200ad85858286016200ab9c565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6200adc38162007158565b82525050565b5f6200add683836200adb8565b60208301905092915050565b5f602082019050919050565b5f6200adfa826200ad8f565b6200ae0681856200ad99565b93506200ae13836200ada9565b805f5b838110156200ae495781516200ae2d88826200adc9565b97506200ae3a836200ade2565b9250506001810190506200ae16565b5085935050505092915050565b5f6060820190506200ae6b5f83018662007f5e565b6200ae7a602083018562007164565b81810360408301526200ae8e81846200adee565b9050949350505050565b5f80604083850312156200aeb1576200aeb062006fd9565b5b5f6200aec085828601620085cd565b92505060206200aed3858286016200a2fe565b9150509250929050565b5f6060820190506200aef25f83018662007f5e565b6200af01602083018562007f5e565b6200af10604083018462007164565b949350505050565b5f6060820190506200af2d5f83018662007f5e565b6200af3c602083018562007f5e565b81810360408301526200af5081846200adee565b9050949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6200af8e8162007708565b82525050565b606082015f8201516200afaa5f8501826200a077565b5060208201516200afbf60208501826200adb8565b5060408201516200afd460408501826200af83565b50505050565b5f6200afe783836200af94565b60608301905092915050565b5f602082019050919050565b5f6200b00b826200af5a565b6200b01781856200af64565b93506200b024836200af74565b805f5b838110156200b05a5781516200b03e88826200afda565b97506200b04b836200aff3565b9250506001810190506200b027565b5085935050505092915050565b5f602083015f8301518482035f8601526200b08382826200afff565b9150508091505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b608082015f8201516200b0f85f8501826200a077565b5060208201516200b10d60208501826200a077565b5060408201516200b12260408501826200adb8565b5060608201516200b13760608501826200af83565b50505050565b5f6200b14a83836200b0e2565b60808301905092915050565b5f602082019050919050565b5f6200b16e826200b0b9565b6200b17a81856200b0c3565b93506200b187836200b0d3565b805f5b838110156200b1bd5781516200b1a188826200b13d565b97506200b1ae836200b156565b9250506001810190506200b18a565b5085935050505092915050565b5f606083015f8301516200b1e15f8601826200a077565b50602083015184820360208601526200b1fb82826200afff565b915050604083015184820360408601526200b21782826200b162565b9150508091505092915050565b5f6200b23183836200b1ca565b905092915050565b5f602082019050919050565b5f6200b251826200b090565b6200b25d81856200b09a565b9350836020820285016200b271856200b0aa565b805f5b858110156200b2b257848403895281516200b29085826200b224565b94506200b29d836200b239565b925060208a019950506001810190506200b274565b50829750879550505050505092915050565b5f6040820190508181035f8301526200b2de81856200b067565b905081810360208301526200b2f481846200b245565b90509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6200b3428262007598565b6200b34e81856200b326565b93506200b360818560208601620075b2565b6200b36b8162007261565b840191505092915050565b5f6200b38383836200b336565b905092915050565b5f602082019050919050565b5f6200b3a3826200b2fd565b6200b3af81856200b307565b9350836020820285016200b3c3856200b317565b805f5b858110156200b40457848403895281516200b3e285826200b376565b94506200b3ef836200b38b565b925060208a019950506001810190506200b3c6565b50829750879550505050505092915050565b5f6060820190506200b42b5f83018662007f5e565b6200b43a602083018562007164565b81810360408301526200b44e81846200b397565b9050949350505050565b5f6200b46e6200b46884620072f2565b620072d4565b905080838252602082019050602084028301858111156200b494576200b49362007320565b5b835b818110156200b4c157806200b4ac88826200a2fe565b8452602084019350506020810190506200b496565b5050509392505050565b5f82601f8301126200b4e2576200b4e16200725d565b5b81516200b4f48482602086016200b458565b91505092915050565b5f805f606084860312156200b517576200b51662006fd9565b5b5f6200b52686828701620085cd565b93505060206200b539868287016200a2fe565b925050604084015167ffffffffffffffff8111156200b55d576200b55c62006fdd565b5b6200b56b868287016200b4cb565b915050925092509256fe608060405234801561000f575f80fd5b506103428061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80634444fbf7146100385780634adcaa7114610054575b5f80fd5b610052600480360381019061004d91906101f5565b610070565b005b61006e600480360381019061006991906101f5565b6100f4565b005b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8383866040518463ffffffff1660e01b81526004016100ad93929190610277565b6020604051808303815f875af11580156100c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ed91906102e1565b5050505050565b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd8383866040518463ffffffff1660e01b815260040161013193929190610277565b5f604051808303815f87803b158015610148575f80fd5b505af115801561015a573d5f803e3d5ffd5b5050505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61019182610168565b9050919050565b6101a181610187565b81146101ab575f80fd5b50565b5f813590506101bc81610198565b92915050565b5f819050919050565b6101d4816101c2565b81146101de575f80fd5b50565b5f813590506101ef816101cb565b92915050565b5f805f806080858703121561020d5761020c610164565b5b5f61021a878288016101ae565b945050602061022b878288016101e1565b935050604061023c878288016101ae565b925050606061024d878288016101ae565b91505092959194509250565b61026281610187565b82525050565b610271816101c2565b82525050565b5f60608201905061028a5f830186610259565b6102976020830185610259565b6102a46040830184610268565b949350505050565b5f8115159050919050565b6102c0816102ac565b81146102ca575f80fd5b50565b5f815190506102db816102b7565b92915050565b5f602082840312156102f6576102f5610164565b5b5f610303848285016102cd565b9150509291505056fea26469706673582212202910d31ca4592752058b5f70a0f4721f31925df18e75aafaf3439b311185e08164736f6c63430008160033a26469706673582212209d872ebe2e436e61c1db720b81093e14bb7aa3e66eadced4045c3996ddc8644d64736f6c63430008160033 +608060405234801561000f575f80fd5b506004361061013d575f3560e01c806375f2e087116100b4578063e11bf77411610079578063e11bf77414610294578063ebe1e5fb146102a7578063ec679c07146102ba578063efe60aeb146102cd578063f8c29425146102e0578063fccbaa1c146102f3575f80fd5b806375f2e087146102355780639b23d3d914610248578063a626444e1461025b578063af4494fb1461026e578063cce8abc314610281575f80fd5b8063348db43411610105578063348db434146101b55780634b27d1ac146101c85780634dc21f9f146101db578063618dc65e146101ee5780636a31efd81461020f5780636f9dc0e014610222575f80fd5b80630865dc5a146101415780630a83b9a61461015657806315dacbea1461016957806318f0c5d21461018f5780632535f20e146101a2575b5f80fd5b61015461014f3660046149ca565b610306565b005b6040513081526020015b60405180910390f35b61017c610177366004614a0d565b61094c565b60405160079190910b8152602001610160565b61015461019d366004614a5b565b610a3b565b6101546101b0366004614a92565b610c91565b6101546101c33660046149ca565b610f58565b6101546101d63660046149ca565b611187565b6101546101e9366004614c39565b6113be565b6102016101fc366004614d7c565b61188f565b604051610160929190614e15565b61015461021d366004614c39565b6119b6565b610154610230366004614e35565b611e8f565b6101546102433660046149ca565b6121a5565b61017c610256366004614a0d565b6123f7565b610154610269366004614f44565b61243b565b61015461027c366004614e35565b612786565b61015461028f366004614f44565b6129ff565b6101546102a2366004614a92565b612d1b565b6101546102b536600461517f565b612fcc565b6101546102c8366004614f44565b613530565b6101546102db366004615255565b6139c6565b6101546102ee366004614a5b565b613bd1565b610154610301366004615277565b613dd5565b5f604051610313906148e4565b604051809103905ff08015801561032c573d5f803e3d5ffd5b506040805160018082528183019092529192505f91906020808301908036833701905050905085815f81518110610365576103656152a1565b60200260200101906001600160a01b031690816001600160a01b0316815250505f6103908383613f6b565b90505f8511801561039f575083155b156106f357601681146103f95760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f206173736f636961746520746f6b656e0000000000000060448201526064015b60405180910390fd5b610404878487614042565b9050601681146104265760405162461bcd60e51b81526004016103f0906152b5565b6040516370a0823160e01b81526001600160a01b0387811660048301525f91908916906370a0823190602401602060405180830381865afa15801561046d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061049191906152f9565b905085886001600160a01b031663dd62ed3e30876040518363ffffffff1660e01b81526004016104c2929190615310565b602060405180830381865afa1580156104dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061050191906152f9565b1461051e5760405162461bcd60e51b81526004016103f09061532a565b604051634444fbf760e01b81526001600160a01b038981166004830152602482018890523060448301528881166064830152851690634444fbf7906084015f604051808303815f87803b158015610573575f80fd5b505af1158015610585573d5f803e3d5ffd5b5050505085816105959190615380565b6040516370a0823160e01b81526001600160a01b0389811660048301528a16906370a0823190602401602060405180830381865afa1580156105d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fd91906152f9565b1461061a5760405162461bcd60e51b81526004016103f090615399565b604051636eb1769f60e11b81526001600160a01b0389169063dd62ed3e906106489030908890600401615310565b602060405180830381865afa158015610663573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068791906152f9565b156106ed5760405162461bcd60e51b815260206004820152603060248201527f46756e6769626c6520746f6b656e20616c6c6f77616e6365206d69736d61746360448201526f341030b33a32b9103a3930b739b332b960811b60648201526084016103f0565b50610943565b5f6106ff88858761411c565b9050601681146107215760405162461bcd60e51b81526004016103f0906153d0565b60405163020604bf60e21b8152600481018690526001600160a01b0380861691908a169063081812fc90602401602060405180830381865afa158015610769573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078d919061541d565b6001600160a01b0316146107b35760405162461bcd60e51b81526004016103f090615438565b604051634adcaa7160e01b81526001600160a01b038981166004830152602482018790523060448301528881166064830152851690634adcaa71906084015f604051808303815f87803b158015610808575f80fd5b505af115801561081a573d5f803e3d5ffd5b50506040516331a9108f60e11b8152600481018890526001600160a01b038a811693508b169150636352211e90602401602060405180830381865afa158015610865573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610889919061541d565b6001600160a01b0316146108af5760405162461bcd60e51b81526004016103f09061547d565b60405163020604bf60e21b8152600481018690526001600160a01b0380861691908a169063081812fc90602401602060405180830381865afa1580156108f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091b919061541d565b6001600160a01b0316036109415760405162461bcd60e51b81526004016103f0906154c2565b505b50505050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290525f908190819061016790630aed65f560e11b9060a4015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516109ca9190615507565b5f604051808303815f865af19150503d805f8114610a03576040519150601f19603f3d011682016040523d82523d5f602084013e610a08565b606091505b509150915081610a19576015610a2d565b80806020019051810190610a2d9190615533565b60030b979650505050505050565b5f610a468383614148565b60070b905060168114610aaa5760405162461bcd60e51b815260206004820152602660248201527f4661696c656420746f20667265657a6520746f6b656e20666f7220746865206160448201526518d8dbdd5b9d60d21b60648201526084016103f0565b5f80610ab68585614172565b915060070b9150601660030b8214610b215760405162461bcd60e51b815260206004820152602860248201527f4661696c656420746f20636865636b20667265657a6520737461747573206f66604482015267081858d8dbdd5b9d60c21b60648201526084016103f0565b80610b665760405162461bcd60e51b815260206004820152601560248201527420b1b1b7bab73a1034b9903737ba10333937bd32b760591b60448201526064016103f0565b610b70858561423f565b60070b925060168314610bc55760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f20756e667265657a65206163636f756e7400000000000060448201526064016103f0565b610bcf8585614172565b60079190910b9250905060168214610c3c5760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f20636865636b20756e667265657a6520737461747573206044820152691bd9881858d8dbdd5b9d60b21b60648201526084016103f0565b8015610c8a5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973207374696c6c2066726f7a656e00000000000000000060448201526064016103f0565b5050505050565b5f610d0a84856001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b602060405180830381865afa158015610cdf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d03919061541d565b3085614269565b905060168114610d2c5760405162461bcd60e51b81526004016103f09061554c565b610d38848460016142b0565b905060168114610d5a5760405162461bcd60e51b81526004016103f0906153d0565b60405163e985e9c560e01b81526001600160a01b0385169063e985e9c590610d889030908790600401615310565b602060405180830381865afa158015610da3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc79190615587565b610de35760405162461bcd60e51b81526004016103f090615438565b610def84308585614269565b905060168114610e115760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b8152600481018390526001600160a01b038085169190861690636352211e90602401602060405180830381865afa158015610e59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e7d919061541d565b6001600160a01b031614610ea35760405162461bcd60e51b81526004016103f09061547d565b610eae84845f6142b0565b905060168114610ed05760405162461bcd60e51b81526004016103f0906153d0565b5f80610edd8630876142ed565b909250905060168214610f325760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f2067657420617070726f7665616c20666f72204e46540060448201526064016103f0565b8015610f505760405162461bcd60e51b81526004016103f090615438565b505050505050565b5f82118015610f65575080155b1561109c576040516370a0823160e01b81526001600160a01b0384811660048301525f91908616906370a0823190602401602060405180830381865afa158015610fb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd591906152f9565b90505f610fe4863087876143cd565b9050601681146110065760405162461bcd60e51b81526004016103f0906155a2565b6110108483615380565b6040516370a0823160e01b81526001600160a01b0387811660048301528816906370a0823190602401602060405180830381865afa158015611054573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107891906152f9565b146110955760405162461bcd60e51b81526004016103f090615399565b5050611181565b5f6110cf85866001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b9050601681146110f15760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b81526004810183905230906001600160a01b03871690636352211e906024015b602060405180830381865afa158015611137573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115b919061541d565b6001600160a01b031614610c8a5760405162461bcd60e51b81526004016103f09061547d565b50505050565b5f82118015611194575080155b156112ae575f6111a5858585614042565b9050601681146111f75760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f20617070726f766520746f6b656e00000000000000000060448201526064016103f0565b604051636eb1769f60e11b815283906001600160a01b0387169063dd62ed3e906112279030908990600401615310565b602060405180830381865afa158015611242573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126691906152f9565b146112a85760405162461bcd60e51b8152602060048201526012602482015271082d8d8deeec2dcc6ca40dad2e6dac2e8c6d60731b60448201526064016103f0565b50611181565b5f6112ba85858461411c565b9050601681146113045760405162461bcd60e51b815260206004820152601560248201527411985a5b1959081d1bc8185c1c1c9bdd9948139195605a1b60448201526064016103f0565b60405163020604bf60e21b8152600481018390526001600160a01b03808616919087169063081812fc90602401602060405180830381865afa15801561134c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611370919061541d565b6001600160a01b031614610c8a5760405162461bcd60e51b815260206004820152601560248201527409c8ca840c2e0e0e4deecc2d840dad2e6dac2e8c6d605b1b60448201526064016103f0565b5f808460070b1380156113d057508251155b15611444576040516370a0823160e01b81526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015611419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143d91906152f9565b90506114af565b6040516370a0823160e01b81526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015611488573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ac91906152f9565b90505b5f806114ba87614414565b9092509050601682146115215760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f20726574726965766520746f6b656e20696e666f2062656044820152683337b93290313ab93760b91b60648201526084016103f0565b602081015160070b5f6115358989896144de565b90945060070b9050601684146115845760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a3790313ab937103a37b5b2b760611b60448201526064016103f0565b61158d89614414565b9094509250601684146115e05760405162461bcd60e51b815260206004820152602860248201525f805160206163dc8339815191526044820152673a32b910313ab93760c11b60648201526084016103f0565b5f836020015160070b90505f8960070b1380156115fc57508751155b15611683578061161060078b900b856155e3565b14158061161d5750808214155b1561167e5760405162461bcd60e51b815260206004820152602b60248201527f546f74616c20737570706c79206d69736d61746368206166746572206275726e60448201526a202846756e6769626c652960a81b60648201526084016103f0565b6116bb565b8088518461169191906155e3565b14158061169e5750808214155b156116bb5760405162461bcd60e51b81526004016103f090615609565b5f8960070b1380156116cc57508751155b156117af576040516370a0823160e01b81526001600160a01b0388811660048301525f91908c16906370a0823190602401602060405180830381865afa158015611718573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061173c91906152f9565b90508061174d60078c900b8961564f565b146117a95760405162461bcd60e51b815260206004820152602660248201527f42616c616e6365206d69736d61746368206166746572206275726e202846756e6044820152656769626c652960d01b60648201526084016103f0565b50611883565b6040516370a0823160e01b81526001600160a01b0388811660048301525f91908c16906370a0823190602401602060405180830381865afa1580156117f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181a91906152f9565b90508089518861182a919061564f565b146118815760405162461bcd60e51b815260206004820152602160248201527f42616c616e6365206d69736d61746368206166746572206275726e20284e46546044820152602960f81b60648201526084016103f0565b505b50505050505050505050565b5f60605f806101676001600160a01b031663618dc65e60e01b87876040516024016118bb929190615662565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516118f99190615507565b5f604051808303815f865af19150503d805f8114611932576040519150601f19603f3d011682016040523d82523d5f602084013e611937565b606091505b50915091507f4af4780e06fe8cb9df64b0794fa6f01399af979175bb988e35e0e57e594567bc828260405161196d929190615685565b60405180910390a18161199057601560405180602001604052805f8152506119a4565b808060200190518101906119a491906156e1565b60039190910b97909650945050505050565b5f808460070b1380156119c857508251155b15611a3c576040516370a0823160e01b81526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015611a11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3591906152f9565b9050611aa7565b6040516370a0823160e01b81526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015611a80573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aa491906152f9565b90505b5f80611ab287614414565b909250905060168214611b195760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f20726574726965766520746f6b656e20696e666f206265604482015268666f7265207769706560b81b60648201526084016103f0565b5f816020015160070b90505f8760070b138015611b3557508551155b15611b4c57611b458886896145ad565b9250611b5a565b611b578886886145ec565b92505b60168314611ba15760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a37903bb4b832903a37b5b2b760611b60448201526064016103f0565b611baa88614414565b909350915060168314611bfd5760405162461bcd60e51b815260206004820152602860248201525f805160206163dc833981519152604482015267746572207769706560c01b60648201526084016103f0565b5f826020015160070b90505f8860070b138015611c1957508651155b15611c935780611c2d60078a900b846155e3565b14611c8e5760405162461bcd60e51b815260206004820152602b60248201527f546f74616c20737570706c79206d69736d61746368206166746572207769706560448201526a202846756e6769626c652960a81b60648201526084016103f0565b611cbe565b80875183611ca191906155e3565b14611cbe5760405162461bcd60e51b81526004016103f090615609565b5f8860070b138015611ccf57508651155b15611db2576040516370a0823160e01b81526001600160a01b0387811660048301525f91908b16906370a0823190602401602060405180830381865afa158015611d1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3f91906152f9565b905080611d5060078b900b8861564f565b14611dac5760405162461bcd60e51b815260206004820152602660248201527f42616c616e6365206d69736d617463682061667465722077697065202846756e6044820152656769626c652960d01b60648201526084016103f0565b50611e84565b6040516370a0823160e01b81526001600160a01b0387811660048301525f91908b16906370a0823190602401602060405180830381865afa158015611df9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1d91906152f9565b905080885187611e2d919061564f565b146118835760405162461bcd60e51b815260206004820152602160248201527f42616c616e6365206d69736d61746368206166746572207769706520284e46546044820152602960f81b60648201526084016103f0565b505050505050505050565b6040805160018082528183019092525f916020808301908036833701905050905085815f81518110611ec357611ec36152a1565b60200260200101906001600160a01b031690816001600160a01b0316815250505f611eee8583613f6b565b905060168114611f405760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f206173736f636961746520746f6b656e7300000000000060448201526064016103f0565b5f84118015611f4d575082155b1561207c576040516370a0823160e01b81526001600160a01b0386811660048301525f91908916906370a0823190602401602060405180830381865afa158015611f99573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fbd91906152f9565b9050611fcb888888886143cd565b915060168214611fed5760405162461bcd60e51b81526004016103f0906155a2565b611ff78582615380565b6040516370a0823160e01b81526001600160a01b0388811660048301528a16906370a0823190602401602060405180830381865afa15801561203b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f91906152f9565b146106ed5760405162461bcd60e51b81526004016103f090615399565b6040516331a9108f60e11b8152600481018490526120f09088906001600160a01b03821690636352211e90602401602060405180830381865afa1580156120c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e9919061541d565b8786614269565b9050601681146121125760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b8152600481018490526001600160a01b038087169190891690636352211e906024015b602060405180830381865afa15801561215b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217f919061541d565b6001600160a01b0316146109435760405162461bcd60e51b81526004016103f09061547d565b5f821180156121b2575080155b15612315575f6121c3858585614042565b9050601681146121e55760405162461bcd60e51b81526004016103f0906152b5565b6040516370a0823160e01b81526001600160a01b0385811660048301525f91908716906370a0823190602401602060405180830381865afa15801561222c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061225091906152f9565b905083866001600160a01b031663dd62ed3e30886040518363ffffffff1660e01b8152600401612281929190615310565b602060405180830381865afa15801561229c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122c091906152f9565b146122dd5760405162461bcd60e51b81526004016103f09061532a565b6122e9863087876143cd565b91506016821461230b5760405162461bcd60e51b81526004016103f0906155a2565b6110108482615380565b5f61234885866001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b90506016811461236a5760405162461bcd60e51b81526004016103f09061554c565b61237585858461411c565b9050601681146123975760405162461bcd60e51b81526004016103f0906153d0565b6123a385308685614269565b9050601681146123c55760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b8152600481018390526001600160a01b038086169190871690636352211e9060240161111c565b6040516001600160a01b038581166024830152848116604483015283166064820152608481018290525f908190819061016790639b23d3d960e01b9060a40161098c565b5f815f8151811061244e5761244e6152a1565b60200260200101515f015190505f805f80855f81518110612471576124716152a1565b60200260200101516020015151111561250d57845f81518110612496576124966152a1565b6020026020010151602001516001815181106124b4576124b46152a1565b60200260200101515f01519250845f815181106124d3576124d36152a1565b6020026020010151602001516001815181106124f1576124f16152a1565b6020026020010151602001516001600160401b03169150612591565b845f8151811061251f5761251f6152a1565b6020026020010151604001515f8151811061253c5761253c6152a1565b6020026020010151602001519250845f8151811061255c5761255c6152a1565b6020026020010151604001515f81518110612579576125796152a1565b6020026020010151604001516001600160401b031690505b5f8211801561259e575080155b156126d3576040516370a0823160e01b81526001600160a01b0384811660048301525f91908616906370a0823190602401602060405180830381865afa1580156125ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061260e91906152f9565b90505f61261b8888614618565b90506016811461263d5760405162461bcd60e51b81526004016103f0906155a2565b6126478483615380565b6040516370a0823160e01b81526001600160a01b0387811660048301528816906370a0823190602401602060405180830381865afa15801561268b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126af91906152f9565b146126cc5760405162461bcd60e51b81526004016103f090615399565b5050610f50565b5f61270685866001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b9050601681146127285760405162461bcd60e51b81526004016103f09061554c565b6127328787614618565b9050601681146127545760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b8152600481018390526001600160a01b038086169190871690636352211e90602401612140565b6040805160018082528183019092525f916020808301908036833701905050905085815f815181106127ba576127ba6152a1565b60200260200101906001600160a01b031690816001600160a01b0316815250505f6127e58683613f6b565b9050601681146128375760405162461bcd60e51b815260206004820152601a60248201527f4661696c656420746f206173736f636961746520746f6b656e7300000000000060448201526064016103f0565b6128418683614642565b9050601681146128935760405162461bcd60e51b815260206004820152601b60248201527f4661696c656420746f20646973736f636961746520746f6b656e73000000000060448201526064016103f0565b5f841180156128a0575082155b1561295b576040516323b872dd60e01b81526001600160a01b038816906323b872dd906128d590899089908990600401615721565b6020604051808303815f875af192505050801561290f575060408051601f3d908101601f1916820190925261290c91810190615587565b60015b6106ed5760405162461bcd60e51b815260206004820152601a60248201527f4945524332303a206661696c656420746f207472616e7366657200000000000060448201526064016103f0565b6040516323b872dd60e01b81526001600160a01b038816906323b872dd9061298b90899089908890600401615721565b5f604051808303815f87803b1580156129a2575f80fd5b505af19250505080156129b3575060015b6109435760405162461bcd60e51b815260206004820152601b60248201527f494552433732313a206661696c656420746f207472616e73666572000000000060448201526064016103f0565b5f815f81518110612a1257612a126152a1565b60200260200101515f015190505f825f81518110612a3257612a326152a1565b6020026020010151604001515f81518110612a4f57612a4f6152a1565b60200260200101516020015190505f835f81518110612a7057612a706152a1565b6020026020010151604001515f81518110612a8d57612a8d6152a1565b6020026020010151604001516001600160401b031690505f612ad784856001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b905060168114612af95760405162461bcd60e51b81526004016103f09061554c565b612b05848460016142b0565b905060168114612b275760405162461bcd60e51b81526004016103f0906153d0565b60405163e985e9c560e01b81526001600160a01b0385169063e985e9c590612b559030908790600401615310565b602060405180830381865afa158015612b70573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b949190615587565b612bb05760405162461bcd60e51b81526004016103f090615438565b612bba8686614618565b905060168114612bdc5760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b8152600481018390526001600160a01b038085169190861690636352211e90602401602060405180830381865afa158015612c24573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c48919061541d565b6001600160a01b031614612c6e5760405162461bcd60e51b81526004016103f09061547d565b612c7984845f6142b0565b905060168114612c9b5760405162461bcd60e51b81526004016103f0906153d0565b5f80612ca88630876142ed565b909250905060168214612cfd5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f2067657420617070726f7665616c20666f72204e46540060448201526064016103f0565b80156109415760405162461bcd60e51b81526004016103f090615438565b5f612d4e84856001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b905060168114612d705760405162461bcd60e51b81526004016103f09061554c565b612d7c848460016142b0565b905060168114612d9e5760405162461bcd60e51b81526004016103f0906153d0565b60405163e985e9c560e01b81526001600160a01b0385169063e985e9c590612dcc9030908790600401615310565b602060405180830381865afa158015612de7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e0b9190615587565b612e275760405162461bcd60e51b81526004016103f090615438565b6040516323b872dd60e01b81526001600160a01b038516906323b872dd90612e5790309087908790600401615721565b5f604051808303815f87803b158015612e6e575f80fd5b505af1158015612e80573d5f803e3d5ffd5b50506040516331a9108f60e11b8152600481018590526001600160a01b03868116935087169150636352211e90602401602060405180830381865afa158015612ecb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eef919061541d565b6001600160a01b031614612f155760405162461bcd60e51b81526004016103f09061547d565b612f2084845f6142b0565b905060168114612f425760405162461bcd60e51b81526004016103f0906153d0565b60405163e985e9c560e01b81526001600160a01b0385169063e985e9c590612f709030908790600401615310565b602060405180830381865afa158015612f8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612faf9190615587565b156111815760405162461bcd60e51b81526004016103f090615438565b5f808460070b138015612fde57508251155b15613052576040516370a0823160e01b81526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015613027573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061304b91906152f9565b90506130bd565b6040516370a0823160e01b81526001600160a01b0383811660048301528616906370a0823190602401602060405180830381865afa158015613096573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130ba91906152f9565b90505b5f806130c887614414565b90925090506016821461311d5760405162461bcd60e51b815260206004820152601d60248201527f4661696c656420746f20726574726965766520746f6b656e20696e666f00000060448201526064016103f0565b602081015160070b5f60606131338a8a8a61466c565b91965060070b92509050601685146131845760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379036b4b73a103a37b5b2b760611b60448201526064016103f0565b61318d8a614414565b9095509350601685146131e05760405162461bcd60e51b815260206004820152602860248201525f805160206163dc8339815191526044820152671d195c881b5a5b9d60c21b60648201526084016103f0565b5f846020015160070b90505f8a60070b1380156131fc57508851155b15613283578061321060078c900b86615745565b14158061321d5750808314155b1561327e5760405162461bcd60e51b815260206004820152602b60248201527f546f74616c20737570706c79206d69736d61746368206166746572206d696e7460448201526a202846756e6769626c652960a81b60648201526084016103f0565b61335c565b88518251146132e55760405162461bcd60e51b815260206004820152602860248201527f53657269616c206e756d62657273206d69736d61746368206166746572206d696044820152676e7420284e46542960c01b60648201526084016103f0565b808951856132f39190615745565b1415806133005750808314155b1561335c5760405162461bcd60e51b815260206004820152602660248201527f546f74616c20737570706c79206d69736d61746368206166746572206d696e7460448201526520284e46542960d01b60648201526084016103f0565b5f8a60070b13801561336d57508851155b15613450576040516370a0823160e01b81526001600160a01b0389811660048301525f91908d16906370a0823190602401602060405180830381865afa1580156133b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133dd91906152f9565b9050806133ee60078d900b8a615380565b1461344a5760405162461bcd60e51b815260206004820152602660248201527f42616c616e6365206d69736d61746368206166746572206d696e74202846756e6044820152656769626c652960d01b60648201526084016103f0565b50611881565b6040516370a0823160e01b81526001600160a01b0389811660048301525f91908d16906370a0823190602401602060405180830381865afa158015613497573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134bb91906152f9565b9050808a51896134cb9190615380565b146135225760405162461bcd60e51b815260206004820152602160248201527f42616c616e6365206d69736d61746368206166746572206d696e7420284e46546044820152602960f81b60648201526084016103f0565b505050505050505050505050565b5f815f81518110613543576135436152a1565b60200260200101515f015190505f805f80855f81518110613566576135666152a1565b60200260200101516020015151111561360257845f8151811061358b5761358b6152a1565b6020026020010151602001516001815181106135a9576135a96152a1565b60200260200101515f01519250845f815181106135c8576135c86152a1565b6020026020010151602001516001815181106135e6576135e66152a1565b6020026020010151602001516001600160401b03169150613686565b845f81518110613614576136146152a1565b6020026020010151604001515f81518110613631576136316152a1565b6020026020010151602001519250845f81518110613651576136516152a1565b6020026020010151604001515f8151811061366e5761366e6152a1565b6020026020010151604001516001600160401b031690505b5f82118015613693575080155b156137f4575f6136a4858585614042565b9050601681146136c65760405162461bcd60e51b81526004016103f0906152b5565b6040516370a0823160e01b81526001600160a01b0385811660048301525f91908716906370a0823190602401602060405180830381865afa15801561370d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061373191906152f9565b905083866001600160a01b031663dd62ed3e30886040518363ffffffff1660e01b8152600401613762929190615310565b602060405180830381865afa15801561377d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137a191906152f9565b146137be5760405162461bcd60e51b81526004016103f09061532a565b6137c88888614618565b9150601682146137ea5760405162461bcd60e51b81526004016103f0906155a2565b6126478482615380565b5f61382785866001600160a01b0316636352211e856040518263ffffffff1660e01b8152600401610cc491815260200190565b9050601681146138495760405162461bcd60e51b81526004016103f09061554c565b61385485858461411c565b9050601681146138765760405162461bcd60e51b81526004016103f0906153d0565b6138808787614618565b9050601681146138a25760405162461bcd60e51b81526004016103f09061554c565b6040516331a9108f60e11b8152600481018390526001600160a01b038086169190871690636352211e90602401602060405180830381865afa1580156138ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390e919061541d565b6001600160a01b0316146139345760405162461bcd60e51b81526004016103f09061547d565b60405163020604bf60e21b8152600481018390526001600160a01b03808616919087169063081812fc90602401602060405180830381865afa15801561397c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139a0919061541d565b6001600160a01b0316036109435760405162461bcd60e51b81526004016103f0906154c2565b5f6139d082614763565b905060168114613a1a5760405162461bcd60e51b81526020600482015260156024820152742330b4b632b2103a37903830bab9b2903a37b5b2b760591b60448201526064016103f0565b5f80613a2584614414565b909250905060168214613a865760405162461bcd60e51b8152602060048201526024808201527f4661696c656420746f2067657420746f6b656e20696e666f20616674657220706044820152636175736560e01b60648201526084016103f0565b8060800151613acd5760405162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c185d5cd959606a1b60448201526064016103f0565b613ad684614838565b925060168314613b285760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f20756e706175736520746f6b656e00000000000000000060448201526064016103f0565b613b3184614414565b909250905060168214613b875760405162461bcd60e51b815260206004820152602b60248201525f805160206163dc83398151915260448201526a74657220756e706175736560a81b60648201526084016103f0565b8060800151156111815760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881a5cc81cdd1a5b1b081c185d5cd959605a1b60448201526064016103f0565b5f613bdc8383614865565b60070b905060168114613c315760405162461bcd60e51b815260206004820152601a60248201527f4772616e74206b7963206f7065726174696f6e206661696c656400000000000060448201526064016103f0565b5f80613c3d858561488f565b915060070b9150601660030b8214613c915760405162461bcd60e51b8152602060048201526017602482015276125cc81ade58c81bdc195c985d1a5bdb8819985a5b1959604a1b60448201526064016103f0565b80613cd45760405162461bcd60e51b8152602060048201526013602482015272096f2c640e6e8c2e8eae640dad2e6dac2e8c6d606b1b60448201526064016103f0565b613cde85856148ba565b60070b925060168314613d335760405162461bcd60e51b815260206004820152601a60248201527f4772616e74206b7963206f7065726174696f6e206661696c656400000000000060448201526064016103f0565b613d3d858561488f565b60079190910b9250905060168214613d915760405162461bcd60e51b8152602060048201526017602482015276125cc81ade58c81bdc195c985d1a5bdb8819985a5b1959604a1b60448201526064016103f0565b8015610c8a5760405162461bcd60e51b8152602060048201526013602482015272096f2c640e6e8c2e8eae640dad2e6dac2e8c6d606b1b60448201526064016103f0565b6040516331a9108f60e11b8152600481018290526001600160a01b038316906323b872dd908290636352211e90602401602060405180830381865afa158015613e20573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e44919061541d565b30846040518463ffffffff1660e01b8152600401613e6493929190615721565b5f604051808303815f87803b158015613e7b575f80fd5b505af1925050508015613e8c575060015b613ed85760405162461bcd60e51b815260206004820152601b60248201527f494552433732313a206661696c656420746f207472616e73666572000000000060448201526064016103f0565b6040516331a9108f60e11b81526004810182905230906001600160a01b03841690636352211e90602401602060405180830381865afa158015613f1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f41919061541d565b6001600160a01b031614613f675760405162461bcd60e51b81526004016103f09061547d565b5050565b5f805f6101676001600160a01b0316632e63879b60e01b8686604051602401613f9592919061576c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051613fd39190615507565b5f604051808303815f865af19150503d805f811461400c576040519150601f19603f3d011682016040523d82523d5f602084013e614011565b606091505b509150915081614022576015614036565b808060200190518101906140369190615533565b60030b95945050505050565b5f805f6101676001600160a01b031663e1f21c6760e01b87878760405160240161406e93929190615721565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516140ac9190615507565b5f604051808303815f865af19150503d805f81146140e5576040519150601f19603f3d011682016040523d82523d5f602084013e6140ea565b606091505b5091509150816140fb57601561410f565b8080602001905181019061410f9190615533565b60030b9695505050505050565b5f805f6101676001600160a01b0316637336aaf060e01b87878760405160240161406e93929190615721565b5f805f6101676001600160a01b0316635b8f858460e01b8686604051602401613f95929190615310565b5f805f806101676001600160a01b03166346de0fb160e01b878760405160240161419d929190615310565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516141db9190615507565b5f604051808303815f865af19150503d805f8114614214576040519150601f19603f3d011682016040523d82523d5f602084013e614219565b606091505b50915091508161422b5760155f6119a4565b808060200190518101906119a491906157c7565b5f805f6101676001600160a01b03166352f9138760e01b8686604051602401613f95929190615310565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b60848201525f908190819061016790635cfc901160e01b9060a40161098c565b6040516001600160a01b0384811660248301528316604482015281151560648201525f908190819061016790631b3b02e560e11b9060840161406e565b604080516001600160a01b0385811660248301528481166044830152831660648083019190915282518083039091018152608490910182526020810180516001600160e01b031663f49f40db60e01b17905290515f918291829182916101679161435691615507565b5f604051808303815f865af19150503d805f811461438f576040519150601f19603f3d011682016040523d82523d5f602084013e614394565b606091505b5091509150816143a65760155f6143ba565b808060200190518101906143ba91906157c7565b60039190910b9890975095505050505050565b6040516001600160a01b038581166024830152848116604483015283166064820152600782900b60848201525f90819081906101679063eca3691760e01b9060a40161098c565b5f61441d6148f1565b604080516001600160a01b03851660248083019190915282518083039091018152604490910182526020810180516001600160e01b0316631f69565f60e01b17905290515f9182916101679161447291615507565b5f604051808303815f865af19150503d805f81146144ab576040519150601f19603f3d011682016040523d82523d5f602084013e6144b0565b606091505b50915091506144bd6148f1565b826144ca576015816119a4565b818060200190518101906119a49190615d22565b5f805f806101676001600160a01b031663d6910d0660e01b88888860405160240161450b93929190615eab565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516145499190615507565b5f604051808303815f865af19150503d805f8114614582576040519150601f19603f3d011682016040523d82523d5f602084013e614587565b606091505b5091509150816145995760155f6143ba565b808060200190518101906143ba9190615edd565b6040516001600160a01b03848116602483015283166044820152600782900b60648201525f90819081906101679063efef57f960e01b9060840161406e565b5f805f6101676001600160a01b031663f7f38e2660e01b87878760405160240161406e93929190615f07565b5f805f6101676001600160a01b0316630e71804f60e01b8686604051602401613f95929190615f84565b5f805f6101676001600160a01b03166378b6391860e01b8686604051602401613f9592919061576c565b5f8060605f806101676001600160a01b031663e0f4059a60e01b89898960405160240161469b93929190616080565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516146d99190615507565b5f604051808303815f865af19150503d805f8114614712576040519150601f19603f3d011682016040523d82523d5f602084013e614717565b606091505b50915091508161473957604080515f808252602082019092526015919061474d565b8080602001905181019061474d91906160fa565b60039290920b9a90995090975095505050505050565b6040516001600160a01b03821660248201525f908190819061016790631f106b4b60e21b906044015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147ca9190615507565b5f604051808303815f865af19150503d805f8114614803576040519150601f19603f3d011682016040523d82523d5f602084013e614808565b606091505b50915091508161481957601561482d565b8080602001905181019061482d9190615533565b60030b949350505050565b6040516001600160a01b03821660248201525f908190819061016790633b3bff0f60e01b9060440161478c565b5f805f6101676001600160a01b0316638f8d7f9960e01b8686604051602401613f95929190615310565b5f805f806101676001600160a01b031663f2c31ff460e01b878760405160240161419d929190615310565b5f805f6101676001600160a01b031663af99c63360e01b8686604051602401613f95929190615310565b610228806161b483390190565b60408051610240810182526060610120820181815261014083018290525f610160840181905261018084018390526101a084018190526101c084018190526101e08401819052610200840183905284519283018552808352602083018190529382019390935261022082015290819081526020015f60070b81526020015f151581526020015f151581526020015f15158152602001606081526020016060815260200160608152602001606081525090565b6001600160a01b03811681146149b7575f80fd5b50565b80356149c5816149a3565b919050565b5f805f80608085870312156149dd575f80fd5b84356149e8816149a3565b935060208501356149f8816149a3565b93969395505050506040820135916060013590565b5f805f8060808587031215614a20575f80fd5b8435614a2b816149a3565b93506020850135614a3b816149a3565b92506040850135614a4b816149a3565b9396929550929360600135925050565b5f8060408385031215614a6c575f80fd5b8235614a77816149a3565b91506020830135614a87816149a3565b809150509250929050565b5f805f60608486031215614aa4575f80fd5b8335614aaf816149a3565b92506020840135614abf816149a3565b929592945050506040919091013590565b8060070b81146149b7575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b1457614b14614ade565b60405290565b604051602081016001600160401b0381118282101715614b1457614b14614ade565b604051608081016001600160401b0381118282101715614b1457614b14614ade565b604080519081016001600160401b0381118282101715614b1457614b14614ade565b60405160a081016001600160401b0381118282101715614b1457614b14614ade565b60405161012081016001600160401b0381118282101715614b1457614b14614ade565b60405160c081016001600160401b0381118282101715614b1457614b14614ade565b604051601f8201601f191681016001600160401b0381118282101715614c0f57614c0f614ade565b604052919050565b5f6001600160401b03821115614c2f57614c2f614ade565b5060051b60200190565b5f805f8060808587031215614c4c575f80fd5b8435614c57816149a3565b9350602085810135614c6881614ad0565b935060408601356001600160401b03811115614c82575f80fd5b8601601f81018813614c92575f80fd5b8035614ca5614ca082614c17565b614be7565b81815260059190911b8201830190838101908a831115614cc3575f80fd5b928401925b82841015614cea578335614cdb81614ad0565b82529284019290840190614cc8565b8096505050505050614cfe606086016149ba565b905092959194509250565b5f6001600160401b03821115614d2157614d21614ade565b50601f01601f191660200190565b5f82601f830112614d3e575f80fd5b8135614d4c614ca082614d09565b818152846020838601011115614d60575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215614d8d575f80fd5b8235614d98816149a3565b915060208301356001600160401b03811115614db2575f80fd5b614dbe85828601614d2f565b9150509250929050565b5f5b83811015614de2578181015183820152602001614dca565b50505f910152565b5f8151808452614e01816020860160208601614dc8565b601f01601f19169290920160200192915050565b828152604060208201525f614e2d6040830184614dea565b949350505050565b5f805f805f60a08688031215614e49575f80fd5b8535614e54816149a3565b94506020860135614e64816149a3565b93506040860135614e74816149a3565b94979396509394606081013594506080013592915050565b80151581146149b7575f80fd5b5f82601f830112614ea8575f80fd5b81356020614eb8614ca083614c17565b82815260609283028501820192828201919087851115614ed6575f80fd5b8387015b85811015614f375781818a031215614ef1575f8081fd5b614ef9614af2565b8135614f04816149a3565b815281860135614f1381614ad0565b81870152604082810135614f2681614e8c565b908201528452928401928101614eda565b5090979650505050505050565b5f8060408385031215614f55575f80fd5b6001600160401b038084351115614f6a575f80fd5b60208435850186031215614f7c575f80fd5b614f84614b1a565b8185358601351115614f94575f80fd5b614fa48686358701803501614e99565b815292506020840135811015614fb8575f80fd5b6020840135840185601f820112614fcd575f80fd5b614fda614ca08235614c17565b81358082526020808301929160051b840101881015614ff7575f80fd5b602083015b6020843560051b85010181101561517057848135111561501a575f80fd5b803584016060818b03601f19011215615031575f80fd5b615039614af2565b61504660208301356149a3565b60208201358152866040830135111561505d575f80fd5b6150708b60206040850135850101614e99565b60208201528660608301351115615085575f80fd5b6060820135820191508a603f83011261509c575f80fd5b6150ac614ca06020840135614c17565b602083810135808352908201919060071b84016040018d8111156150ce575f80fd5b6040850194505b8085101561515a576080858f0312156150ec575f80fd5b6150f4614b3c565b6150fe86356149a3565b8535815261510f60208701356149a3565b602086013560208201526151266040870135614ad0565b6040860135604082015261513d6060870135614e8c565b6060868101359082015283526080909401936020909201916150d5565b5060408301525084525060209283019201614ffc565b50809450505050509250929050565b5f805f8060808587031215615192575f80fd5b843561519d816149a3565b93506020858101356151ae81614ad0565b935060408601356001600160401b03808211156151c9575f80fd5b818801915088601f8301126151dc575f80fd5b81356151ea614ca082614c17565b81815260059190911b8301840190848101908b831115615208575f80fd5b8585015b8381101561523f57803585811115615223575f8081fd5b6152318e89838a0101614d2f565b84525091860191860161520c565b50809750505050505050614cfe606086016149ba565b5f60208284031215615265575f80fd5b8135615270816149a3565b9392505050565b5f8060408385031215615288575f80fd5b8235615293816149a3565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b60208082526024908201527f4661696c656420746f20617070726f766520746f6b656e20666f72207472616e60408201526339b332b960e11b606082015260800190565b5f60208284031215615309575f80fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b60208082526022908201527f416c6c6f77616e6365206d69736d61746368206265666f7265207472616e736660408201526132b960f11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156153935761539361536c565b92915050565b6020808252601f908201527f42616c616e6365206d69736d61746368206166746572207472616e7366657200604082015260600190565b60208082526022908201527f4661696c656420746f20617070726f7665204e465420666f72207472616e736660408201526132b960f11b606082015260800190565b80516149c5816149a3565b5f6020828403121561542d575f80fd5b8151615270816149a3565b60208082526025908201527f4e465420617070726f76616c206d69736d61746368206265666f7265207472616040820152643739b332b960d91b606082015260800190565b60208082526025908201527f4e4654206f776e657273686970206d69736d61746368206166746572207472616040820152643739b332b960d91b606082015260800190565b60208082526025908201527f4e465420616c6c6f77616e6365206d69736d61746368206166746572207472616040820152643739b332b960d91b606082015260800190565b5f8251615518818460208701614dc8565b9190910192915050565b8051600381900b81146149c5575f80fd5b5f60208284031215615543575f80fd5b61527082615522565b60208082526016908201527511985a5b1959081d1bc81d1c985b9cd9995c8813919560521b604082015260600190565b80516149c581614e8c565b5f60208284031215615597575f80fd5b815161527081614e8c565b60208082526021908201527f4661696c656420746f207472616e736665722066756e6769626c6520746f6b656040820152603760f91b606082015260800190565b8181035f8312801583831316838312821617156156025761560261536c565b5092915050565b60208082526026908201527f546f74616c20737570706c79206d69736d61746368206166746572206275726e60408201526520284e46542960d01b606082015260800190565b818103818111156153935761539361536c565b6001600160a01b03831681526040602082018190525f90614e2d90830184614dea565b8215158152604060208201525f614e2d6040830184614dea565b5f82601f8301126156ae575f80fd5b81516156bc614ca082614d09565b8181528460208386010111156156d0575f80fd5b614e2d826020830160208701614dc8565b5f80604083850312156156f2575f80fd5b6156fb83615522565b915060208301516001600160401b03811115615715575f80fd5b614dbe8582860161569f565b6001600160a01b039384168152919092166020820152604081019190915260600190565b8082018281125f8312801582168215821617156157645761576461536c565b505092915050565b6001600160a01b0383811682526040602080840182905284519184018290525f92858201929091906060860190855b818110156157b957855185168352948301949183019160010161579b565b509098975050505050505050565b5f80604083850312156157d8575f80fd5b6157e183615522565b91506020830151614a8781614e8c565b80516149c581614ad0565b5f82601f83011261580b575f80fd5b8151602061581b614ca083614c17565b82815260059290921b84018101918181019086841115615839575f80fd5b8286015b848110156159485780516001600160401b038082111561585b575f80fd5b908801906040601f19838c038101821315615874575f80fd5b61587c614b5e565b8885015181528285015184811115615892575f80fd5b949094019360a0858e03830112156158a9575f8081fd5b6158b1614b80565b9150888501516158c081614e8c565b8252848301516158cf816149a3565b828a0152606085810151858111156158e6575f8081fd5b6158f48f8c838a010161569f565b858501525060809350838601518581111561590e575f8081fd5b61591c8f8c838a010161569f565b82850152505061592e60a08601615412565b92820192909252818801528552505091830191830161583d565b509695505050505050565b5f60608284031215615963575f80fd5b61596b614af2565b9050815161597881614ad0565b81526020820151615988816149a3565b6020820152604082015161599b81614ad0565b604082015292915050565b5f61016082840312156159b7575f80fd5b6159bf614ba2565b905081516001600160401b03808211156159d7575f80fd5b6159e38583860161569f565b835260208401519150808211156159f8575f80fd5b615a048583860161569f565b6020840152615a1560408501615412565b60408401526060840151915080821115615a2d575f80fd5b615a398583860161569f565b6060840152615a4a6080850161557c565b6080840152615a5b60a085016157f1565b60a0840152615a6c60c0850161557c565b60c084015260e0840151915080821115615a84575f80fd5b50615a91848285016157fc565b60e083015250610100615aa684828501615953565b9082015292915050565b5f82601f830112615abf575f80fd5b81516020615acf614ca083614c17565b82815260a09283028501820192828201919087851115615aed575f80fd5b8387015b85811015614f375781818a031215615b08575f8081fd5b615b10614b80565b8151615b1b81614ad0565b815281860151615b2a816149a3565b81870152604082810151615b3d81614e8c565b90820152606082810151615b5081614e8c565b90820152608082810151615b63816149a3565b908201528452928401928101615af1565b5f82601f830112615b83575f80fd5b81516020615b93614ca083614c17565b82815260c09283028501820192828201919087851115615bb1575f80fd5b8387015b85811015614f375781818a031215615bcc575f8081fd5b615bd4614bc5565b8151615bdf81614ad0565b815281860151615bee81614ad0565b81870152604082810151615c0181614ad0565b90820152606082810151615c1481614ad0565b90820152608082810151615c2781614e8c565b9082015260a082810151615c3a816149a3565b908201528452928401928101615bb5565b5f82601f830112615c5a575f80fd5b81516020615c6a614ca083614c17565b82815260c09283028501820192828201919087851115615c88575f80fd5b8387015b85811015614f375781818a031215615ca3575f8081fd5b615cab614bc5565b8151615cb681614ad0565b815281860151615cc581614ad0565b81870152604082810151615cd881614ad0565b90820152606082810151615ceb816149a3565b90820152608082810151615cfe81614e8c565b9082015260a082810151615d11816149a3565b908201528452928401928101615c8c565b5f8060408385031215615d33575f80fd5b615d3c83615522565b915060208301516001600160401b0380821115615d57575f80fd5b908401906101208287031215615d6b575f80fd5b615d73614ba2565b825182811115615d81575f80fd5b615d8d888286016159a6565b825250615d9c602084016157f1565b6020820152615dad6040840161557c565b6040820152615dbe6060840161557c565b6060820152615dcf6080840161557c565b608082015260a083015182811115615de5575f80fd5b615df188828601615ab0565b60a08301525060c083015182811115615e08575f80fd5b615e1488828601615b74565b60c08301525060e083015182811115615e2b575f80fd5b615e3788828601615c4b565b60e0830152506101008084015183811115615e50575f80fd5b615e5c8982870161569f565b8284015250508093505050509250929050565b5f8151808452602080850194508084015f5b83811015615ea057815160070b87529582019590820190600101615e81565b509495945050505050565b60018060a01b03841681528260070b6020820152606060408201525f615ed46060830184615e6f565b95945050505050565b5f8060408385031215615eee575f80fd5b615ef783615522565b91506020830151614a8781614ad0565b6001600160a01b038481168252831660208201526060604082018190525f90615ed490830184615e6f565b5f8151808452602080850194508084015f5b83811015615ea057815180516001600160a01b031688528381015160070b8489015260409081015115159088015260609096019590820190600101615f44565b5f60408083526060855160208084870152615fa183870183615f32565b9150858203818701528187518084528284019150828160051b850101838a015f5b8381101561606f57868303601f19018552815180516001600160a01b039081168552878201518886018b9052615ffa8b870182615f32565b928c0151868403878e01528051808552908a01935f92508a01905b808310156160595784518051851683528b81015185168c8401528e81015160070b8f8401528d015115158d830152938a019360019290920191608090910190616015565b5097890197955050509186019150600101615fc2565b50909b9a5050505050505050505050565b5f6060820160018060a01b038616835260208560070b818501526060604085015281855180845260808601915060808160051b87010193508287015f5b828110156160eb57607f198887030184526160d9868351614dea565b955092840192908401906001016160bd565b50939998505050505050505050565b5f805f6060848603121561610c575f80fd5b61611584615522565b925060208085015161612681614ad0565b60408601519093506001600160401b03811115616141575f80fd5b8501601f81018713616151575f80fd5b805161615f614ca082614c17565b81815260059190911b8201830190838101908983111561617d575f80fd5b928401925b828410156161a457835161619581614ad0565b82529284019290840190616182565b8095505050505050925092509256fe608060405234801561000f575f80fd5b5061020b8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610034575f3560e01c80634444fbf7146100385780634adcaa711461004d575b5f80fd5b61004b610046366004610165565b610060565b005b61004b61005b366004610165565b6100df565b6040516323b872dd60e01b81526001600160a01b0383811660048301528281166024830152604482018590528516906323b872dd906064016020604051808303815f875af11580156100b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100d891906101af565b5050505050565b6040516323b872dd60e01b81526001600160a01b0383811660048301528281166024830152604482018590528516906323b872dd906064015f604051808303815f87803b15801561012e575f80fd5b505af1158015610140573d5f803e3d5ffd5b5050505050505050565b80356001600160a01b0381168114610160575f80fd5b919050565b5f805f8060808587031215610178575f80fd5b6101818561014a565b9350602085013592506101966040860161014a565b91506101a46060860161014a565b905092959194509250565b5f602082840312156101bf575f80fd5b815180151581146101ce575f80fd5b939250505056fea2646970667358221220400ef04a94e7a1988aa803fe0ecbfc248bbc54035f0b2fcc88992020e69d28ff64736f6c634300081400334661696c656420746f20726574726965766520746f6b656e20696e666f206166a264697066735822122032d585df81247fed749796e58a8e02ccffefca9d654d7d93d459d4dfe445098964736f6c63430008140033 \ No newline at end of file diff --git a/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.json b/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.json index 49427de87a9..edbc7216afd 100644 --- a/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.json +++ b/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.json @@ -554,6 +554,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "getAddressThis", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { diff --git a/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.sol b/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.sol index 58c75894758..d0f083187d1 100644 --- a/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.sol +++ b/hedera-mirror-web3/src/test/resources/contracts/DynamicEthCalls/DynamicEthCalls.sol @@ -406,6 +406,10 @@ contract DynamicEthCalls is HederaTokenService { if (response != HederaResponseCodes.SUCCESS) revert("Is kyc operation failed"); if(isKyc) revert("Kyc status mismatch"); } + + function getAddressThis() public view returns(address) { + return address(this); + } } contract SpenderContract { diff --git a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.bin b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.bin index b0954c63843..513a64430ff 100644 --- a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.bin +++ b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.bin @@ -1 +1 @@ -60806040526000309050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161006f906100db565b60405180910390fd5b506100fb565b600082825260208201905092915050565b7f5a65726f20616464726573732e00000000000000000000000000000000000000600082015250565b60006100c5600d8361007e565b91506100d08261008f565b602082019050919050565b600060208201905081810360008301526100f4816100b8565b9050919050565b6101648061010a6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806341de2c4e14610030575b600080fd5b61003861003a565b005b6000309050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100a59061010e565b60405180910390fd5b50565b600082825260208201905092915050565b7f5a65726f20616464726573732e00000000000000000000000000000000000000600082015250565b60006100f8600d836100b1565b9150610103826100c2565b602082019050919050565b60006020820190508181036000830152610127816100eb565b905091905056fea2646970667358221220cfb72597ca3ad2667cec512e862fc68bba53097afe7258045f34bed0b1f2fc7164736f6c63430008120033 \ No newline at end of file +608060405234801561001057600080fd5b50600436106100365760003560e01c80630a83b9a61461003b57806341de2c4e14610059575b600080fd5b610043610063565b6040516100509190610123565b60405180910390f35b61006161006b565b005b600030905090565b6000309050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d69061019b565b60405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061010d826100e2565b9050919050565b61011d81610102565b82525050565b60006020820190506101386000830184610114565b92915050565b600082825260208201905092915050565b7f5a65726f20616464726573732e00000000000000000000000000000000000000600082015250565b6000610185600d8361013e565b91506101908261014f565b602082019050919050565b600060208201905081810360008301526101b481610178565b905091905056fea2646970667358221220d1bf301106861c636eb4ce94ec71f03f9d02995361aa602aafcae9a5521663db64736f6c63430008120033 \ No newline at end of file diff --git a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.json b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.json index cd3930c5faf..e7d1bf1494a 100644 --- a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.json +++ b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.json @@ -4,6 +4,19 @@ "stateMutability": "payable", "type": "constructor" }, + { + "inputs": [], + "name": "getAddressThis", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "testAddressThis", @@ -11,4 +24,4 @@ "stateMutability": "nonpayable", "type": "function" } -] +] \ No newline at end of file diff --git a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.sol b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.sol index 9540c42fca5..53f5bd39b1c 100644 --- a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.sol +++ b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThis.sol @@ -16,4 +16,7 @@ contract TestAddressThis { } } + function getAddressThis() public view returns(address) { + return address(this); + } } \ No newline at end of file diff --git a/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThisInit.bin b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThisInit.bin new file mode 100644 index 00000000000..089508357be --- /dev/null +++ b/hedera-mirror-web3/src/test/resources/contracts/TestContractAddress/TestAddressThisInit.bin @@ -0,0 +1 @@ +60806040526000309050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161006f906100db565b60405180910390fd5b506100fb565b600082825260208201905092915050565b7f5a65726f20616464726573732e00000000000000000000000000000000000000600082015250565b60006100c5600d8361007e565b91506100d08261008f565b602082019050919050565b600060208201905081810360008301526100f4816100b8565b9050919050565b6101f18061010a6000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80630a83b9a61461003b57806341de2c4e14610059575b600080fd5b610043610063565b6040516100509190610123565b60405180910390f35b61006161006b565b005b600030905090565b6000309050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100d69061019b565b60405180910390fd5b50565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061010d826100e2565b9050919050565b61011d81610102565b82525050565b60006020820190506101386000830184610114565b92915050565b600082825260208201905092915050565b7f5a65726f20616464726573732e00000000000000000000000000000000000000600082015250565b6000610185600d8361013e565b91506101908261014f565b602082019050919050565b600060208201905081810360008301526101b481610178565b905091905056fea2646970667358221220d1bf301106861c636eb4ce94ec71f03f9d02995361aa602aafcae9a5521663db64736f6c63430008120033 \ No newline at end of file