diff options
author | gjoranv <gjoranv@gmail.com> | 2017-10-16 10:59:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-16 10:59:01 +0200 |
commit | cc54fb2e6ea49034b3f14389e6c37d733c4679c9 (patch) | |
tree | c7b34480a648fe1f520ff9cf5bd3fdab54cc4281 | |
parent | c92066256b15bd51f648b8fd83756acd05bc13bc (diff) | |
parent | fff597dc521b52d9b8a5971383661340f594e808 (diff) |
Merge branch 'master' into gjoranv/container-test
176 files changed, 4732 insertions, 2296 deletions
diff --git a/build_settings.cmake b/build_settings.cmake index 425a2eddda7..2cccea9b64f 100644 --- a/build_settings.cmake +++ b/build_settings.cmake @@ -21,7 +21,7 @@ set(C_WARN_OPTS "-Winline -Wuninitialized -Werror -Wall -W -Wchar-subscripts -Wc # Warnings that are specific to C++ compilation # Note: this is not a union of C_WARN_OPTS, since CMAKE_CXX_FLAGS already includes CMAKE_C_FLAGS, which in turn includes C_WARN_OPTS transitively -set(CXX_SPECIFIC_WARN_OPTS "-Wsuggest-override -Wnon-virtual-dtor") +set(CXX_SPECIFIC_WARN_OPTS "-Wsuggest-override -Wnon-virtual-dtor -Wformat-security") # C and C++ compiler flags set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -fno-omit-frame-pointer ${C_WARN_OPTS} -fPIC ${VESPA_CXX_ABI_FLAGS} -DBOOST_DISABLE_ASSERTS ${VESPA_CPU_ARCH_FLAGS} -mtune=intel ${EXTRA_C_FLAGS}") diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java index b86c0a5ca94..eda38f95054 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java @@ -187,9 +187,18 @@ public class DeploymentSpec { * @throws IllegalArgumentException if the XML is invalid */ public static DeploymentSpec fromXml(String xmlForm) { - return new DeploymentSpecXmlReader().read(xmlForm); + return fromXml(xmlForm, true); } - + + /** + * Creates a deployment spec from XML. + * + * @throws IllegalArgumentException if the XML is invalid + */ + public static DeploymentSpec fromXml(String xmlForm, boolean validate) { + return new DeploymentSpecXmlReader(validate).read(xmlForm); + } + public static String toMessageString(Throwable t) { StringBuilder b = new StringBuilder(); String lastMessage = null; diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java index 0b49325756d..35021d1b44a 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java @@ -33,6 +33,22 @@ public class DeploymentSpecXmlReader { private static final String blockChangeTag = "block-change"; private static final String prodTag = "prod"; + private final boolean validate; + + /** Creates a validating reader */ + public DeploymentSpecXmlReader() { + this(true); + } + + /** + * Creates a reader + * + * @param validate true to validate the input, false to accept any input which can be unabiguously parsed + */ + public DeploymentSpecXmlReader(boolean validate) { + this.validate = validate; + } + public DeploymentSpec read(Reader reader) { try { return read(IOUtils.readAll(reader)); @@ -47,7 +63,8 @@ public class DeploymentSpecXmlReader { List<Step> steps = new ArrayList<>(); Optional<String> globalServiceId = Optional.empty(); Element root = XML.getDocument(xmlForm).getDocumentElement(); - validateTagOrder(root); + if (validate) + validateTagOrder(root); for (Element environmentTag : XML.getChildren(root)) { if ( ! isEnvironmentName(environmentTag.getTagName())) continue; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java index 46f5807b350..4f766732e4e 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/LogForwarder.java @@ -13,16 +13,21 @@ public class LogForwarder extends AbstractService implements LogforwarderConfig. public static class Config { public final String deploymentServer; public final String clientName; + public final String splunkHome; - private Config(String ds, String cn) { + private Config(String ds, String cn, String sh) { this.deploymentServer = ds; this.clientName = cn; + this.splunkHome = sh; } public Config withDeploymentServer(String ds) { - return new Config(ds, clientName); + return new Config(ds, clientName, splunkHome); } public Config withClientName(String cn) { - return new Config(deploymentServer, cn); + return new Config(deploymentServer, cn, splunkHome); + } + public Config withSplunkHome(String sh) { + return new Config(deploymentServer, clientName, sh); } } @@ -40,7 +45,7 @@ public class LogForwarder extends AbstractService implements LogforwarderConfig. } public static Config cfg() { - return new Config(null, null); + return new Config(null, null, null); } /** @@ -59,6 +64,9 @@ public class LogForwarder extends AbstractService implements LogforwarderConfig. public void getConfig(LogforwarderConfig.Builder builder) { builder.deploymentServer(config.deploymentServer); builder.clientName(config.clientName); + if (config.splunkHome != null) { + builder.splunkHome(config.splunkHome); + } } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java index 3049112ac0a..a3a1a0fbebc 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java @@ -117,6 +117,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu int i = 0; for (ModelElement e : logForwardingElement.getChildren("splunk")) { LogForwarder.Config cfg = LogForwarder.cfg() + .withSplunkHome(e.getStringAttribute("splunk-home")) .withDeploymentServer(e.getStringAttribute("deployment-server")) .withClientName(e.getStringAttribute("client-name")); for (HostResource host : admin.getHostSystem().getHosts()) { diff --git a/config-model/src/main/resources/schema/admin.rnc b/config-model/src/main/resources/schema/admin.rnc index 3ab02af3efd..cdf26807bcb 100644 --- a/config-model/src/main/resources/schema/admin.rnc +++ b/config-model/src/main/resources/schema/admin.rnc @@ -117,6 +117,7 @@ ClusterControllers = element cluster-controllers { LogForwarding = element logforwarding { element splunk { + attribute splunk-home { xsd:string }? & attribute deployment-server { xsd:string } & attribute client-name { xsd:string } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java index e3f773a64c2..e2ed57251d9 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/admin/DedicatedAdminV4Test.java @@ -176,6 +176,7 @@ public class DedicatedAdminV4Test { assertEquals("foo:123", config.deploymentServer()); assertEquals("foocli", config.clientName()); + assertEquals("/opt/splunkforwarder", config.splunkHome()); } // Other host's forwarder diff --git a/config-model/src/test/schema-test-files/services.xml b/config-model/src/test/schema-test-files/services.xml index 4b6eb12208c..bf2a924e62d 100644 --- a/config-model/src/test/schema-test-files/services.xml +++ b/config-model/src/test/schema-test-files/services.xml @@ -27,7 +27,7 @@ </consumer> </metrics> <logforwarding> - <splunk deployment-server="foo:8989" client-name="foobar"/> + <splunk deployment-server="foo:8989" client-name="foobar" splunk-home="/opt/splunk"/> </logforwarding> </admin> diff --git a/configdefinitions/src/vespa/logforwarder.def b/configdefinitions/src/vespa/logforwarder.def index 205e8ad3b8c..0c311524fef 100644 --- a/configdefinitions/src/vespa/logforwarder.def +++ b/configdefinitions/src/vespa/logforwarder.def @@ -4,3 +4,4 @@ namespace=cloud.config deploymentServer string default="" clientName string default="" +splunkHome string default="/opt/splunkforwarder" diff --git a/container-search/src/main/java/com/yahoo/search/searchers/InputCheckingSearcher.java b/container-search/src/main/java/com/yahoo/search/searchers/InputCheckingSearcher.java index ed1af514e88..018f4fc7aa9 100644 --- a/container-search/src/main/java/com/yahoo/search/searchers/InputCheckingSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/searchers/InputCheckingSearcher.java @@ -161,7 +161,7 @@ public class InputCheckingSearcher extends Searcher { } asOctets.flip(); CharsetDecoder decoder = StandardCharsets.UTF_8.newDecoder().onMalformedInput(CodingErrorAction.REPORT) - .onUnmappableCharacter(CodingErrorAction.REPORT); + .onUnmappableCharacter(CodingErrorAction.REPORT); // OK, unmappable character is sort of theoretical, but added to be explicit try { decoder.decode(asOctets); @@ -170,7 +170,7 @@ public class InputCheckingSearcher extends Searcher { } utfRejections.add(); throw new IllegalArgumentException("The user input has been determined to be double encoded UTF-8." - + " Please investigate whether this is a false positive."); + + " Please investigate whether this is a false positive."); } private int countSingleCharacterUserTerms(Item queryItem) { @@ -188,4 +188,5 @@ public class InputCheckingSearcher extends Searcher { return 0; } } + } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/AthensDomain.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/AthensDomain.java index eb8b5c5256b..194088df7dc 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/AthensDomain.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/AthensDomain.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.hosted.controller.api.identifiers; /** * @author smorgrav */ +// TODO Rename to AthenzDomain public class AthensDomain extends Identifier { public AthensDomain(String id) { diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/Athens.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/Athens.java deleted file mode 100644 index 0635fb850b7..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/Athens.java +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; - -import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; -import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId; -import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; - -/** - * Interface for integrating controller with Athens. - * - * @author mpolden - */ -public interface Athens { - - String principalTokenHeader(); - AthensPrincipal principalFrom(ScrewdriverId screwdriverId); - AthensPrincipal principalFrom(UserId userId); - NTokenValidator validator(); - NToken nTokenFrom(String rawToken); - ZmsClientFactory zmsClientFactory(); - AthensDomain screwdriverDomain(); - -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/NToken.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/NToken.java deleted file mode 100644 index b74872b4c6a..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/NToken.java +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; - -import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; -import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; - -import java.security.PublicKey; - -/** - * @author mpolden - */ -public interface NToken { - - AthensPrincipal getPrincipal(); - UserId getUser(); - AthensDomain getDomain(); - String getToken(); - String getKeyId(); - void validateSignatureAndExpiration(PublicKey publicKey) throws InvalidTokenException; - -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/NTokenValidator.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/NTokenValidator.java deleted file mode 100644 index 905d7d864a3..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/NTokenValidator.java +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; - -/** - * @author mpolden - */ -public interface NTokenValidator { - - void preloadPublicKeys(); - AthensPrincipal validate(NToken nToken) throws InvalidTokenException; - -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsClientFactory.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsClientFactory.java deleted file mode 100644 index e00f3ce2f64..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsClientFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; - -/** - * @author bjorncs - */ -public interface ZmsClientFactory { - ZmsClient createClientWithServicePrincipal(); - - ZmsClient createClientWithAuthorizedServiceToken(NToken authorizedServiceToken); -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsKeystore.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsKeystore.java deleted file mode 100644 index 4f8e5f5ff05..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsKeystore.java +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; - -import java.security.PublicKey; -import java.util.Optional; - -/** - * Interface for a keystore containing public keys for Athens services - * - * @author bjorncs - */ -@FunctionalInterface -public interface ZmsKeystore { - Optional<PublicKey> getPublicKey(AthensService service, String keyId); - - default void preloadKeys(AthensService service) { - // Default implementation is noop - } -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/AthensMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/AthensMock.java deleted file mode 100644 index 8bed95bfcd4..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/AthensMock.java +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens.mock; - -import com.google.inject.Inject; -import com.yahoo.component.AbstractComponent; -import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; -import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId; -import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.InvalidTokenException; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NTokenValidator; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClientFactory; - -/** - * @author mpolden - */ -public class AthensMock extends AbstractComponent implements Athens { - - private static final AthensDomain userDomain = new AthensDomain("domain1"); - private static final AthensDomain screwdriverDomain = new AthensDomain("screwdriver-domain"); - - private final ZmsClientFactory zmsClientFactory; - private final NTokenValidator nTokenValidator; - - public AthensMock(AthensDbMock athensDb, NTokenValidator nTokenValidator) { - this.zmsClientFactory = new ZmsClientFactoryMock(athensDb); - this.nTokenValidator = nTokenValidator; - } - - public AthensMock(AthensDbMock athensDbMock) { - this(athensDbMock, mockValidator); - } - - @Inject - public AthensMock() { - this(new AthensDbMock(), mockValidator); - } - - @Override - public String principalTokenHeader() { - return "X-Athens-Token"; - } - - @Override - public AthensPrincipal principalFrom(ScrewdriverId screwdriverId) { - return new AthensPrincipal(screwdriverDomain, new UserId("screwdriver-" + screwdriverId.id())); - } - - @Override - public AthensPrincipal principalFrom(UserId userId) { - return new AthensPrincipal(userDomain, userId); - } - - @Override - public NTokenValidator validator() { - return nTokenValidator; - } - - @Override - public NToken nTokenFrom(String rawToken) { - return new NTokenMock(rawToken); - } - - @Override - public ZmsClientFactory zmsClientFactory() { - return zmsClientFactory; - } - - @Override - public AthensDomain screwdriverDomain() { - return screwdriverDomain; - } - - private static final NTokenValidator mockValidator = new NTokenValidator() { - @Override - public void preloadPublicKeys() { - } - - @Override - public AthensPrincipal validate(NToken nToken) throws InvalidTokenException { - return nToken.getPrincipal(); - } - }; - -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/NTokenMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/NTokenMock.java deleted file mode 100644 index ae23a69e409..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/NTokenMock.java +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens.mock; - -import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; -import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.InvalidTokenException; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; - -import java.security.PublicKey; -import java.util.Objects; - -/** - * @author mpolden - */ -public class NTokenMock implements NToken { - - private static final AthensDomain domain = new AthensDomain("test"); - private static final UserId userId = new UserId("user"); - - private final String rawToken; - - public NTokenMock(String rawToken) { - this.rawToken = rawToken; - } - - @Override - public AthensPrincipal getPrincipal() { - return new AthensPrincipal(domain, userId); - } - - @Override - public UserId getUser() { - return userId; - } - - @Override - public AthensDomain getDomain() { - return domain; - } - - @Override - public String getToken() { - return "test-token"; - } - - @Override - public String getKeyId() { - return "test-key"; - } - - @Override - public void validateSignatureAndExpiration(PublicKey publicKey) throws InvalidTokenException { - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof NTokenMock)) return false; - NTokenMock that = (NTokenMock) o; - return Objects.equals(rawToken, that.rawToken); - } - - @Override - public int hashCode() { - return Objects.hash(rawToken); - } -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/ZmsClientFactoryMock.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/ZmsClientFactoryMock.java deleted file mode 100644 index 8bc8b29fb4c..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/ZmsClientFactoryMock.java +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens.mock; - -import com.yahoo.component.AbstractComponent; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClient; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClientFactory; - -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * @author bjorncs - */ -public class ZmsClientFactoryMock extends AbstractComponent implements ZmsClientFactory { - - private static final Logger log = Logger.getLogger(ZmsClientFactoryMock.class.getName()); - - private final AthensDbMock athens; - - public ZmsClientFactoryMock() { - this(new AthensDbMock()); - } - - ZmsClientFactoryMock(AthensDbMock athens) { - this.athens = athens; - } - - public AthensDbMock getSetup() { - return athens; - } - - @Override - public ZmsClient createClientWithServicePrincipal() { - log("createClientWithServicePrincipal()"); - return new ZmsClientMock(athens); - } - - @Override - public ZmsClient createClientWithAuthorizedServiceToken(NToken authorizedServiceToken) { - log("createClientWithAuthorizedServiceToken(authorizedServiceToken='%s')", authorizedServiceToken); - return new ZmsClientMock(athens); - } - - private static void log(String format, Object... args) { - log.log(Level.INFO, String.format(format, args)); - } - -} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/package-info.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/package-info.java deleted file mode 100644 index d4454503786..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -/** - * @author bjorncs - */ -@ExportPackage -package com.yahoo.vespa.hosted.controller.api.integration.athens.mock; - -import com.yahoo.osgi.annotation.ExportPackage; diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/package-info.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/package-info.java deleted file mode 100644 index eabe214abf2..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -@ExportPackage -package com.yahoo.vespa.hosted.controller.api.integration.athens; - -import com.yahoo.osgi.annotation.ExportPackage; diff --git a/controller-server/pom.xml b/controller-server/pom.xml index fa21098a092..2e706f6df24 100644 --- a/controller-server/pom.xml +++ b/controller-server/pom.xml @@ -92,6 +92,13 @@ <scope>provided</scope> </dependency> + <!-- required for Athenz libraries --> + <dependency> + <groupId>org.bouncycastle</groupId> + <artifactId>bcpkix-jdk15on</artifactId> + <scope>provided</scope> + </dependency> + <!-- compile --> <dependency> @@ -117,6 +124,49 @@ <version>1.6</version> </dependency> + <dependency> + <groupId>com.yahoo.athenz</groupId> + <artifactId>athenz-zms-java-client</artifactId> + <scope>compile</scope> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </exclusion> + <!-- Exclude all Jersey bundles provided by JDisc --> + <exclusion> + <groupId>org.glassfish.jersey.core</groupId> + <artifactId>jersey-client</artifactId> + </exclusion> + <exclusion> + <groupId>org.glassfish.jersey.media</groupId> + <artifactId>jersey-media-json-jackson</artifactId> + </exclusion> + <!-- BouncyCastle is not bundled due to class loading issues + when security provider is registered from inside a OSGi bundle --> + <exclusion> + <groupId>org.bouncycastle</groupId> + <artifactId>bcpkix-jdk15on</artifactId> + </exclusion> + <exclusion> + <groupId>org.bouncycastle</groupId> + <artifactId>bcprov-jdk15on</artifactId> + </exclusion> + </exclusions> + </dependency> + + <dependency> + <groupId>com.yahoo.athenz</groupId> + <artifactId>athenz-zts-java-client</artifactId> + <scope>compile</scope> + <exclusions> + <exclusion> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </exclusion> + </exclusions> + </dependency> + <!-- test --> <dependency> diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java index 672f50f83d7..7512e14643f 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/ApplicationController.java @@ -22,10 +22,6 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname; import com.yahoo.vespa.hosted.controller.api.identifiers.RevisionId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClient; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClientFactory; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsException; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerClient; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log; import com.yahoo.vespa.hosted.controller.api.integration.configserver.NoInstanceException; @@ -44,6 +40,10 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobReport; import com.yahoo.vespa.hosted.controller.application.JobStatus; import com.yahoo.vespa.hosted.controller.application.SourceRevision; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger; import com.yahoo.vespa.hosted.controller.maintenance.DeploymentExpirer; import com.yahoo.vespa.hosted.controller.persistence.ControllerDb; @@ -84,7 +84,7 @@ public class ApplicationController { private final CuratorDb curator; private final RotationRepository rotationRepository; - private final ZmsClientFactory zmsClientFactory; + private final AthenzClientFactory zmsClientFactory; private final NameService nameService; private final ConfigServerClient configserverClient; private final RoutingGenerator routingGenerator; @@ -94,7 +94,7 @@ public class ApplicationController { ApplicationController(Controller controller, ControllerDb db, CuratorDb curator, RotationRepository rotationRepository, - ZmsClientFactory zmsClientFactory, + AthenzClientFactory zmsClientFactory, NameService nameService, ConfigServerClient configserverClient, RoutingGenerator routingGenerator, Clock clock) { this.controller = controller; @@ -249,7 +249,7 @@ public class ApplicationController { if (tenant.get().isAthensTenant() && ! token.isPresent()) throw new IllegalArgumentException("Could not create '" + id + "': No NToken provided"); if (tenant.get().isAthensTenant()) { - ZmsClient zmsClient = zmsClientFactory.createClientWithAuthorizedServiceToken(token.get()); + ZmsClient zmsClient = zmsClientFactory.createZmsClientWithAuthorizedServiceToken(token.get()); try { zmsClient.deleteApplication(tenant.get().getAthensDomain().get(), new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId(id.application().value())); @@ -331,13 +331,10 @@ public class ApplicationController { applicationPackage.zippedContent()); preparedApplication.activate(); - Deployment previousDeployment = application.deployments().get(zone); - Deployment newDeployment = previousDeployment; - if (previousDeployment == null) { - newDeployment = new Deployment(zone, revision, version, clock.instant(), new HashMap<>(), new HashMap<>()); - } else { - newDeployment = new Deployment(zone, revision, version, clock.instant(), previousDeployment.clusterUtils(), previousDeployment.clusterInfo()); - } + // Use info from previous deployments is available + Deployment previousDeployment = application.deployments().getOrDefault(zone, new Deployment(zone, revision, version, clock.instant())); + Deployment newDeployment = new Deployment(zone, revision, version, clock.instant(), + previousDeployment.clusterUtils(), previousDeployment.clusterInfo(), previousDeployment.metrics()); application = application.with(newDeployment); store(application, lock); @@ -493,7 +490,7 @@ public class ApplicationController { // NB: Next 2 lines should have been one transaction if (tenant.isAthensTenant()) - zmsClientFactory.createClientWithAuthorizedServiceToken(token.get()) + zmsClientFactory.createZmsClientWithAuthorizedServiceToken(token.get()) .deleteApplication(tenant.getAthensDomain().get(), new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId(id.application().value())); db.deleteApplication(id); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java index 4f5c2ead4da..e338bc17788 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.inject.Inject; import com.yahoo.component.AbstractComponent; import com.yahoo.component.Version; +import com.yahoo.component.Vtag; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; @@ -14,8 +15,6 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.identifiers.Property; import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.integration.MetricsService; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClient; import com.yahoo.vespa.hosted.controller.api.integration.chef.Chef; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerClient; import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService; @@ -26,6 +25,8 @@ import com.yahoo.vespa.hosted.controller.api.integration.routing.GlobalRoutingSe import com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus; import com.yahoo.vespa.hosted.controller.api.integration.routing.RoutingGenerator; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; import com.yahoo.vespa.hosted.controller.persistence.ControllerDb; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; @@ -40,7 +41,6 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Logger; /** @@ -64,15 +64,7 @@ public class Controller extends AbstractComponent { private final CuratorDb curator; private final ApplicationController applicationController; private final TenantController tenantController; - - /** - * Status of Vespa versions across the system. - * This is expensive to maintain so that is done periodically by a maintenance job - */ - private final AtomicReference<VersionStatus> versionStatus; - private final Clock clock; - private final RotationRepository rotationRepository; private final GitHub gitHub; private final EntityService entityService; @@ -81,7 +73,6 @@ public class Controller extends AbstractComponent { private final ConfigServerClient configServerClient; private final MetricsService metricsService; private final Chef chefClient; - private final Athens athens; private final ZmsClient zmsClient; /** @@ -96,11 +87,11 @@ public class Controller extends AbstractComponent { GlobalRoutingService globalRoutingService, ZoneRegistry zoneRegistry, ConfigServerClient configServerClient, MetricsService metricsService, NameService nameService, - RoutingGenerator routingGenerator, Chef chefClient, Athens athens) { + RoutingGenerator routingGenerator, Chef chefClient, AthenzClientFactory athenzClientFactory) { this(db, curator, rotationRepository, gitHub, jiraClient, entityService, globalRoutingService, zoneRegistry, configServerClient, metricsService, nameService, routingGenerator, chefClient, - Clock.systemUTC(), athens); + Clock.systemUTC(), athenzClientFactory); } public Controller(ControllerDb db, CuratorDb curator, RotationRepository rotationRepository, @@ -108,7 +99,8 @@ public class Controller extends AbstractComponent { GlobalRoutingService globalRoutingService, ZoneRegistry zoneRegistry, ConfigServerClient configServerClient, MetricsService metricsService, NameService nameService, - RoutingGenerator routingGenerator, Chef chefClient, Clock clock, Athens athens) { + RoutingGenerator routingGenerator, Chef chefClient, Clock clock, + AthenzClientFactory athenzClientFactory) { Objects.requireNonNull(db, "Controller db cannot be null"); Objects.requireNonNull(curator, "Curator cannot be null"); Objects.requireNonNull(rotationRepository, "Rotation repository cannot be null"); @@ -123,7 +115,7 @@ public class Controller extends AbstractComponent { Objects.requireNonNull(routingGenerator, "RoutingGenerator cannot be null"); Objects.requireNonNull(chefClient, "ChefClient cannot be null"); Objects.requireNonNull(clock, "Clock cannot be null"); - Objects.requireNonNull(athens, "Athens cannot be null"); + Objects.requireNonNull(athenzClientFactory, "Athens cannot be null"); this.rotationRepository = rotationRepository; this.curator = curator; @@ -135,13 +127,11 @@ public class Controller extends AbstractComponent { this.metricsService = metricsService; this.chefClient = chefClient; this.clock = clock; - this.athens = athens; - this.zmsClient = athens.zmsClientFactory().createClientWithServicePrincipal(); + this.zmsClient = athenzClientFactory.createZmsClientWithServicePrincipal(); - applicationController = new ApplicationController(this, db, curator, rotationRepository, athens.zmsClientFactory(), + applicationController = new ApplicationController(this, db, curator, rotationRepository, athenzClientFactory, nameService, configServerClient, routingGenerator, clock); - tenantController = new TenantController(this, db, curator, entityService); - versionStatus = new AtomicReference<>(VersionStatus.empty()); + tenantController = new TenantController(this, db, curator, entityService, athenzClientFactory); } /** Returns the instance controlling tenants */ @@ -154,10 +144,6 @@ public class Controller extends AbstractComponent { return zmsClient.getDomainList(prefix); } - public Athens athens() { - return athens; - } - /** * Fetch list of all active OpsDB properties. * @@ -191,11 +177,7 @@ public class Controller extends AbstractComponent { "sort:!('@timestamp',desc))"; URI kibanaPath = URI.create(kibanaQuery); - if (kibanaHost.isPresent()) { - return kibanaHost.get().resolve(kibanaPath); - } else { - return null; - } + return kibanaHost.map(uri -> uri.resolve(kibanaPath)).orElse(null); } public Set<URI> getRotationUris(ApplicationId id) { @@ -235,17 +217,19 @@ public class Controller extends AbstractComponent { ! newStatus.systemVersion().equals(currentStatus.systemVersion())) { log.info("Changing system version from " + printableVersion(currentStatus.systemVersion()) + " to " + printableVersion(newStatus.systemVersion())); - curator.writeSystemVersion(newStatus.systemVersion().get().versionNumber()); } - - this.versionStatus.set(newStatus); + curator.writeVersionStatus(newStatus); } /** Returns the latest known version status. Calling this is free but the status may be slightly out of date. */ - public VersionStatus versionStatus() { return versionStatus.get(); } + public VersionStatus versionStatus() { return curator.readVersionStatus(); } /** Returns the current system version: The controller should drive towards running all applications on this version */ - public Version systemVersion() { return curator.readSystemVersion(); } + public Version systemVersion() { + return versionStatus().systemVersion() + .map(VespaVersion::versionNumber) + .orElse(Vtag.currentVersion); + } public MetricsService metricsService() { return metricsService; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java index fafd0b04dd2..229c46f0a22 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/TenantController.java @@ -11,11 +11,12 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserGroup; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClient; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClientFactory; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsException; import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.AthenzUtils; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; import com.yahoo.vespa.hosted.controller.persistence.ControllerDb; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; import com.yahoo.vespa.hosted.controller.persistence.PersistenceException; @@ -47,14 +48,15 @@ public class TenantController { /** For working memory storage and sharing between controllers */ private final CuratorDb curator; - private final ZmsClientFactory zmsClientFactory; + private final AthenzClientFactory athenzClientFactory; private final EntityService entityService; - public TenantController(Controller controller, ControllerDb db, CuratorDb curator, EntityService entityService) { + public TenantController(Controller controller, ControllerDb db, CuratorDb curator, EntityService entityService, + AthenzClientFactory athenzClientFactory) { this.controller = controller; this.db = db; this.curator = curator; - this.zmsClientFactory = controller.athens().zmsClientFactory(); + this.athenzClientFactory = athenzClientFactory; this.entityService = entityService; } @@ -64,8 +66,8 @@ public class TenantController { public List<Tenant> asList(UserId user) { Set<UserGroup> userGroups = entityService.getUserGroups(user); - Set<AthensDomain> userDomains = new HashSet<>(zmsClientFactory.createClientWithServicePrincipal() - .getTenantDomainsForUser(controller.athens().principalFrom(user))); + Set<AthensDomain> userDomains = new HashSet<>(athenzClientFactory.createZtsClientWithServicePrincipal() + .getTenantDomainsForUser(AthenzUtils.createPrincipal(user))); Predicate<Tenant> hasUsersGroup = (tenant) -> tenant.getUserGroup().isPresent() && userGroups.contains(tenant.getUserGroup().get()); Predicate<Tenant> hasUsersDomain = (tenant) -> tenant.getAthensDomain().isPresent() && userDomains.contains(tenant.getAthensDomain().get()); @@ -108,7 +110,7 @@ public class TenantController { if (existingTenantWithDomain.isPresent()) throw new IllegalArgumentException("Could not create " + tenant + ": The Athens domain '" + domain + "' is already connected to " + existingTenantWithDomain.get()); - ZmsClient zmsClient = zmsClientFactory.createClientWithAuthorizedServiceToken(token.get()); + ZmsClient zmsClient = athenzClientFactory.createZmsClientWithAuthorizedServiceToken(token.get()); try { zmsClient.deleteTenant(domain); } catch (ZmsException ignored) { } zmsClient.createTenant(domain); } @@ -158,7 +160,7 @@ public class TenantController { throw new IllegalArgumentException("Could not set domain of " + updatedTenant + " to '" + newDomain + "':" + existingTenantWithNewDomain.get() + " already has this domain"); - ZmsClient zmsClient = zmsClientFactory.createClientWithAuthorizedServiceToken(token.get()); + ZmsClient zmsClient = athenzClientFactory.createZmsClientWithAuthorizedServiceToken(token.get()); zmsClient.createTenant(newDomain); List<Application> applications = controller.applications().asList(TenantName.from(existingTenant.getId().id())); applications.forEach(a -> zmsClient.addApplication(newDomain, new com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId(a.id().application().value()))); @@ -184,7 +186,8 @@ public class TenantController { throw new RuntimeException(e); } if (tenant.isAthensTenant()) - zmsClientFactory.createClientWithAuthorizedServiceToken(token.get()).deleteTenant(tenant.getAthensDomain().get()); + athenzClientFactory.createZmsClientWithAuthorizedServiceToken(token.get()) + .deleteTenant(tenant.getAthensDomain().get()); log.info("Deleted " + tenant); } } @@ -204,7 +207,7 @@ public class TenantController { throw new IllegalArgumentException("Could not migrate " + existing + " to " + tenantDomain + ": " + "Tenant is not currently an OpsDb tenant"); - ZmsClient zmsClient = zmsClientFactory.createClientWithAuthorizedServiceToken(nToken); + ZmsClient zmsClient = athenzClientFactory.createZmsClientWithAuthorizedServiceToken(nToken); zmsClient.createTenant(tenantDomain); List<Application> applications = controller.applications().asList(TenantName.from(existing.getId().id())); applications.forEach(a -> { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterCost.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterCost.java index 03d0cd28ca1..985d6173b29 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterCost.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterCost.java @@ -6,13 +6,14 @@ package com.yahoo.vespa.hosted.controller.application; * tco and waste for one cluster of one deployment. * * The target utilization is defined the following assumptions: - * 1. CPU contention starts to cause problems on 0.8 - * 2. Memory management starts to casue problems on 0.7 + * 1. CPU contention starts to cause problems at 0.8 + * 2. Memory management starts to cause problems at 0.7 * 3. Load is evenly divided between two deployments - each deployments can handle the other. * 4. Memory and disk are agnostic to query load. * 5. Peak utilization (daily variations) are twice the size of the average. * * With this in mind we get: + * * CPU: 0.8/2/2 = 0.2 * Mem: 0.7 * Disk: 0.7 @@ -40,16 +41,18 @@ public class ClusterCost { this.targetUtilization = new ClusterUtilization(0.7,0.2, 0.7, 0.3); this.resultUtilization = calculateResultUtilization(systemUtilization, targetUtilization); - this.tco = clusterInfo.getCost() * Math.min(1, this.resultUtilization.getMaxUtilization()); - this.waste = clusterInfo.getCost() - tco; + this.tco = clusterInfo.getHostnames().size() * clusterInfo.getFlavorCost(); + + double unusedUtilization = 1 - Math.min(1, resultUtilization.getMaxUtilization()); + this.waste = tco * unusedUtilization; } - /** @return TCO in dollars */ + /** @return The TCO in dollars for this cluster (node tco * nodes) */ public double getTco() { return tco; } - /** @return Waste in dollars */ + /** @return The amount of dollars spent for unused resources in this cluster */ public double getWaste() { return waste; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterInfo.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterInfo.java index cb39177c811..40fc57acdc8 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterInfo.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/ClusterInfo.java @@ -9,31 +9,62 @@ import java.util.List; * Value object of static cluster information, in particular the TCO * of the hardware used for this cluster. * + * Some duplication/flattening of flavor info is done to simplify client usage. + * * @author smorgrav */ public class ClusterInfo { private final String flavor; - private final int cost; + private final double flavorCPU; + private final double flavorMem; + private final double flavorDisk; + private final int flavorCost; private final ClusterSpec.Type clusterType; private final List<String> hostnames; - public ClusterInfo(String flavor, int cost, ClusterSpec.Type clusterType, List<String> hostnames) { + /** + * @param flavor The name of the flavor eg. 'C-2B/24/500' + * @param flavorCost The cost of one node in dollars + * @param flavorCPU The number of cpu cores granted + * @param flavorMem The memory granted in Gb + * @param flavorDisk The disk size granted in Gb + * @param clusterType The vespa cluster type e.g 'container' or 'content' + * @param hostnames All hostnames in this cluster + */ + public ClusterInfo(String flavor, int flavorCost, double flavorCPU, double flavorMem, + double flavorDisk, ClusterSpec.Type clusterType, List<String> hostnames) { this.flavor = flavor; - this.cost = cost; + this.flavorCost = flavorCost; + this.flavorCPU = flavorCPU; + this.flavorMem = flavorMem; + this.flavorDisk = flavorDisk; this.clusterType = clusterType; this.hostnames = hostnames; } + /** @return The name of the flavor eg. 'C-2B/24/500' */ public String getFlavor() { return flavor; } - public int getCost() { return cost; } + /** @return The cost of one node in dollars */ + public int getFlavorCost() { return flavorCost; } + + /** @return The disk size granted in Gb */ + public double getFlavorDisk() { return flavorDisk; } + + /** @return The number of cpu cores granted */ + public double getFlavorCPU() { return flavorCPU; } + + /** @return The memory granted in Gb */ + public double getFlavorMem() { return flavorMem; } + /** @return The vespa cluster type e.g 'container' or 'content' */ public ClusterSpec.Type getClusterType() { return clusterType; } + /** @return All hostnames in this cluster */ public List<String> getHostnames() { return hostnames; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java index 01219e940a3..05a7f9667ba 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Deployment.java @@ -14,6 +14,7 @@ import java.util.Objects; * A deployment of an application in a particular zone. * * @author bratseth + * @author smorgrav */ public class Deployment { @@ -23,24 +24,28 @@ public class Deployment { private final Instant deployTime; private final Map<Id, ClusterUtilization> clusterUtils; private final Map<Id, ClusterInfo> clusterInfo; + private final DeploymentMetrics metrics; public Deployment(Zone zone, ApplicationRevision revision, Version version, Instant deployTime) { - this(zone, revision, version, deployTime, new HashMap<>(), new HashMap<>()); + this(zone, revision, version, deployTime, new HashMap<>(), new HashMap<>(), new DeploymentMetrics()); } - public Deployment(Zone zone, ApplicationRevision revision, Version version, Instant deployTime, Map<Id, ClusterUtilization> clusterUtils, Map<Id, ClusterInfo> clusterInfo) { + public Deployment(Zone zone, ApplicationRevision revision, Version version, Instant deployTime, + Map<Id, ClusterUtilization> clusterUtils, Map<Id, ClusterInfo> clusterInfo, DeploymentMetrics metrics) { Objects.requireNonNull(zone, "zone cannot be null"); Objects.requireNonNull(revision, "revision cannot be null"); Objects.requireNonNull(version, "version cannot be null"); Objects.requireNonNull(deployTime, "deployTime cannot be null"); Objects.requireNonNull(clusterUtils, "clusterUtils cannot be null"); Objects.requireNonNull(clusterInfo, "clusterInfo cannot be null"); + Objects.requireNonNull(clusterInfo, "deployment metrics cannot be null"); this.zone = zone; this.revision = revision; this.version = version; this.deployTime = deployTime; this.clusterUtils = clusterUtils; this.clusterInfo = clusterInfo; + this.metrics = metrics; } /** Returns the zone this was deployed to */ @@ -64,11 +69,20 @@ public class Deployment { } public Deployment withClusterUtils(Map<Id, ClusterUtilization> clusterUtilization) { - return new Deployment(zone, revision, version, deployTime, clusterUtilization, clusterInfo); + return new Deployment(zone, revision, version, deployTime, clusterUtilization, clusterInfo, metrics); } public Deployment withClusterInfo(Map<Id, ClusterInfo> newClusterInfo) { - return new Deployment(zone, revision, version, deployTime, clusterUtils, newClusterInfo); + return new Deployment(zone, revision, version, deployTime, clusterUtils, newClusterInfo, metrics); + } + + public Deployment withMetrics(DeploymentMetrics metrics) { + return new Deployment(zone, revision, version, deployTime, clusterUtils, clusterInfo, metrics); + } + + /** @return Key metrics for the deployment (application level) like QPS and document count */ + public DeploymentMetrics metrics() { + return metrics; } /** diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentCost.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentCost.java index fce825bd99e..585690793bb 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentCost.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentCost.java @@ -23,12 +23,16 @@ public class DeploymentCost { double tco = 0; double util = 0; double waste = 0; + double maxWaste = -1; for (ClusterCost costCluster : clusterCosts.values()) { tco += costCluster.getTco(); waste += costCluster.getWaste(); - int nodesInCluster = costCluster.getClusterInfo().getHostnames().size(); - util = Math.max(util, nodesInCluster*costCluster.getResultUtilization().getMaxUtilization()); + + if (costCluster.getWaste() > maxWaste) { + util = costCluster.getResultUtilization().getMaxUtilization(); + maxWaste = costCluster.getWaste(); + } } this.utilization = util; @@ -40,14 +44,17 @@ public class DeploymentCost { return clusters; } + /** @return Total cost of ownership for the deployment (sum of all clusters) */ public double getTco() { return tco; } + /** @return The utilization of clusters that wastes most money in this deployment */ public double getUtilization() { return utilization; } + /** @return The amount of dollars spent and not utilized */ public double getWaste() { return waste; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java new file mode 100644 index 00000000000..6812e4cb468 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/DeploymentMetrics.java @@ -0,0 +1,50 @@ +package com.yahoo.vespa.hosted.controller.application;// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +/** + * @author smorgrav + */ +public class DeploymentMetrics { + + private final double queriesPerSecond; + private final double writesPerSecond; + private final double documentCount; + private final double queryLatencyMillis; + private final double writeLatencyMills; + + DeploymentMetrics() { + this.queriesPerSecond = 0; + this.writesPerSecond = 0; + this.documentCount = 0; + this.queryLatencyMillis = 0; + this.writeLatencyMills = 0; + } + + public DeploymentMetrics(double queriesPerSecond, double writesPerSecond, double documentCount, + double queryLatencyMillis, double writeLatencyMills) { + this.queriesPerSecond = queriesPerSecond; + this.writesPerSecond = writesPerSecond; + this.documentCount = documentCount; + this.queryLatencyMillis = queryLatencyMillis; + this.writeLatencyMills = writeLatencyMills; + } + + public double queriesPerSecond() { + return queriesPerSecond; + } + + public double writesPerSecond() { + return writesPerSecond; + } + + public double documentCount() { + return documentCount; + } + + public double queryLatencyMillis() { + return queryLatencyMillis; + } + + public double writeLatencyMillis() { + return writeLatencyMills; + } +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ApplicationAction.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ApplicationAction.java index cb5731164c8..8614414dc95 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ApplicationAction.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ApplicationAction.java @@ -1,8 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; /** - * @author mpolden + * @author bjorncs */ public enum ApplicationAction { deploy("deployer"), diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzClientFactory.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzClientFactory.java new file mode 100644 index 00000000000..b6a21f94f74 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzClientFactory.java @@ -0,0 +1,15 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz; + +/** + * @author bjorncs + */ +public interface AthenzClientFactory { + + ZmsClient createZmsClientWithServicePrincipal(); + + ZtsClient createZtsClientWithServicePrincipal(); + + ZmsClient createZmsClientWithAuthorizedServiceToken(NToken authorizedServiceToken); + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/AthensPrincipal.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzPrincipal.java index 58b878870b9..03d9f60c6b0 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/AthensPrincipal.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzPrincipal.java @@ -1,5 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; @@ -10,12 +10,12 @@ import java.util.Objects; /** * @author bjorncs */ -public class AthensPrincipal implements Principal { +public class AthenzPrincipal implements Principal { private final AthensDomain domain; private final UserId userId; - public AthensPrincipal(AthensDomain domain, UserId userId) { + public AthenzPrincipal(AthensDomain domain, UserId userId) { this.domain = domain; this.userId = userId; } @@ -33,15 +33,23 @@ public class AthensPrincipal implements Principal { } @Override + public String getName() { + return userId.id(); + } + + @Override public String toString() { - return toYRN(); + return "AthenzPrincipal{" + + "domain=" + domain + + ", userId=" + userId + + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - AthensPrincipal that = (AthensPrincipal) o; + AthenzPrincipal that = (AthenzPrincipal) o; return Objects.equals(domain, that.domain) && Objects.equals(userId, that.userId); } @@ -51,9 +59,4 @@ public class AthensPrincipal implements Principal { return Objects.hash(domain, userId); } - @Override - public String getName() { - return userId.id(); - } - } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/AthensPublicKey.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzPublicKey.java index 9bbb5f28d8f..01596ead0f4 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/AthensPublicKey.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzPublicKey.java @@ -1,5 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; import java.security.PublicKey; import java.util.Objects; @@ -7,11 +7,12 @@ import java.util.Objects; /** * @author bjorncs */ -public class AthensPublicKey { +public class AthenzPublicKey { + private final PublicKey publicKey; private final String keyId; - public AthensPublicKey(PublicKey publicKey, String keyId) { + public AthenzPublicKey(PublicKey publicKey, String keyId) { this.publicKey = publicKey; this.keyId = keyId; } @@ -28,7 +29,7 @@ public class AthensPublicKey { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - AthensPublicKey that = (AthensPublicKey) o; + AthenzPublicKey that = (AthenzPublicKey) o; return Objects.equals(publicKey, that.publicKey) && Objects.equals(keyId, that.keyId); } @@ -40,7 +41,7 @@ public class AthensPublicKey { @Override public String toString() { - return "AthensPublicKey{" + + return "AthenzPublicKey{" + "publicKey=" + publicKey + ", keyId='" + keyId + '\'' + '}'; diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/AthensService.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzService.java index 42af966be3d..780a14e4446 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/AthensService.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzService.java @@ -1,5 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; @@ -8,16 +8,20 @@ import java.util.Objects; /** * @author bjorncs */ -public class AthensService { +public class AthenzService { private final AthensDomain domain; private final String serviceName; - public AthensService(AthensDomain domain, String serviceName) { + public AthenzService(AthensDomain domain, String serviceName) { this.domain = domain; this.serviceName = serviceName; } + public AthenzService(String domain, String serviceName) { + this(new AthensDomain(domain), serviceName); + } + public String toFullServiceName() { return domain.id() + "." + serviceName; } @@ -34,7 +38,7 @@ public class AthensService { public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - AthensService that = (AthensService) o; + AthenzService that = (AthenzService) o; return Objects.equals(domain, that.domain) && Objects.equals(serviceName, that.serviceName); } @@ -46,6 +50,6 @@ public class AthensService { @Override public String toString() { - return String.format("AthensService(%s)", toFullServiceName()); + return String.format("AthenzService(%s)", toFullServiceName()); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzUtils.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzUtils.java new file mode 100644 index 00000000000..0c0f4729100 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/AthenzUtils.java @@ -0,0 +1,29 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz; + +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; +import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId; +import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; + +/** + * @author bjorncs + */ +public class AthenzUtils { + + private AthenzUtils() {} + + // TODO Change to "user" as primary user principal domain. Also support "yby" for a limited time as per recent Athenz changes + public static final AthensDomain USER_PRINCIPAL_DOMAIN = new AthensDomain("yby"); + public static final AthensDomain SCREWDRIVER_DOMAIN = new AthensDomain("cd.screwdriver.project"); + public static final AthenzService ZMS_ATHENZ_SERVICE = new AthenzService("sys.auth", "zms"); + + public static AthenzPrincipal createPrincipal(UserId userId) { + return new AthenzPrincipal(USER_PRINCIPAL_DOMAIN, userId); + } + + public static AthenzPrincipal createPrincipal(ScrewdriverId screwdriverId) { + return new AthenzPrincipal(SCREWDRIVER_DOMAIN, new UserId("sd" + screwdriverId.id())); + } + + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/InvalidTokenException.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/InvalidTokenException.java index 9c21d5814cb..e41bd8d4283 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/InvalidTokenException.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/InvalidTokenException.java @@ -1,5 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; /** * @author bjorncs diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/NToken.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/NToken.java new file mode 100644 index 00000000000..fec0523aaab --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/NToken.java @@ -0,0 +1,148 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz; + +import com.yahoo.athenz.auth.token.PrincipalToken; +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; +import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; + +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.Objects; +import java.util.Optional; +import java.util.OptionalLong; +import java.util.concurrent.TimeUnit; + +/** + * Represents an Athenz NToken (principal token) + * + * @author bjorncs + */ +// TODO Split out encoding/decoding of token into separate class. Move NToken to controller-api. +public class NToken { + + // Max allowed skew in token timestamp (only for creation, not expiry timestamp) + private static final int ALLOWED_TIMESTAMP_OFFSET = (int) TimeUnit.SECONDS.toSeconds(300); + + private final PrincipalToken token; + + // Note: PrincipalToken does not provide any way of constructing an instance from a unsigned token string + public NToken(String signedToken) { + try { + this.token = new PrincipalToken(signedToken); + if (this.token.getSignature() == null) { + throw new IllegalArgumentException("Signature missing (unsigned token)"); + } + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("Malformed NToken: " + e.getMessage()); + } + } + + public AthenzPrincipal getPrincipal() { + return new AthenzPrincipal(getDomain(), getUser()); + } + + public UserId getUser() { + return new UserId(token.getName()); + } + + public AthensDomain getDomain() { + return new AthensDomain(token.getDomain()); + } + + public String getToken() { + return token.getSignedToken(); + } + + public String getKeyId() { + return token.getKeyId(); + } + + public void validateSignatureAndExpiration(PublicKey publicKey) throws InvalidTokenException { + StringBuilder errorMessageBuilder = new StringBuilder(); + if (!token.validate(publicKey, ALLOWED_TIMESTAMP_OFFSET, true, errorMessageBuilder)) { + throw new InvalidTokenException("NToken is expired or has invalid signature: " + errorMessageBuilder.toString()); + } + } + + @Override + public String toString() { + return String.format("NToken(%s)", getToken()); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + NToken nToken = (NToken) o; + return Objects.equals(getToken(), nToken.getToken()); // PrincipalToken does not implement equals() + } + + @Override + public int hashCode() { + return Objects.hash(getToken()); // PrincipalToken does not implement hashcode() + } + + public static class Builder { + + private final String version; + private final AthenzPrincipal principal; + private final PrivateKey privateKey; + private final String keyId; + private Optional<String> salt = Optional.empty(); + private Optional<String> hostname = Optional.empty(); + private Optional<String> ip = Optional.empty(); + private OptionalLong issueTime = OptionalLong.empty(); + private OptionalLong expirationWindow = OptionalLong.empty(); + + /** + * NOTE: We must have some signature, else we might end up with problems later on as + * {@link PrincipalToken#PrincipalToken(String)} only accepts signed token + * (supplying an unsigned token to the constructor will result in inconsistent state) + */ + public Builder(String version, AthenzPrincipal principal, PrivateKey privateKey, String keyId) { + this.version = version; + this.principal = principal; + this.privateKey = privateKey; + this.keyId = keyId; + } + + public Builder salt(String salt) { + this.salt = Optional.of(salt); + return this; + } + + public Builder hostname(String hostname) { + this.hostname = Optional.of(hostname); + return this; + } + + public Builder ip(String ip) { + this.ip = Optional.of(ip); + return this; + } + + public Builder issueTime(long issueTime) { + this.issueTime = OptionalLong.of(issueTime); + return this; + } + + public Builder expirationWindow(long expirationWindow) { + this.expirationWindow = OptionalLong.of(expirationWindow); + return this; + } + + public NToken build() { + PrincipalToken token = new PrincipalToken.Builder(version, principal.getDomain().id(), principal.getName()) + .keyId(this.keyId) + .salt(this.salt.orElse(null)) + .host(this.hostname.orElse(null)) + .ip(this.ip.orElse(null)) + .issueTime(this.issueTime.orElse(0)) + .expirationWindow(this.expirationWindow.orElse(0)) + .build(); + token.sign(this.privateKey); + return new NToken(token.getSignedToken()); + } + } + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsClient.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsClient.java index 7ff54957e16..274a8fdf438 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsClient.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsClient.java @@ -1,5 +1,5 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; import com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; @@ -10,6 +10,7 @@ import java.util.List; * @author bjorncs */ public interface ZmsClient { + void createTenant(AthensDomain tenantDomain); void deleteTenant(AthensDomain tenantDomain); @@ -18,18 +19,17 @@ public interface ZmsClient { void deleteApplication(AthensDomain tenantDomain, ApplicationId applicationName); - boolean hasApplicationAccess(AthensPrincipal principal, ApplicationAction action, AthensDomain tenantDomain, ApplicationId applicationName); + boolean hasApplicationAccess(AthenzPrincipal principal, ApplicationAction action, AthensDomain tenantDomain, ApplicationId applicationName); - boolean hasTenantAdminAccess(AthensPrincipal principal, AthensDomain tenantDomain); + boolean hasTenantAdminAccess(AthenzPrincipal principal, AthensDomain tenantDomain); // Used before vespa tenancy is established for the domain. - boolean isDomainAdmin(AthensPrincipal principal, AthensDomain domain); + boolean isDomainAdmin(AthenzPrincipal principal, AthensDomain domain); List<AthensDomain> getDomainList(String prefix); - List<AthensDomain> getTenantDomainsForUser(AthensPrincipal principal); + AthenzPublicKey getPublicKey(AthenzService service, String keyId); - AthensPublicKey getPublicKey(AthensService service, String keyId); + List<AthenzPublicKey> getPublicKeys(AthenzService service); - List<AthensPublicKey> getPublicKeys(AthensService service); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsException.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsException.java index ed5b2daca86..59548339d11 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/ZmsException.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsException.java @@ -1,5 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens; +package com.yahoo.vespa.hosted.controller.athenz; + +import com.yahoo.athenz.zms.ZMSClientException; /** * @author bjorncs @@ -8,14 +10,11 @@ public class ZmsException extends RuntimeException { private final int code; - public ZmsException(Throwable t, int code) { - super(t.getMessage(), t); - this.code = code; + public ZmsException(ZMSClientException e) { + super(e.getMessage(), e); + this.code = e.getCode(); } - public ZmsException(int code) { - this.code = code; - } public int getCode() { return code; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsKeystore.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsKeystore.java new file mode 100644 index 00000000000..93fed95c768 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZmsKeystore.java @@ -0,0 +1,16 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz; + +import java.security.PublicKey; +import java.util.Optional; + +/** + * @author bjorncs + */ +public interface ZmsKeystore { + + Optional<PublicKey> getPublicKey(AthenzService service, String keyId); + + default void preloadKeys(AthenzService service) { /* Default implementation is noop */ } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZtsClient.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZtsClient.java new file mode 100644 index 00000000000..a44f1af0d2a --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZtsClient.java @@ -0,0 +1,15 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz; + +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; + +import java.util.List; + +/** + * @author bjorncs + */ +public interface ZtsClient { + + List<AthensDomain> getTenantDomainsForUser(AthenzPrincipal principal); + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZtsException.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZtsException.java new file mode 100644 index 00000000000..cb0b21ba459 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/ZtsException.java @@ -0,0 +1,22 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz; + +import com.yahoo.athenz.zts.ZTSClientException; + +/** + * @author bjorncs + */ +public class ZtsException extends RuntimeException { + + private final int code; + + public ZtsException(ZTSClientException e) { + super(e.getMessage(), e); + this.code = e.getCode(); + } + + + public int getCode() { + return code; + } +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzPrincipalFilter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzPrincipalFilter.java new file mode 100644 index 00000000000..de771ff2e17 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzPrincipalFilter.java @@ -0,0 +1,71 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.filter; + +import com.google.inject.Inject; +import com.yahoo.jdisc.Response; +import com.yahoo.jdisc.handler.FastContentWriter; +import com.yahoo.jdisc.handler.ResponseDispatch; +import com.yahoo.jdisc.handler.ResponseHandler; +import com.yahoo.jdisc.http.filter.DiscFilterRequest; +import com.yahoo.jdisc.http.filter.SecurityRequestFilter; +import com.yahoo.jdisc.http.server.jetty.ErrorResponseContentCreator; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.InvalidTokenException; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsKeystore; +import com.yahoo.vespa.hosted.controller.athenz.config.AthenzConfig; + +import java.util.Optional; +import java.util.concurrent.Executor; + +/** + * Performs authentication by validating the principal token (NToken) header. + * + * @author bjorncs + */ +public class AthenzPrincipalFilter implements SecurityRequestFilter { + + private final ErrorResponseContentCreator responseCreator = new ErrorResponseContentCreator(); + private final NTokenValidator validator; + private final String principalTokenHeader; + + /** + * @param executor to preload the ZMS public keys with + */ + @Inject + public AthenzPrincipalFilter(ZmsKeystore zmsKeystore, Executor executor, AthenzConfig config) { + this(new NTokenValidator(zmsKeystore), executor, config.principalHeaderName()); + } + + AthenzPrincipalFilter(NTokenValidator validator, Executor executor, String principalTokenHeader) { + this.validator = validator; + this.principalTokenHeader = principalTokenHeader; + executor.execute(validator::preloadPublicKeys); + } + + @Override + public void filter(DiscFilterRequest request, ResponseHandler responseHandler) { + String rawToken = request.getHeader(principalTokenHeader); + if (rawToken == null || rawToken.isEmpty()) { + sendUnauthorized(request, responseHandler, "NToken is missing"); + return; + } + try { + AthenzPrincipal principal = validator.validate(new NToken(rawToken)); + request.setUserPrincipal(principal); + request.setRemoteUser(principal.getName()); + } catch (InvalidTokenException e) { + sendUnauthorized(request, responseHandler, e.getMessage()); + } + } + + private void sendUnauthorized(DiscFilterRequest request, ResponseHandler responseHandler, String message) { + try (FastContentWriter writer = ResponseDispatch.newInstance(Response.Status.UNAUTHORIZED) + .connectFastWriter(responseHandler)) { + writer.write( + responseCreator.createErrorContent( + request.getRequestURI(), Response.Status.UNAUTHORIZED, Optional.of(message))); + } + } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/filter/NTokenValidator.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/filter/NTokenValidator.java new file mode 100644 index 00000000000..f43d2d8e80e --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/filter/NTokenValidator.java @@ -0,0 +1,67 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.filter; + +import com.yahoo.log.LogLevel; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.InvalidTokenException; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsKeystore; + +import java.security.PublicKey; +import java.util.Optional; +import java.util.logging.Logger; + +import static com.yahoo.vespa.hosted.controller.athenz.AthenzUtils.ZMS_ATHENZ_SERVICE; + +/** + * Validates the content of an NToken: + * 1) Verifies that the token is signed by the sys.auth.zms service (by validating the signature) + * 2) Verifies that the token is not expired + * + * @author bjorncs + */ +class NTokenValidator { + + private static final Logger log = Logger.getLogger(NTokenValidator.class.getName()); + + private final ZmsKeystore keystore; + + NTokenValidator(ZmsKeystore keystore) { + this.keystore = keystore; + } + + void preloadPublicKeys() { + keystore.preloadKeys(ZMS_ATHENZ_SERVICE); + } + + AthenzPrincipal validate(NToken token) throws InvalidTokenException { + PublicKey zmsPublicKey = getPublicKey(token.getKeyId()) + .orElseThrow(() -> new InvalidTokenException("NToken has an unknown keyId")); + validateSignatureAndExpiration(token, zmsPublicKey); + return token.getPrincipal(); + } + + private Optional<PublicKey> getPublicKey(String keyId) throws InvalidTokenException { + try { + return keystore.getPublicKey(ZMS_ATHENZ_SERVICE, keyId); + } catch (Exception e) { + logDebug(e.getMessage()); + throw new InvalidTokenException("Failed to retrieve public key"); + } + } + + private static void validateSignatureAndExpiration(NToken token, PublicKey zmsPublicKey) throws InvalidTokenException { + try { + token.validateSignatureAndExpiration(zmsPublicKey); + } catch (InvalidTokenException e) { + // The underlying error message is not user friendly + logDebug(e.getMessage()); + throw new InvalidTokenException("NToken is expired or has invalid signature"); + } + } + + private static void logDebug(String message) { + log.log(LogLevel.DEBUG, "Failed to validate NToken: " + message); + } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/AthenzClientFactoryImpl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/AthenzClientFactoryImpl.java new file mode 100644 index 00000000000..292841d89f3 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/AthenzClientFactoryImpl.java @@ -0,0 +1,101 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.impl; + +import com.google.inject.Inject; +import com.yahoo.athenz.auth.Principal; +import com.yahoo.athenz.auth.impl.PrincipalAuthority; +import com.yahoo.athenz.auth.impl.SimplePrincipal; +import com.yahoo.athenz.auth.impl.SimpleServiceIdentityProvider; +import com.yahoo.athenz.auth.token.PrincipalToken; +import com.yahoo.athenz.auth.util.Crypto; +import com.yahoo.athenz.zms.ZMSClient; +import com.yahoo.athenz.zts.ZTSClient; +import com.yahoo.vespa.hosted.controller.api.integration.security.KeyService; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; +import com.yahoo.vespa.hosted.controller.athenz.ZtsClient; +import com.yahoo.vespa.hosted.controller.athenz.config.AthenzConfig; + +import java.security.PrivateKey; +import java.util.concurrent.TimeUnit; + +/** + * @author bjorncs + */ +public class AthenzClientFactoryImpl implements AthenzClientFactory { + + private final KeyService secretService; + private final AthenzConfig config; + private final AthenzPrincipalAuthority athenzPrincipalAuthority; + + @Inject + public AthenzClientFactoryImpl(KeyService secretService, AthenzConfig config) { + this.secretService = secretService; + this.config = config; + this.athenzPrincipalAuthority = new AthenzPrincipalAuthority(config.principalHeaderName()); + } + + /** + * @return A ZMS client instance with the service identity as principal. + */ + @Override + public ZmsClient createZmsClientWithServicePrincipal() { + return new ZmsClientImpl(new ZMSClient(config.zmsUrl(), createServicePrincipal()), config); + } + + /** + * @return A ZTS client instance with the service identity as principal. + */ + @Override + public ZtsClient createZtsClientWithServicePrincipal() { + return new ZtsClientImpl(new ZTSClient(config.ztsUrl(), createServicePrincipal()), config); + } + + /** + * @return A ZMS client created with a dual principal representing both the tenant admin and the service identity. + */ + @Override + public ZmsClient createZmsClientWithAuthorizedServiceToken(NToken authorizedServiceToken) { + PrincipalToken signedToken = new PrincipalToken(authorizedServiceToken.getToken()); + AthenzConfig.Service service = config.service(); + signedToken.signForAuthorizedService( + config.domain() + "." + service.name(), service.publicKeyId(), getServicePrivateKey()); + + Principal dualPrincipal = SimplePrincipal.create( + "yby", signedToken.getName(), signedToken.getSignedToken(), athenzPrincipalAuthority); + return new ZmsClientImpl(new ZMSClient(config.zmsUrl(), dualPrincipal), config); + + } + + private Principal createServicePrincipal() { + AthenzConfig.Service service = config.service(); + // TODO bjorncs: Cache principal token + SimpleServiceIdentityProvider identityProvider = + new SimpleServiceIdentityProvider( + athenzPrincipalAuthority, config.domain(), service.name(), + getServicePrivateKey(), service.publicKeyId(), /*tokenTimeout*/TimeUnit.HOURS.toSeconds(1)); + return identityProvider.getIdentity(config.domain(), service.name()); + } + + private PrivateKey getServicePrivateKey() { + AthenzConfig.Service service = config.service(); + String privateKey = secretService.getSecret(service.privateKeySecretName(), service.privateKeyVersion()).trim(); + return Crypto.loadPrivateKey(privateKey); + } + + private static class AthenzPrincipalAuthority extends PrincipalAuthority { + private final String principalHeaderName; + + public AthenzPrincipalAuthority(String principalHeaderName) { + this.principalHeaderName = principalHeaderName; + } + + @Override + public String getHeader() { + return principalHeaderName; + } + } + + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZmsClientImpl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZmsClientImpl.java new file mode 100644 index 00000000000..48bd8af7dfe --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZmsClientImpl.java @@ -0,0 +1,217 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.impl; + +import com.yahoo.athenz.auth.util.Crypto; +import com.yahoo.athenz.zms.DomainList; +import com.yahoo.athenz.zms.ProviderResourceGroupRoles; +import com.yahoo.athenz.zms.PublicKeyEntry; +import com.yahoo.athenz.zms.ServiceIdentity; +import com.yahoo.athenz.zms.Tenancy; +import com.yahoo.athenz.zms.TenantRoleAction; +import com.yahoo.athenz.zms.ZMSClient; +import com.yahoo.athenz.zms.ZMSClientException; +import com.yahoo.log.LogLevel; +import com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId; +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; +import com.yahoo.vespa.hosted.controller.athenz.ApplicationAction; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPublicKey; +import com.yahoo.vespa.hosted.controller.athenz.AthenzService; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; +import com.yahoo.vespa.hosted.controller.athenz.config.AthenzConfig; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; +import java.util.logging.Logger; + +import static java.util.stream.Collectors.toList; + +/** + * @author bjorncs + */ +public class ZmsClientImpl implements ZmsClient { + + private static final Logger log = Logger.getLogger(ZmsClientImpl.class.getName()); + private final ZMSClient zmsClient; + private final AthenzService service; + + ZmsClientImpl(ZMSClient zmsClient, AthenzConfig config) { + this.zmsClient = zmsClient; + this.service = new AthenzService(config.domain(), config.service().name()); + } + + @Override + public void createTenant(AthensDomain tenantDomain) { + log("putTenancy(tenantDomain=%s, service=%s)", tenantDomain, service); + runOrThrow(() -> { + Tenancy tenancy = new Tenancy() + .setDomain(tenantDomain.id()) + .setService(service.toFullServiceName()) + .setResourceGroups(Collections.emptyList()); + zmsClient.putTenancy(tenantDomain.id(), service.toFullServiceName(), /*auditref*/null, tenancy); + }); + } + + @Override + public void deleteTenant(AthensDomain tenantDomain) { + log("deleteTenancy(tenantDomain=%s, service=%s)", tenantDomain, service); + runOrThrow(() -> zmsClient.deleteTenancy(tenantDomain.id(), service.toFullServiceName(), /*auditref*/null)); + } + + @Override + public void addApplication(AthensDomain tenantDomain, ApplicationId applicationName) { + List<TenantRoleAction> tenantRoleActions = createTenantRoleActions(); + log("putProviderResourceGroupRoles(" + + "tenantDomain=%s, providerDomain=%s, service=%s, resourceGroup=%s, roleActions=%s)", + tenantDomain, service.getDomain().getName(), service.getServiceName(), applicationName, tenantRoleActions); + runOrThrow(() -> { + ProviderResourceGroupRoles resourceGroupRoles = new ProviderResourceGroupRoles() + .setDomain(service.getDomain().getName()) + .setService(service.getServiceName()) + .setTenant(tenantDomain.id()) + .setResourceGroup(applicationName.id()) + .setRoles(tenantRoleActions); + zmsClient.putProviderResourceGroupRoles( + tenantDomain.id(), service.getDomain().getName(), service.getServiceName(), + applicationName.id(), /*auditref*/null, resourceGroupRoles); + }); + } + + @Override + public void deleteApplication(AthensDomain tenantDomain, ApplicationId applicationName) { + log("deleteProviderResourceGroupRoles(tenantDomain=%s, providerDomain=%s, service=%s, resourceGroup=%s)", + tenantDomain, service.getDomain().getName(), service.getServiceName(), applicationName); + runOrThrow(() -> { + zmsClient.deleteProviderResourceGroupRoles( + tenantDomain.id(), service.getDomain().getName(), service.getServiceName(), applicationName.id(), /*auditref*/null); + }); + } + + @Override + public boolean hasApplicationAccess( + AthenzPrincipal principal, ApplicationAction action, AthensDomain tenantDomain, ApplicationId applicationName) { + return hasAccess( + action.name(), applicationResourceString(tenantDomain, applicationName), principal); + } + + @Override + public boolean hasTenantAdminAccess(AthenzPrincipal principal, AthensDomain tenantDomain) { + return hasAccess(TenantAction._modify_.name(), tenantResourceString(tenantDomain), principal); + } + + /** + * Used when creating tenancies. As there are no tenancy policies at this point, + * we cannot use {@link #hasTenantAdminAccess(AthenzPrincipal, AthensDomain)} + */ + @Override + public boolean isDomainAdmin(AthenzPrincipal principal, AthensDomain domain) { + log("getMembership(domain=%s, role=%s, principal=%s)", domain, "admin", principal); + return getOrThrow( + () -> zmsClient.getMembership(domain.id(), "admin", principal.toYRN()).getIsMember()); + } + + @Override + public List<AthensDomain> getDomainList(String prefix) { + log.log(LogLevel.DEBUG, String.format("getDomainList(prefix=%s)", prefix)); + return getOrThrow( + () -> { + DomainList domainList = zmsClient.getDomainList( + /*limit*/null, /*skip*/null, prefix, /*depth*/null, /*domain*/null, + /*productId*/ null, /*modifiedSince*/null); + return toAthensDomains(domainList.getNames()); + }); + } + + @Override + public AthenzPublicKey getPublicKey(AthenzService service, String keyId) { + log("getPublicKeyEntry(domain=%s, service=%s, keyId=%s)", service.getDomain().id(), service.getServiceName(), keyId); + return getOrThrow(() -> { + PublicKeyEntry entry = zmsClient.getPublicKeyEntry(service.getDomain().id(), service.getServiceName(), keyId); + return fromYbase64EncodedKey(entry.getKey(), keyId); + }); + } + + @Override + public List<AthenzPublicKey> getPublicKeys(AthenzService service) { + log("getServiceIdentity(domain=%s, service=%s)", service.getDomain().id(), service.getServiceName()); + return getOrThrow(() -> { + ServiceIdentity serviceIdentity = zmsClient.getServiceIdentity(service.getDomain().id(), service.getServiceName()); + return toAthensPublicKeys(serviceIdentity.getPublicKeys()); + }); + } + + private static AthenzPublicKey fromYbase64EncodedKey(String encodedKey, String keyId) { + return new AthenzPublicKey(Crypto.loadPublicKey(Crypto.ybase64DecodeString(encodedKey)), keyId); + } + + private static List<TenantRoleAction> createTenantRoleActions() { + return Arrays.stream(ApplicationAction.values()) + .map(action -> new TenantRoleAction().setAction(action.name()).setRole(action.roleName)) + .collect(toList()); + } + + private static List<AthensDomain> toAthensDomains(List<String> domains) { + return domains.stream().map(AthensDomain::new).collect(toList()); + } + + private static List<AthenzPublicKey> toAthensPublicKeys(List<PublicKeyEntry> publicKeys) { + return publicKeys.stream() + .map(entry -> fromYbase64EncodedKey(entry.getKey(), entry.getId())) + .collect(toList()); + } + + private boolean hasAccess(String action, String resource, AthenzPrincipal principal) { + log("getAccess(action=%s, resource=%s, principal=%s)", action, resource, principal); + return getOrThrow( + () -> zmsClient.getAccess(action, resource, /*trustDomain*/null, principal.toYRN()).getGranted()); + } + + private static void log(String format, Object... args) { + log.log(LogLevel.DEBUG, String.format(format, args)); + } + + private static void runOrThrow(Runnable wrappedCode) { + try { + wrappedCode.run(); + } catch (ZMSClientException e) { + logWarning(e); + throw new ZmsException(e); + } + } + + private static <T> T getOrThrow(Supplier<T> wrappedCode) { + try { + return wrappedCode.get(); + } catch (ZMSClientException e) { + logWarning(e); + throw new ZmsException(e); + } + } + + private static void logWarning(ZMSClientException e) { + log.warning("Error from Athens: " + e.getMessage()); + } + + private String resourceStringPrefix(AthensDomain tenantDomain) { + return String.format("%s:service.%s.tenant.%s", + service.getDomain().getName(), service.getServiceName(), tenantDomain.id()); + } + + private String tenantResourceString(AthensDomain tenantDomain) { + return resourceStringPrefix(tenantDomain) + ".wildcard"; + } + + private String applicationResourceString(AthensDomain tenantDomain, ApplicationId applicationName) { + return resourceStringPrefix(tenantDomain) + "." + "res_group" + "." + applicationName.id() + ".wildcard"; + } + + private enum TenantAction { + // This is meant to match only the '*' action of the 'admin' role. + // If needed, we can replace it with 'create', 'delete' etc. later. + _modify_ + } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZmsKeystoreImpl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZmsKeystoreImpl.java new file mode 100644 index 00000000000..67f22d42f92 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZmsKeystoreImpl.java @@ -0,0 +1,118 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.impl; + +import com.yahoo.log.LogLevel; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPublicKey; +import com.yahoo.vespa.hosted.controller.athenz.AthenzService; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; +import com.yahoo.vespa.hosted.controller.athenz.ZmsKeystore; + +import java.security.PublicKey; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import java.util.logging.Logger; + +/** + * Downloads and caches public keys for Athens services. + * + * @author bjorncs + */ +public class ZmsKeystoreImpl implements ZmsKeystore { + private static final Logger log = Logger.getLogger(ZmsKeystoreImpl.class.getName()); + + private final Map<FullKeyId, PublicKey> cachedKeys = new ConcurrentHashMap<>(); + private final AthenzClientFactory athenzClientFactory; + + ZmsKeystoreImpl(AthenzClientFactory factory) { + this.athenzClientFactory = factory; + } + + @Override + public Optional<PublicKey> getPublicKey(AthenzService service, String keyId) { + FullKeyId fullKeyId = new FullKeyId(service, keyId); + PublicKey cachedKey = cachedKeys.get(fullKeyId); + if (cachedKey != null) { + return Optional.of(cachedKey); + } + Optional<PublicKey> downloadedKey = downloadPublicKey(fullKeyId); + downloadedKey.ifPresent(key -> { + log.log(LogLevel.INFO, "Adding key " + fullKeyId + " to the cache"); + cachedKeys.put(fullKeyId, key); + }); + return downloadedKey; + } + + @Override + public void preloadKeys(AthenzService service) { + try { + log.log(LogLevel.INFO, "Downloading keys for " + service); + List<AthenzPublicKey> publicKeys = athenzClientFactory.createZmsClientWithServicePrincipal() + .getPublicKeys(service); + for (AthenzPublicKey publicKey : publicKeys) { + FullKeyId fullKeyId = new FullKeyId(service, publicKey.getKeyId()); + log.log(LogLevel.DEBUG, "Adding key " + fullKeyId + " to the cache"); + cachedKeys.put(fullKeyId, publicKey.getPublicKey()); + } + log.log(LogLevel.INFO, "Successfully downloaded keys for " + service); + } catch (ZmsException e) { + log.log(LogLevel.WARNING, "Failed to download keys for " + service + ": " + e.getMessage()); + } + } + + private Optional<PublicKey> downloadPublicKey(FullKeyId fullKeyId) { + try { + log.log(LogLevel.INFO, "Downloading key " + fullKeyId); + AthenzPublicKey publicKey = athenzClientFactory.createZmsClientWithServicePrincipal() + .getPublicKey(fullKeyId.service, fullKeyId.keyId); + return Optional.of(publicKey.getPublicKey()); + } catch (ZmsException e) { + if (e.getCode() == 404) { // Key does not exist + log.log(LogLevel.INFO, "Key " + fullKeyId + " not found"); + return Optional.empty(); + } + String msg = String.format("Unable to retrieve public key from Athens (%s): %s", fullKeyId, e.getMessage()); + throw createException(msg, e); + } + } + + private static RuntimeException createException(String message, Exception cause) { + log.log(LogLevel.ERROR, message); + return new RuntimeException(message, cause); + } + + private static class FullKeyId { + private final AthenzService service; + private final String keyId; + + private FullKeyId(AthenzService service, String keyId) { + this.service = service; + this.keyId = keyId; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + FullKeyId fullKeyId1 = (FullKeyId) o; + return Objects.equals(service, fullKeyId1.service) && + Objects.equals(keyId, fullKeyId1.keyId); + } + + @Override + public int hashCode() { + return Objects.hash(service, keyId); + } + + @Override + public String toString() { + return "FullKeyId{" + + "service=" + service + + ", keyId='" + keyId + '\'' + + '}'; + } + } +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZtsClientImpl.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZtsClientImpl.java new file mode 100644 index 00000000000..d964cc967e8 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/impl/ZtsClientImpl.java @@ -0,0 +1,51 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.impl; + +import com.yahoo.athenz.zts.TenantDomains; +import com.yahoo.athenz.zts.ZTSClient; +import com.yahoo.athenz.zts.ZTSClientException; +import com.yahoo.log.LogLevel; +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzService; +import com.yahoo.vespa.hosted.controller.athenz.ZtsClient; +import com.yahoo.vespa.hosted.controller.athenz.ZtsException; +import com.yahoo.vespa.hosted.controller.athenz.config.AthenzConfig; + +import java.util.List; +import java.util.logging.Logger; + +import static java.util.stream.Collectors.toList; + +/** + * @author bjorncs + */ +public class ZtsClientImpl implements ZtsClient { + + private static final Logger log = Logger.getLogger(ZtsClientImpl.class.getName()); + + private final ZTSClient ztsClient; + private final AthenzService service; + + public ZtsClientImpl(ZTSClient ztsClient, AthenzConfig config) { + this.ztsClient = ztsClient; + this.service = new AthenzService(config.domain(), config.service().name()); + } + + @Override + public List<AthensDomain> getTenantDomainsForUser(AthenzPrincipal principal) { + log.log(LogLevel.DEBUG, String.format( + "getTenantDomains(domain=%s, username=%s, rolename=admin, service=%s)", + service.getDomain().getName(), principal, service.getServiceName())); + try { + TenantDomains domains = ztsClient.getTenantDomains( + service.getDomain().getName(), principal.toYRN(), "admin", service.getServiceName()); + return domains.getTenantDomainNames().stream() + .map(AthensDomain::new) + .collect(toList()); + } catch (ZTSClientException e) { + throw new ZtsException(e); + } + } + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/AthensDbMock.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/AthensDbMock.java index 8a02d0dcff5..55fe435c9be 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/AthensDbMock.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/AthensDbMock.java @@ -1,10 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens.mock; +package com.yahoo.vespa.hosted.controller.athenz.mock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ApplicationAction; import com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.ApplicationAction; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; import java.util.HashMap; import java.util.HashSet; @@ -26,8 +26,8 @@ public class AthensDbMock { public static class Domain { public final AthensDomain name; - public final Set<AthensPrincipal> admins = new HashSet<>(); - public final Set<AthensPrincipal> tenantAdmins = new HashSet<>(); + public final Set<AthenzPrincipal> admins = new HashSet<>(); + public final Set<AthenzPrincipal> tenantAdmins = new HashSet<>(); public final Map<ApplicationId, Application> applications = new HashMap<>(); public boolean isVespaTenant = false; @@ -35,12 +35,12 @@ public class AthensDbMock { this.name = name; } - public Domain admin(AthensPrincipal user) { + public Domain admin(AthenzPrincipal user) { admins.add(user); return this; } - public Domain tenantAdmin(AthensPrincipal user) { + public Domain tenantAdmin(AthenzPrincipal user) { tenantAdmins.add(user); return this; } @@ -56,7 +56,7 @@ public class AthensDbMock { public static class Application { - public final Map<ApplicationAction, Set<AthensPrincipal>> acl = new HashMap<>(); + public final Map<ApplicationAction, Set<AthenzPrincipal>> acl = new HashMap<>(); public Application() { acl.put(ApplicationAction.deploy, new HashSet<>()); @@ -64,7 +64,7 @@ public class AthensDbMock { acl.put(ApplicationAction.write, new HashSet<>()); } - public Application addRoleMember(ApplicationAction action, AthensPrincipal user) { + public Application addRoleMember(ApplicationAction action, AthenzPrincipal user) { acl.get(action).add(user); return this; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/AthenzClientFactoryMock.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/AthenzClientFactoryMock.java new file mode 100644 index 00000000000..92c7ba5a007 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/AthenzClientFactoryMock.java @@ -0,0 +1,56 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.mock; + +import com.yahoo.component.AbstractComponent; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.ZtsClient; + +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * @author bjorncs + */ +public class AthenzClientFactoryMock extends AbstractComponent implements AthenzClientFactory { + + private static final Logger log = Logger.getLogger(AthenzClientFactoryMock.class.getName()); + + private final AthensDbMock athens; + + public AthenzClientFactoryMock() { + this(new AthensDbMock()); + } + + public AthenzClientFactoryMock(AthensDbMock athens) { + this.athens = athens; + } + + public AthensDbMock getSetup() { + return athens; + } + + @Override + public ZmsClient createZmsClientWithServicePrincipal() { + log("createZmsClientWithServicePrincipal()"); + return new ZmsClientMock(athens); + } + + @Override + public ZtsClient createZtsClientWithServicePrincipal() { + log("createZtsClientWithServicePrincipal()"); + return new ZtsClientMock(athens); + } + + @Override + public ZmsClient createZmsClientWithAuthorizedServiceToken(NToken authorizedServiceToken) { + log("createZmsClientWithAuthorizedServiceToken(authorizedServiceToken='%s')", authorizedServiceToken); + return new ZmsClientMock(athens); + } + + private static void log(String format, Object... args) { + log.log(Level.INFO, String.format(format, args)); + } + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/ZmsClientMock.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/ZmsClientMock.java index 97f391f792d..bba7d410bf7 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/athens/mock/ZmsClientMock.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/ZmsClientMock.java @@ -1,14 +1,15 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.vespa.hosted.controller.api.integration.athens.mock; +package com.yahoo.vespa.hosted.controller.athenz.mock; +import com.yahoo.athenz.zms.ZMSClientException; import com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ApplicationAction; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPublicKey; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensService; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClient; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsException; +import com.yahoo.vespa.hosted.controller.athenz.ApplicationAction; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPublicKey; +import com.yahoo.vespa.hosted.controller.athenz.AthenzService; +import com.yahoo.vespa.hosted.controller.athenz.ZmsClient; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; import java.util.ArrayList; import java.util.List; @@ -16,8 +17,6 @@ import java.util.Optional; import java.util.logging.Level; import java.util.logging.Logger; -import static java.util.stream.Collectors.toList; - /** * @author bjorncs */ @@ -62,7 +61,7 @@ public class ZmsClientMock implements ZmsClient { } @Override - public boolean hasApplicationAccess(AthensPrincipal principal, ApplicationAction action, AthensDomain tenantDomain, ApplicationId applicationName) { + public boolean hasApplicationAccess(AthenzPrincipal principal, ApplicationAction action, AthensDomain tenantDomain, ApplicationId applicationName) { log("hasApplicationAccess(principal='%s', action='%s', tenantDomain='%s', applicationName='%s')", principal, action, tenantDomain, applicationName); AthensDbMock.Domain domain = getDomainOrThrow(tenantDomain, true); @@ -74,14 +73,14 @@ public class ZmsClientMock implements ZmsClient { } @Override - public boolean hasTenantAdminAccess(AthensPrincipal principal, AthensDomain tenantDomain) { + public boolean hasTenantAdminAccess(AthenzPrincipal principal, AthensDomain tenantDomain) { log("hasTenantAdminAccess(principal='%s', tenantDomain='%s')", principal, tenantDomain); return isDomainAdmin(principal, tenantDomain) || getDomainOrThrow(tenantDomain, true).tenantAdmins.contains(principal); } @Override - public boolean isDomainAdmin(AthensPrincipal principal, AthensDomain domain) { + public boolean isDomainAdmin(AthenzPrincipal principal, AthensDomain domain) { log("isDomainAdmin(principal='%s', domain='%s')", principal, domain); return getDomainOrThrow(domain, false).admins.contains(principal); } @@ -93,21 +92,12 @@ public class ZmsClientMock implements ZmsClient { } @Override - public List<AthensDomain> getTenantDomainsForUser(AthensPrincipal principal) { - log("getTenantDomainsForUser(principal='%s')", principal); - return athens.domains.values().stream() - .filter(domain -> domain.tenantAdmins.contains(principal) || domain.admins.contains(principal)) - .map(domain -> domain.name) - .collect(toList()); - } - - @Override - public AthensPublicKey getPublicKey(AthensService service, String keyId) { + public AthenzPublicKey getPublicKey(AthenzService service, String keyId) { throw new UnsupportedOperationException(); } @Override - public List<AthensPublicKey> getPublicKeys(AthensService service) { + public List<AthenzPublicKey> getPublicKeys(AthenzService service) { throw new UnsupportedOperationException(); } @@ -121,7 +111,7 @@ public class ZmsClientMock implements ZmsClient { } private static ZmsException zmsException(int code, String message, Object... args) { - return new ZmsException(new RuntimeException(String.format(message, args)), code); + return new ZmsException(new ZMSClientException(code, String.format(message, args))); } private static void log(String format, Object... args) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/ZtsClientMock.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/ZtsClientMock.java new file mode 100644 index 00000000000..fa41dcc6446 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/athenz/mock/ZtsClientMock.java @@ -0,0 +1,34 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.mock; + +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.ZtsClient; + +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static java.util.stream.Collectors.toList; + +/** + * @author bjorncs + */ +public class ZtsClientMock implements ZtsClient { + private static final Logger log = Logger.getLogger(ZtsClientMock.class.getName()); + + private final AthensDbMock athens; + + public ZtsClientMock(AthensDbMock athens) { + this.athens = athens; + } + + @Override + public List<AthensDomain> getTenantDomainsForUser(AthenzPrincipal principal) { + log.log(Level.INFO, "getTenantDomainsForUser(principal='%s')", principal); + return athens.domains.values().stream() + .filter(domain -> domain.tenantAdmins.contains(principal) || domain.admins.contains(principal)) + .map(domain -> domain.name) + .collect(toList()); + } +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainer.java index 8f5db8832fa..c807a7f0586 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainer.java @@ -2,6 +2,8 @@ package com.yahoo.vespa.hosted.controller.maintenance; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.Flavor; +import com.yahoo.config.provision.Zone; import com.yahoo.vespa.curator.Lock; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; @@ -15,6 +17,7 @@ import java.time.Duration; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.logging.Logger; import java.util.stream.Collectors; @@ -38,7 +41,7 @@ public class ClusterInfoMaintainer extends Maintainer { return node.membership.clusterId; } - private Map<ClusterSpec.Id, ClusterInfo> getClusterInfo(NodeList nodes) { + private Map<ClusterSpec.Id, ClusterInfo> getClusterInfo(NodeList nodes, Zone zone) { Map<ClusterSpec.Id, ClusterInfo> infoMap = new HashMap<>(); // Group nodes by clusterid @@ -53,9 +56,24 @@ public class ClusterInfoMaintainer extends Maintainer { //Assume they are all equal and use first node as a representatitve for the cluster NodeList.Node node = clusterNodes.get(0); + // Extract flavor info + double cpu = 0; + double mem = 0; + double disk = 0; + if (zone.nodeFlavors().isPresent()) { + Optional<Flavor> flavorOptional = zone.nodeFlavors().get().getFlavor(node.flavor); + if ((flavorOptional.isPresent())) { + Flavor flavor = flavorOptional.get(); + cpu = flavor.getMinCpuCores(); + mem = flavor.getMinMainMemoryAvailableGb(); + disk = flavor.getMinMainMemoryAvailableGb(); + } + } + // Add to map List<String> hostnames = clusterNodes.stream().map(node1 -> node1.hostname).collect(Collectors.toList()); - ClusterInfo inf = new ClusterInfo(node.flavor, node.cost, ClusterSpec.Type.from(node.membership.clusterType), hostnames); + ClusterInfo inf = new ClusterInfo(node.flavor, node.cost, cpu, mem, disk, + ClusterSpec.Type.from(node.membership.clusterType), hostnames); infoMap.put(new ClusterSpec.Id(id), inf); } @@ -71,7 +89,7 @@ public class ClusterInfoMaintainer extends Maintainer { DeploymentId deploymentId = new DeploymentId(application.id(), deployment.zone()); try { NodeList nodes = controller().applications().configserverClient().getNodeList(deploymentId); - Map<ClusterSpec.Id, ClusterInfo> clusterInfo = getClusterInfo(nodes); + Map<ClusterSpec.Id, ClusterInfo> clusterInfo = getClusterInfo(nodes, deployment.zone()); Application app = application.with(deployment.withClusterInfo(clusterInfo)); controller.applications().store(app, lock); } catch (IOException ioe) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java index 880abaaa6f9..fd2e7496ec0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/ControllerMaintenance.java @@ -35,6 +35,7 @@ public class ControllerMaintenance extends AbstractComponent { private final BlockedChangeDeployer blockedChangeDeployer; private final ClusterInfoMaintainer clusterInfoMaintainer; private final ClusterUtilizationMaintainer clusterUtilizationMaintainer; + private final DeploymentMetricsMaintainer deploymentMetricsMaintainer; @SuppressWarnings("unused") // instantiated by Dependency Injection public ControllerMaintenance(MaintainerConfig maintainerConfig, Controller controller, CuratorDb curator, @@ -54,6 +55,7 @@ public class ControllerMaintenance extends AbstractComponent { blockedChangeDeployer = new BlockedChangeDeployer(controller, maintenanceInterval, jobControl); clusterInfoMaintainer = new ClusterInfoMaintainer(controller, Duration.ofHours(2), jobControl); clusterUtilizationMaintainer = new ClusterUtilizationMaintainer(controller, Duration.ofHours(2), jobControl); + deploymentMetricsMaintainer = new DeploymentMetricsMaintainer(controller, Duration.ofMinutes(10), jobControl); } public Upgrader upgrader() { return upgrader; } @@ -74,6 +76,7 @@ public class ControllerMaintenance extends AbstractComponent { blockedChangeDeployer.deconstruct(); clusterUtilizationMaintainer.deconstruct(); clusterInfoMaintainer.deconstruct(); + deploymentMetricsMaintainer.deconstruct(); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java new file mode 100644 index 00000000000..d9ef451ffb7 --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainer.java @@ -0,0 +1,43 @@ +package com.yahoo.vespa.hosted.controller.maintenance;// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +import com.yahoo.vespa.curator.Lock; +import com.yahoo.vespa.hosted.controller.Application; +import com.yahoo.vespa.hosted.controller.Controller; +import com.yahoo.vespa.hosted.controller.api.integration.MetricsService; +import com.yahoo.vespa.hosted.controller.application.Deployment; +import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; + +import java.time.Duration; + +/** + * Retrieve deployment metrics like qps and document count from the metric service and + * update the applications with this info. + * + * @author smorgrav + */ +public class DeploymentMetricsMaintainer extends Maintainer { + + DeploymentMetricsMaintainer(Controller controller, Duration duration, JobControl jobControl) { + super(controller, duration, jobControl); + } + + @Override + protected void maintain() { + + for (Application application : controller().applications().asList()) { + try (Lock lock = controller().applications().lock(application.id())) { + for (Deployment deployment : application.deployments().values()) { + + MetricsService.DeploymentMetrics metrics = controller().metricsService() + .getDeploymentMetrics(application.id(), deployment.zone()); + + DeploymentMetrics appMetrics = new DeploymentMetrics(metrics.queriesPerSecond(), metrics.writesPerSecond(), + metrics.documentCount(), metrics.queryLatencyMillis(), metrics.writeLatencyMillis()); + + Application app = application.with(deployment.withMetrics(appMetrics)); + controller().applications().store(app, lock); + } + } + } + } +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java index 859e322b227..41d1a2d624c 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java @@ -22,6 +22,7 @@ import com.yahoo.vespa.hosted.controller.application.ClusterUtilization; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError; +import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; import com.yahoo.vespa.hosted.controller.application.JobStatus; import com.yahoo.vespa.hosted.controller.application.SourceRevision; @@ -85,6 +86,9 @@ public class ApplicationSerializer { private final String clusterInfoField = "clusterInfo"; private final String clusterInfoFlavorField = "flavor"; private final String clusterInfoCostField = "cost"; + private final String clusterInfoCpuField = "flavorCpu"; + private final String clusterInfoMemField = "flavorMem"; + private final String clusterInfoDiskField = "flavorDisk"; private final String clusterInfoTypeField = "clusterType"; private final String clusterInfoHostnamesField = "hostnames"; @@ -95,6 +99,14 @@ public class ApplicationSerializer { private final String clusterUtilsDiskField = "disk"; private final String clusterUtilsDiskBusyField = "diskbusy"; + // Deployment metrics fields + private final String deploymentMetricsField = "metrics"; + private final String deploymentMetricsQPSField = "queriesPerSecond"; + private final String deploymentMetricsWPSField = "writesPerSecond"; + private final String deploymentMetricsDocsField = "documentCount"; + private final String deploymentMetricsQueryLatencyField = "queryLatencyMillis"; + private final String deploymentMetricsWriteLatencyField = "writeLatencyMillis"; + // ------------------ Serialization @@ -123,6 +135,16 @@ public class ApplicationSerializer { toSlime(deployment.revision(), object.setObject(applicationPackageRevisionField)); clusterInfoToSlime(deployment.clusterInfo(), object); clusterUtilsToSlime(deployment.clusterUtils(), object); + metricsToSlime(deployment.metrics(), object); + } + + private void metricsToSlime(DeploymentMetrics metrics, Cursor object) { + Cursor root = object.setObject(deploymentMetricsField); + root.setDouble(deploymentMetricsQPSField, metrics.queriesPerSecond()); + root.setDouble(deploymentMetricsWPSField, metrics.writesPerSecond()); + root.setDouble(deploymentMetricsDocsField, metrics.documentCount()); + root.setDouble(deploymentMetricsQueryLatencyField, metrics.queryLatencyMillis()); + root.setDouble(deploymentMetricsWriteLatencyField, metrics.writeLatencyMillis()); } private void clusterInfoToSlime(Map<ClusterSpec.Id, ClusterInfo> clusters, Cursor object) { @@ -134,7 +156,10 @@ public class ApplicationSerializer { private void toSlime(ClusterInfo info, Cursor object) { object.setString(clusterInfoFlavorField, info.getFlavor()); - object.setLong(clusterInfoCostField, info.getCost()); + object.setLong(clusterInfoCostField, info.getFlavorCost()); + object.setDouble(clusterInfoCpuField, info.getFlavorCPU()); + object.setDouble(clusterInfoMemField, info.getFlavorMem()); + object.setDouble(clusterInfoDiskField, info.getFlavorDisk()); object.setString(clusterInfoTypeField, info.getClusterType().name()); Cursor array = object.setArray(clusterInfoHostnamesField); for (String host : info.getHostnames()) { @@ -223,7 +248,7 @@ public class ApplicationSerializer { Inspector root = slime.get(); ApplicationId id = ApplicationId.fromSerializedForm(root.field(idField).asString()); - DeploymentSpec deploymentSpec = DeploymentSpec.fromXml(root.field(deploymentSpecField).asString()); + DeploymentSpec deploymentSpec = DeploymentSpec.fromXml(root.field(deploymentSpecField).asString(), false); ValidationOverrides validationOverrides = ValidationOverrides.fromXml(root.field(validationOverridesField).asString()); List<Deployment> deployments = deploymentsFromSlime(root.field(deploymentsField)); DeploymentJobs deploymentJobs = deploymentJobsFromSlime(root.field(deploymentJobsField)); @@ -246,7 +271,20 @@ public class ApplicationSerializer { Version.fromString(deploymentObject.field(versionField).asString()), Instant.ofEpochMilli(deploymentObject.field(deployTimeField).asLong()), clusterUtilsMapFromSlime(deploymentObject.field(clusterUtilsField)), - clusterInfoMapFromSlime(deploymentObject.field(clusterInfoField))); + clusterInfoMapFromSlime(deploymentObject.field(clusterInfoField)), + deploymentMetricsFromSlime(deploymentObject.field(deploymentMetricsField))); + } + + private DeploymentMetrics deploymentMetricsFromSlime(Inspector object) { + + double queriesPerSecond = object.field(deploymentMetricsQPSField).asDouble(); + double writesPerSecond = object.field(deploymentMetricsWPSField).asDouble(); + double documentCount = object.field(deploymentMetricsDocsField).asDouble(); + double queryLatencyMillis = object.field(deploymentMetricsQueryLatencyField).asDouble(); + double writeLatencyMills = object.field(deploymentMetricsWriteLatencyField).asDouble(); + + return new DeploymentMetrics(queriesPerSecond, writesPerSecond, + documentCount, queryLatencyMillis, writeLatencyMills); } private Map<ClusterSpec.Id, ClusterInfo> clusterInfoMapFromSlime(Inspector object) { @@ -274,10 +312,13 @@ public class ApplicationSerializer { String flavor = inspector.field(clusterInfoFlavorField).asString(); int cost = (int)inspector.field(clusterInfoCostField).asLong(); String type = inspector.field(clusterInfoTypeField).asString(); + double flavorCpu = inspector.field(clusterInfoCpuField).asDouble(); + double flavorMem = inspector.field(clusterInfoMemField).asDouble(); + double flavorDisk = inspector.field(clusterInfoDiskField).asDouble(); List<String> hostnames = new ArrayList<>(); inspector.field(clusterInfoHostnamesField).traverse((ArrayTraverser)(int index, Inspector value) -> hostnames.add(value.asString())); - return new ClusterInfo(flavor, cost, ClusterSpec.Type.from(type), hostnames); + return new ClusterInfo(flavor, cost, flavorCpu, flavorMem, flavorDisk, ClusterSpec.Type.from(type), hostnames); } private Zone zoneFromSlime(Inspector object) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java index a70e31d9de8..2ca662ccb66 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/CuratorDb.java @@ -4,20 +4,21 @@ package com.yahoo.vespa.hosted.controller.persistence; import com.google.inject.Inject; import com.yahoo.cloud.config.ClusterInfoConfig; import com.yahoo.cloud.config.ZookeeperServerConfig; -import com.yahoo.component.Version; -import com.yahoo.component.Vtag; import com.yahoo.config.provision.ApplicationId; import com.yahoo.net.HostName; import com.yahoo.path.Path; import com.yahoo.transaction.NestedTransaction; +import com.yahoo.vespa.config.SlimeUtils; import com.yahoo.vespa.curator.Curator; import com.yahoo.vespa.curator.Lock; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; +import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.zookeeper.ZooKeeperServer; +import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.ArrayDeque; import java.util.Collections; @@ -148,18 +149,6 @@ public class CuratorDb { // -------------- Read and write -------------------------------------------------- - public Version readSystemVersion() { - Optional<byte[]> data = curator.getData(systemVersionPath()); - if (! data.isPresent() || data.get().length == 0) return Vtag.currentVersion; - return Version.fromString(new String(data.get(), StandardCharsets.UTF_8)); - } - - public void writeSystemVersion(Version version) { - NestedTransaction transaction = new NestedTransaction(); - curator.set(systemVersionPath(), version.toString().getBytes(StandardCharsets.UTF_8)); - transaction.commit(); - } - public Set<String> readInactiveJobs() { try { Optional<byte[]> data = curator.getData(inactiveJobsPath()); @@ -199,7 +188,7 @@ public class CuratorDb { } public double readUpgradesPerMinute() { - Optional<byte[]> n = curator.getData(upgradePerMinutePath()); + Optional<byte[]> n = curator.getData(upgradesPerMinutePath()); if (!n.isPresent() || n.get().length == 0) { return 0.5; // Default if value has never been written } @@ -211,10 +200,34 @@ public class CuratorDb { throw new IllegalArgumentException("Upgrades per minute must be >= 0"); } NestedTransaction transaction = new NestedTransaction(); - curator.set(upgradePerMinutePath(), ByteBuffer.allocate(Double.BYTES).putDouble(n).array()); + curator.set(upgradesPerMinutePath(), ByteBuffer.allocate(Double.BYTES).putDouble(n).array()); + transaction.commit(); + } + + public void writeVersionStatus(VersionStatus status) { + VersionStatusSerializer serializer = new VersionStatusSerializer(); + NestedTransaction transaction = new NestedTransaction(); + try { + // TODO: Removes unused data. Remove after October 2017 + if (curator.getData(systemVersionPath()).isPresent()) { + curator.delete(systemVersionPath()); + } + curator.set(versionStatusPath(), SlimeUtils.toJsonBytes(serializer.toSlime(status))); + } catch (IOException e) { + throw new UncheckedIOException("Failed to serialize version status", e); + } transaction.commit(); } + public VersionStatus readVersionStatus() { + Optional<byte[]> data = curator.getData(versionStatusPath()); + if (!data.isPresent() || data.get().length == 0) { + return VersionStatus.empty(); // Default if status has never been written + } + VersionStatusSerializer serializer = new VersionStatusSerializer(); + return serializer.fromSlime(SlimeUtils.jsonToSlime(data.get())); + } + public Optional<byte[]> readProvisionState(String provisionId) { return curator.getData(provisionStatePath().append(provisionId)); } @@ -264,10 +277,12 @@ public class CuratorDb { return root.append("jobQueues").append(jobType.name()); } - private Path upgradePerMinutePath() { + private Path upgradesPerMinutePath() { return root.append("upgrader").append("upgradesPerMinute"); } + private Path versionStatusPath() { return root.append("versionStatus"); } + private Path provisionStatePath() { return root.append("provisioning").append("states"); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java new file mode 100644 index 00000000000..e0bc592c82c --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializer.java @@ -0,0 +1,118 @@ +package com.yahoo.vespa.hosted.controller.persistence; + +import com.yahoo.component.Version; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.slime.ArrayTraverser; +import com.yahoo.slime.Cursor; +import com.yahoo.slime.Inspector; +import com.yahoo.slime.Slime; +import com.yahoo.vespa.hosted.controller.versions.DeploymentStatistics; +import com.yahoo.vespa.hosted.controller.versions.VersionStatus; +import com.yahoo.vespa.hosted.controller.versions.VespaVersion; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +/** + * Serializes VersionStatus to and from slime + * + * @author mpolden + */ +public class VersionStatusSerializer { + + // VersionStatus fields + private static final String versionsField = "versions"; + + // VespaVersion fields + private static final String releaseCommitField = "releaseCommit"; + private static final String releasedAtField = "releasedAt"; + private static final String isCurrentSystemVersionField = "isCurrentSystemVersion"; + private static final String deploymentStatisticsField = "deploymentStatistics"; + private static final String confidenceField = "confidence"; + private static final String configServersField = "configServerHostnames"; + + // DeploymentStatistics fields + private static final String versionField = "version"; + private static final String failingField = "failing"; + private static final String productionField = "production"; + + public Slime toSlime(VersionStatus status) { + Slime slime = new Slime(); + Cursor root = slime.setObject(); + versionsToSlime(status.versions(), root.setArray(versionsField)); + return slime; + } + + public VersionStatus fromSlime(Slime slime) { + Inspector root = slime.get(); + return new VersionStatus(vespaVersionsFromSlime(root.field(versionsField))); + } + + private void versionsToSlime(List<VespaVersion> versions, Cursor array) { + versions.forEach(version -> vespaVersionToSlime(version, array.addObject())); + } + + private void vespaVersionToSlime(VespaVersion version, Cursor object) { + object.setString(releaseCommitField, version.releaseCommit()); + object.setLong(releasedAtField, version.releasedAt().toEpochMilli()); + object.setBool(isCurrentSystemVersionField, version.isCurrentSystemVersion()); + deploymentStatisticsToSlime(version.statistics(), object.setObject(deploymentStatisticsField)); + object.setString(confidenceField, version.confidence().name()); + configServersToSlime(version.configServerHostnames(), object.setArray(configServersField)); + } + + private void configServersToSlime(Set<String> configServerHostnames, Cursor array) { + configServerHostnames.forEach(array::addString); + } + + private void deploymentStatisticsToSlime(DeploymentStatistics statistics, Cursor object) { + object.setString(versionField, statistics.version().toString()); + applicationsToSlime(statistics.failing(), object.setArray(failingField)); + applicationsToSlime(statistics.production(), object.setArray(productionField)); + } + + private void applicationsToSlime(List<ApplicationId> applications, Cursor array) { + applications.forEach(application -> array.addString(application.serializedForm())); + } + + private List<VespaVersion> vespaVersionsFromSlime(Inspector array) { + List<VespaVersion> versions = new ArrayList<>(); + array.traverse((ArrayTraverser) (i, object) -> versions.add(vespaVersionFromSlime(object))); + return Collections.unmodifiableList(versions); + } + + private VespaVersion vespaVersionFromSlime(Inspector object) { + return new VespaVersion(deploymentStatisticsFromSlime(object.field(deploymentStatisticsField)), + object.field(releaseCommitField).asString(), + Instant.ofEpochMilli(object.field(releasedAtField).asLong()), + object.field(isCurrentSystemVersionField).asBool(), + configServersFromSlime(object.field(configServersField)), + VespaVersion.Confidence.valueOf(object.field(confidenceField).asString()) + ); + } + + private Set<String> configServersFromSlime(Inspector array) { + Set<String> configServerHostnames = new LinkedHashSet<>(); + array.traverse((ArrayTraverser) (i, entry) -> configServerHostnames.add(entry.asString())); + return Collections.unmodifiableSet(configServerHostnames); + } + + private DeploymentStatistics deploymentStatisticsFromSlime(Inspector object) { + return new DeploymentStatistics(Version.fromString(object.field(versionField).asString()), + applicationsFromSlime(object.field(failingField)), + applicationsFromSlime(object.field(productionField))); + } + + private List<ApplicationId> applicationsFromSlime(Inspector array) { + List<ApplicationId> applications = new ArrayList<>(); + array.traverse((ArrayTraverser) (i, entry) -> applications.add( + ApplicationId.fromSerializedForm(entry.asString())) + ); + return Collections.unmodifiableList(applications); + } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 42e89e7893f..cb6c47ad299 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.hosted.controller.restapi.application; import com.google.common.base.Joiner; +import com.google.inject.Inject; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; @@ -50,9 +51,6 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserGroup; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; import com.yahoo.vespa.hosted.controller.api.integration.MetricsService; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsException; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException; import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log; import com.yahoo.vespa.hosted.controller.api.integration.routing.RotationStatus; @@ -62,10 +60,15 @@ import com.yahoo.vespa.hosted.controller.application.Change; import com.yahoo.vespa.hosted.controller.application.ClusterCost; import com.yahoo.vespa.hosted.controller.application.ClusterUtilization; import com.yahoo.vespa.hosted.controller.application.Deployment; -import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.DeploymentCost; +import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; +import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; import com.yahoo.vespa.hosted.controller.application.JobStatus; import com.yahoo.vespa.hosted.controller.application.SourceRevision; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; import com.yahoo.vespa.hosted.controller.restapi.ErrorResponse; import com.yahoo.vespa.hosted.controller.restapi.MessageResponse; import com.yahoo.vespa.hosted.controller.restapi.Path; @@ -105,11 +108,15 @@ public class ApplicationApiHandler extends LoggingRequestHandler { private final Controller controller; private final Authorizer authorizer; + private final AthenzClientFactory athenzClientFactory; - public ApplicationApiHandler(Executor executor, AccessLog accessLog, Controller controller, Authorizer authorizer) { + @Inject + public ApplicationApiHandler(Executor executor, AccessLog accessLog, Controller controller, Authorizer authorizer, + AthenzClientFactory athenzClientFactory) { super(executor, accessLog); this.controller = controller; this.authorizer = authorizer; + this.athenzClientFactory = athenzClientFactory; } @Override @@ -433,20 +440,13 @@ public class ApplicationApiHandler extends LoggingRequestHandler { toSlime(appCost, costObject); // Metrics - com.yahoo.config.provision.ApplicationId applicationId = com.yahoo.config.provision.ApplicationId.from(tenantName, applicationName, instanceName); - Zone zoneId = new Zone(Environment.from(environment), RegionName.from(region)); - try { - MetricsService.DeploymentMetrics metrics = controller.metricsService().getDeploymentMetrics(applicationId, zoneId); - Cursor metricsObject = response.setObject("metrics"); - metricsObject.setDouble("queriesPerSecond", metrics.queriesPerSecond()); - metricsObject.setDouble("writesPerSecond", metrics.writesPerSecond()); - metricsObject.setDouble("documentCount", metrics.documentCount()); - metricsObject.setDouble("queryLatencyMillis", metrics.queryLatencyMillis()); - metricsObject.setDouble("writeLatencyMillis", metrics.writeLatencyMillis()); - } - catch (RuntimeException e) { - log.log(Level.WARNING, "Failed getting Yamas metrics", Exceptions.toMessageString(e)); - } + DeploymentMetrics metrics = deployment.metrics(); + Cursor metricsObject = response.setObject("metrics"); + metricsObject.setDouble("queriesPerSecond", metrics.queriesPerSecond()); + metricsObject.setDouble("writesPerSecond", metrics.writesPerSecond()); + metricsObject.setDouble("documentCount", metrics.documentCount()); + metricsObject.setDouble("queryLatencyMillis", metrics.queryLatencyMillis()); + metricsObject.setDouble("writeLatencyMillis", metrics.writeLatencyMillis()); return new SlimeJsonResponse(slime); } @@ -760,10 +760,10 @@ public class ApplicationApiHandler extends LoggingRequestHandler { Inspector deployOptions = SlimeUtils.jsonToSlime(dataParts.get("deployOptions")).get(); - DeployAuthorizer deployAuthorizer = new DeployAuthorizer(controller.athens(), controller.zoneRegistry()); + DeployAuthorizer deployAuthorizer = new DeployAuthorizer(controller.zoneRegistry(), athenzClientFactory); Tenant tenant = controller.tenants().tenant(new TenantId(tenantName)).orElseThrow(() -> new NotExistsException(new TenantId(tenantName))); Principal principal = authorizer.getPrincipal(request); - if (principal instanceof AthensPrincipal) { + if (principal instanceof AthenzPrincipal) { deployAuthorizer.throwIfUnauthorizedForDeploy(principal, Environment.from(environment), tenant, @@ -1084,8 +1084,8 @@ public class ApplicationApiHandler extends LoggingRequestHandler { public static void toSlime(DeploymentCost deploymentCost, Cursor object) { object.setLong("tco", (long)deploymentCost.getTco()); + object.setLong("waste", (long)deploymentCost.getWaste()); object.setDouble("utilization", deploymentCost.getUtilization()); - object.setDouble("waste", deploymentCost.getWaste()); Cursor clustersObject = object.setObject("cluster"); for (Map.Entry<String, ClusterCost> clusterEntry : deploymentCost.getCluster().entrySet()) toSlime(clusterEntry.getValue(), clustersObject.setObject(clusterEntry.getKey())); @@ -1096,8 +1096,12 @@ public class ApplicationApiHandler extends LoggingRequestHandler { object.setString("resource", getResourceName(clusterCost.getResultUtilization())); object.setDouble("utilization", clusterCost.getResultUtilization().getMaxUtilization()); object.setLong("tco", (int)clusterCost.getTco()); - object.setString("flavor", clusterCost.getClusterInfo().getFlavor()); object.setLong("waste", (int)clusterCost.getWaste()); + object.setString("flavor", clusterCost.getClusterInfo().getFlavor()); + object.setDouble("flavorCost", clusterCost.getClusterInfo().getFlavorCost()); + object.setDouble("flavorCpu", clusterCost.getClusterInfo().getFlavorCPU()); + object.setDouble("flavorMem", clusterCost.getClusterInfo().getFlavorMem()); + object.setDouble("flavorDisk", clusterCost.getClusterInfo().getFlavorDisk()); object.setString("type", clusterCost.getClusterInfo().getClusterType().name()); Cursor utilObject = object.setObject("util"); utilObject.setDouble("cpu", clusterCost.getResultUtilization().getCpu()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/Authorizer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/Authorizer.java index 8dff39779b9..84e731ec994 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/Authorizer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/Authorizer.java @@ -11,10 +11,10 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserGroup; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsClientFactory; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzUtils; +import com.yahoo.vespa.hosted.controller.athenz.NToken; import com.yahoo.vespa.hosted.controller.common.ContextAttributes; import com.yahoo.vespa.hosted.controller.restapi.filter.NTokenRequestFilter; import com.yahoo.vespa.hosted.controller.restapi.filter.UnauthenticatedUserPrincipal; @@ -47,15 +47,13 @@ public class Authorizer { new UserId("screwdriver-test")); private final Controller controller; - private final ZmsClientFactory zmsClientFactory; + private final AthenzClientFactory athenzClientFactory; private final EntityService entityService; - private final Athens athens; - public Authorizer(Controller controller, EntityService entityService) { + public Authorizer(Controller controller, EntityService entityService, AthenzClientFactory athenzClientFactory) { this.controller = controller; - this.zmsClientFactory = controller.athens().zmsClientFactory(); + this.athenzClientFactory = athenzClientFactory; this.entityService = entityService; - this.athens = controller.athens(); } public void throwIfUnauthorized(TenantId tenantId, HttpRequest request) throws ForbiddenException { @@ -90,19 +88,19 @@ public class Authorizer { public Optional<NToken> getNToken(HttpRequest request) { String nTokenHeader = (String)request.getJDiscRequest().context().get(NTokenRequestFilter.NTOKEN_HEADER); - return Optional.ofNullable(nTokenHeader).map(athens::nTokenFrom); + return Optional.ofNullable(nTokenHeader).map(NToken::new); } public boolean isSuperUser(HttpRequest request) { // TODO Check membership of admin role in Vespa's Athens domain - return isMemberOfVespaBouncerGroup(request) || isScrewdriverPrincipal(athens, getPrincipal(request)); + return isMemberOfVespaBouncerGroup(request) || isScrewdriverPrincipal(getPrincipal(request)); } - public static boolean isScrewdriverPrincipal(Athens athens, Principal principal) { + public static boolean isScrewdriverPrincipal(Principal principal) { if (principal instanceof UnauthenticatedUserPrincipal) // Host-based authentication return SCREWDRIVER_USERS.contains(new UserId(principal.getName())); - else if (principal instanceof AthensPrincipal) - return ((AthensPrincipal)principal).getDomain().equals(athens.screwdriverDomain()); + else if (principal instanceof AthenzPrincipal) + return ((AthenzPrincipal)principal).getDomain().equals(AthenzUtils.SCREWDRIVER_DOMAIN); else return false; } @@ -126,13 +124,13 @@ public class Authorizer { } private boolean isAthensTenantAdmin(UserId userId, AthensDomain tenantDomain) { - return zmsClientFactory.createClientWithServicePrincipal() - .hasTenantAdminAccess(athens.principalFrom(userId), tenantDomain); + return athenzClientFactory.createZmsClientWithServicePrincipal() + .hasTenantAdminAccess(AthenzUtils.createPrincipal(userId), tenantDomain); } public boolean isAthensDomainAdmin(UserId userId, AthensDomain tenantDomain) { - return zmsClientFactory.createClientWithServicePrincipal() - .isDomainAdmin(athens.principalFrom(userId), tenantDomain); + return athenzClientFactory.createZmsClientWithServicePrincipal() + .isDomainAdmin(AthenzUtils.createPrincipal(userId), tenantDomain); } public boolean isGroupMember(UserId userId, UserGroup userGroup) { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/DeployAuthorizer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/DeployAuthorizer.java index 5c7cdfdae0a..fa82c9239df 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/DeployAuthorizer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/DeployAuthorizer.java @@ -7,11 +7,12 @@ import com.yahoo.vespa.hosted.controller.api.Tenant; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ApplicationAction; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.ZmsException; import com.yahoo.vespa.hosted.controller.api.integration.zone.ZoneRegistry; +import com.yahoo.vespa.hosted.controller.athenz.ApplicationAction; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzUtils; +import com.yahoo.vespa.hosted.controller.athenz.ZmsException; import com.yahoo.vespa.hosted.controller.restapi.filter.UnauthenticatedUserPrincipal; import javax.ws.rs.ForbiddenException; @@ -30,12 +31,12 @@ public class DeployAuthorizer { private static final Logger log = Logger.getLogger(DeployAuthorizer.class.getName()); - private final Athens athens; private final ZoneRegistry zoneRegistry; + private final AthenzClientFactory athenzClientFactory; - public DeployAuthorizer(Athens athens, ZoneRegistry zoneRegistry) { - this.athens = athens; + public DeployAuthorizer(ZoneRegistry zoneRegistry, AthenzClientFactory athenzClientFactory) { this.zoneRegistry = zoneRegistry; + this.athenzClientFactory = athenzClientFactory; } public void throwIfUnauthorizedForDeploy(Principal principal, @@ -50,7 +51,7 @@ public class DeployAuthorizer { private boolean athensCredentialsRequired(Environment environment, Tenant tenant, ApplicationId applicationId, Principal principal) { if (!environmentRequiresAuthorization(environment)) return false; - if (! isScrewdriverPrincipal(athens, principal)) + if (! isScrewdriverPrincipal(principal)) throw loggedForbiddenException( "Principal '%s' is not a screwdriver principal, and does not have deploy access to application '%s'", principal.getName(), applicationId.toShortString()); @@ -62,10 +63,10 @@ public class DeployAuthorizer { // TODO: inline when deployment via ssh is removed private void checkAthensCredentials(Principal principal, Tenant tenant, ApplicationId applicationId) { AthensDomain domain = tenant.getAthensDomain().get(); - if (! (principal instanceof AthensPrincipal)) + if (! (principal instanceof AthenzPrincipal)) throw loggedForbiddenException("Principal '%s' is not authenticated.", principal.getName()); - AthensPrincipal athensPrincipal = (AthensPrincipal)principal; + AthenzPrincipal athensPrincipal = (AthenzPrincipal)principal; if ( ! hasDeployAccessToAthensApplication(athensPrincipal, domain, applicationId)) throw loggedForbiddenException( "Screwdriver principal '%1$s' does not have deploy access to '%2$s'. " + @@ -95,14 +96,14 @@ public class DeployAuthorizer { if (athensCredentialsRequired(environment, tenant, applicationId, principal)) { ScrewdriverId screwdriverId = optionalScrewdriverId.orElseThrow( () -> loggedForbiddenException("Screwdriver id must be provided when deploying from Screwdriver.")); - principal = athens.principalFrom(screwdriverId); + principal = AthenzUtils.createPrincipal(screwdriverId); checkAthensCredentials(principal, tenant, applicationId); } } - private boolean hasDeployAccessToAthensApplication(AthensPrincipal principal, AthensDomain domain, ApplicationId applicationId) { + private boolean hasDeployAccessToAthensApplication(AthenzPrincipal principal, AthensDomain domain, ApplicationId applicationId) { try { - return athens.zmsClientFactory().createClientWithServicePrincipal() + return athenzClientFactory.createZmsClientWithServicePrincipal() .hasApplicationAccess( principal, ApplicationAction.deploy, diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/NTokenRequestFilter.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/NTokenRequestFilter.java index 0138d3ae65c..443a53b476d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/NTokenRequestFilter.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/filter/NTokenRequestFilter.java @@ -5,7 +5,7 @@ import com.google.inject.Inject; import com.yahoo.jdisc.handler.ResponseHandler; import com.yahoo.jdisc.http.filter.DiscFilterRequest; import com.yahoo.jdisc.http.filter.SecurityRequestFilter; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; +import com.yahoo.vespa.hosted.controller.athenz.config.AthenzConfig; import com.yahoo.yolean.chain.After; /** @@ -16,16 +16,16 @@ public class NTokenRequestFilter implements SecurityRequestFilter { public static final String NTOKEN_HEADER = "com.yahoo.vespa.hosted.controller.restapi.filter.NTokenRequestFilter.ntoken"; - private final Athens athens; + private final String principalHeaderName; @Inject - public NTokenRequestFilter(Athens athens) { - this.athens = athens; + public NTokenRequestFilter(AthenzConfig config) { + this.principalHeaderName = config.principalHeaderName(); } @Override public void filter(DiscFilterRequest request, ResponseHandler responseHandler) { - String nToken = request.getHeader(athens.principalTokenHeader()); + String nToken = request.getHeader(principalHeaderName); if (nToken != null) { request.setAttribute(NTOKEN_HEADER, nToken); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/DeploymentStatistics.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/DeploymentStatistics.java index fbd1a74c12c..6174a017a54 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/DeploymentStatistics.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/DeploymentStatistics.java @@ -6,6 +6,7 @@ import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import java.util.List; +import java.util.Objects; /** * Statistics about deployments on a platform version. This is immutable. @@ -18,8 +19,9 @@ public class DeploymentStatistics { private final ImmutableList<ApplicationId> failing; private final ImmutableList<ApplicationId> production; - private DeploymentStatistics(Version version, - List<ApplicationId> failingApplications, List<ApplicationId> production) { + /** DO NOT USE. Public for serialization purposes */ + public DeploymentStatistics(Version version, List<ApplicationId> failingApplications, + List<ApplicationId> production) { this.version = version; this.failing = ImmutableList.copyOf(failingApplications); this.production = ImmutableList.copyOf(production); @@ -59,4 +61,18 @@ public class DeploymentStatistics { return b.build(); } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof DeploymentStatistics)) return false; + DeploymentStatistics that = (DeploymentStatistics) o; + return Objects.equals(version, that.version) && + Objects.equals(failing, that.failing) && + Objects.equals(production, that.production); + } + + @Override + public int hashCode() { + return Objects.hash(version, failing, production); + } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java index c3f3773cde6..c3b2da42861 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java @@ -5,9 +5,9 @@ import com.google.common.collect.ImmutableList; import com.yahoo.collections.ListMap; import com.yahoo.component.Version; import com.yahoo.component.Vtag; -import com.yahoo.vespa.hosted.controller.api.integration.github.GitSha; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; +import com.yahoo.vespa.hosted.controller.api.integration.github.GitSha; import com.yahoo.vespa.hosted.controller.application.ApplicationList; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; @@ -46,7 +46,7 @@ public class VersionStatus { private final ImmutableList<VespaVersion> versions; - /** Create a version status. DO NOT USE: Public for testing only */ + /** Create a version status. DO NOT USE: Public for testing and serialization only */ public VersionStatus(List<VespaVersion> versions) { this.versions = ImmutableList.copyOf(versions); } @@ -175,11 +175,30 @@ public class VersionStatus { Collection<String> configServerHostnames, Controller controller) { GitSha gitSha = controller.gitHub().getCommit(VESPA_REPO_OWNER, VESPA_REPO, statistics.version().toFullString()); + Instant releasedAt = Instant.ofEpochMilli(gitSha.commit.author.date.getTime()); + VespaVersion.Confidence confidence; + // Always compute confidence for system version + if (isSystemVersion) { + confidence = VespaVersion.confidenceFrom(statistics, controller, releasedAt); + } else { + // Keep existing confidence for non-system versions if already computed + confidence = confidenceFor(statistics.version(), controller) + .orElse(VespaVersion.confidenceFrom(statistics, controller, releasedAt)); + } return new VespaVersion(statistics, - gitSha.sha, Instant.ofEpochMilli(gitSha.commit.author.date.getTime()), + gitSha.sha, releasedAt, isSystemVersion, configServerHostnames, - controller); + confidence + ); + } + + /** Returns the current confidence for the given version */ + private static Optional<VespaVersion.Confidence> confidenceFor(Version version, Controller controller) { + return controller.versionStatus().versions().stream() + .filter(v -> version.equals(v.versionNumber())) + .map(VespaVersion::confidence) + .findFirst(); } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java index 3208f4d09c6..c1b9c045fbe 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VespaVersion.java @@ -4,7 +4,6 @@ package com.yahoo.vespa.hosted.controller.versions; import com.google.common.collect.ImmutableSet; import com.yahoo.component.Version; import com.yahoo.component.Vtag; -import com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy; import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.application.ApplicationList; @@ -12,6 +11,8 @@ import java.time.Instant; import java.util.Collection; import java.util.Set; +import static com.yahoo.config.application.api.DeploymentSpec.UpgradePolicy; + /** * Information about a particular Vespa version. * VespaVersions are identified by their version number and ordered by increasing version numbers. @@ -26,23 +27,22 @@ public class VespaVersion implements Comparable<VespaVersion> { private final Instant releasedAt; private final boolean isCurrentSystemVersion; private final DeploymentStatistics statistics; - private final Confidence confidence; private final ImmutableSet<String> configServerHostnames; + private final Confidence confidence; - public VespaVersion(DeploymentStatistics statistics, String releaseCommit, Instant releasedAt, + public VespaVersion(DeploymentStatistics statistics, String releaseCommit, Instant releasedAt, boolean isCurrentSystemVersion, Collection<String> configServerHostnames, - Controller controller) { + Confidence confidence) { this.statistics = statistics; this.releaseCommit = releaseCommit; this.releasedAt = releasedAt; this.isCurrentSystemVersion = isCurrentSystemVersion; this.configServerHostnames = ImmutableSet.copyOf(configServerHostnames); - this.confidence = deduceConfidenceFrom(statistics, controller, releasedAt); + this.confidence = confidence; } - private static Confidence deduceConfidenceFrom(DeploymentStatistics statistics, - Controller controller, - Instant releasedAt) { + public static Confidence confidenceFrom(DeploymentStatistics statistics, Controller controller, + Instant releasedAt) { // 'production on this': All deployment jobs upgrading to this version have completed without failure ApplicationList productionOnThis = ApplicationList.from(statistics.production(), controller.applications()) .notUpgradingTo(statistics.version()) diff --git a/controller-server/src/main/resources/configdefinitions/athenz.def b/controller-server/src/main/resources/configdefinitions/athenz.def new file mode 100644 index 00000000000..4e27e3ebd07 --- /dev/null +++ b/controller-server/src/main/resources/configdefinitions/athenz.def @@ -0,0 +1,26 @@ +# Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +namespace=vespa.hosted.controller.athenz.config + +# Principal header name +principalHeaderName string default="Athenz-Principal-Auth" + +# URL to ZMS API endpoint +zmsUrl string + +# URL to ZTS API endpoint +ztsUrl string + +# Athenz domain for controller identity. The domain is also used for Athenz tenancy integration. +domain string + +# Athenz service name for controller identity +service.name string + +# Athenz service public key id +service.publicKeyId string + +# Version of Athenz service private key +service.privateKeyVersion int + +# Name of Athenz service private key secret +service.privateKeySecretName string diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java index 9db852374b8..9228e83bbc6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ConfigServerClientMock.java @@ -7,16 +7,16 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.yahoo.component.AbstractComponent; import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; -import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerClient; -import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log; -import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeList; -import com.yahoo.vespa.hosted.controller.api.integration.configserver.PrepareResponse; import com.yahoo.vespa.hosted.controller.api.application.v4.model.DeployOptions; import com.yahoo.vespa.hosted.controller.api.application.v4.model.EndpointStatus; import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.ConfigChangeActions; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerClient; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.Log; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.NodeList; +import com.yahoo.vespa.hosted.controller.api.integration.configserver.PrepareResponse; import com.yahoo.vespa.hosted.controller.api.rotation.Rotation; import com.yahoo.vespa.serviceview.bindings.ApplicationView; import com.yahoo.vespa.serviceview.bindings.ClusterView; @@ -28,7 +28,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -40,15 +39,11 @@ import java.util.UUID; */ public class ConfigServerClientMock extends AbstractComponent implements ConfigServerClient { - private Map<ApplicationId, byte[]> applicationContent = new HashMap<>(); - private Map<ApplicationId, String> applicationInstances = new HashMap<>(); - private Map<ApplicationId, Boolean> applicationActivated = new HashMap<>(); - private Set<ApplicationId> applicationRestarted = new HashSet<>(); - private Set<String> hostsExplicitlyRestarted = new HashSet<>(); - private Map<String, EndpointStatus> endpoints = new HashMap<>(); - - private Map<URI, Version> configServerVersions = new HashMap<>(); - private Version defaultConfigServerVersion = new Version(6, 1, 0); + private final Map<ApplicationId, String> applicationInstances = new HashMap<>(); + private final Map<ApplicationId, Boolean> applicationActivated = new HashMap<>(); + private final Map<String, EndpointStatus> endpoints = new HashMap<>(); + private final Map<URI, Version> versions = new HashMap<>(); + private Version defaultVersion = new Version(6, 1, 0); /** The exception to throw on the next prepare run, or null to continue normally */ private RuntimeException prepareException = null; @@ -64,18 +59,27 @@ public class ConfigServerClientMock extends AbstractComponent implements ConfigS public Map<ApplicationId, Boolean> activated() { return Collections.unmodifiableMap(applicationActivated); } + + public void throwOnNextPrepare(RuntimeException prepareException) { + this.prepareException = prepareException; + } + + /** + * Returns the (initially empty) mutable map of config server urls to versions. + * This API will return defaultVersion as response to any version(url) call for versions not added to the map. + */ + public Map<URI, Version> versions() { + return versions; + } @Override public PreparedApplication prepare(DeploymentId deployment, DeployOptions deployOptions, Set<String> rotationCnames, Set<Rotation> rotations, byte[] content) { lastPrepareVersion = deployOptions.vespaVersion.map(Version::new); - if (prepareException != null) { RuntimeException prepareException = this.prepareException; this.prepareException = null; throw prepareException; } - - applicationContent.put(deployment.applicationId(), content); applicationActivated.put(deployment.applicationId(), false); applicationInstances.put(deployment.applicationId(), UUID.randomUUID() + ":4080"); @@ -111,20 +115,8 @@ public class ConfigServerClientMock extends AbstractComponent implements ConfigS }; } - public void throwOnNextPrepare(RuntimeException prepareException) { - this.prepareException = prepareException; - } - - /** - * Returns the (initially empty) mutable map of config server urls to versions. - * This API will return defaultConfigserverVersion as response to any version(url) call for versions not added to the map. - */ - public Map<URI, Version> configServerVersions() { - return configServerVersions; - } - - public Version getDefaultConfigServerVersion() { return defaultConfigServerVersion; } - public void setDefaultConfigServerVersion(Version version) { defaultConfigServerVersion = version; } + /** Set the default config server version */ + public void setDefaultVersion(Version version) { this.defaultVersion = version; } @Override public List<String> getNodeQueryHost(DeploymentId deployment, String type) { @@ -137,16 +129,11 @@ public class ConfigServerClientMock extends AbstractComponent implements ConfigS @Override public void restart(DeploymentId deployment, Optional<Hostname> hostname) { - applicationRestarted.add(deployment.applicationId()); - if (hostname.isPresent()) { - hostsExplicitlyRestarted.add(hostname.get().id()); - } } @Override public void deactivate(DeploymentId deployment) { applicationActivated.remove(deployment.applicationId()); - applicationContent.remove(deployment.applicationId()); applicationInstances.remove(deployment.applicationId()); } @@ -197,7 +184,7 @@ public class ConfigServerClientMock extends AbstractComponent implements ConfigS @Override public Version version(URI configServerURI) { - return configServerVersions.getOrDefault(configServerURI, defaultConfigServerVersion); + return versions.getOrDefault(configServerURI, defaultVersion); } @Override @@ -207,10 +194,8 @@ public class ConfigServerClientMock extends AbstractComponent implements ConfigS @Override public EndpointStatus getGlobalRotationStatus(DeploymentId deployment, String endpoint) { - EndpointStatus result = new EndpointStatus(EndpointStatus.Status.in, "", "", 1497618757l); - return endpoints.containsKey(endpoint) - ? endpoints.get(endpoint) - : result; + EndpointStatus result = new EndpointStatus(EndpointStatus.Status.in, "", "", 1497618757L); + return endpoints.getOrDefault(endpoint, result); } @Override diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index 6fc787d940e..408be6a49c2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -24,9 +24,6 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserGroup; import com.yahoo.vespa.hosted.controller.api.integration.BuildService.BuildJob; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.NTokenMock; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.ApplicationRevision; @@ -36,6 +33,8 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobReport; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobType; import com.yahoo.vespa.hosted.controller.application.JobStatus; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthensDbMock; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.BuildSystem; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; @@ -260,16 +259,19 @@ public class ControllerTest { Version systemVersion = controller.versionStatus().systemVersion().get().versionNumber(); Version newSystemVersion = new Version(systemVersion.getMajor(), systemVersion.getMinor()+1, 0); VespaVersion newSystemVespaVersion = new VespaVersion(DeploymentStatistics.empty(newSystemVersion), - "commit1", + "commit1", Instant.now(), true, Collections.emptyList(), - controller); + VespaVersion.Confidence.low + ); List<VespaVersion> versions = new ArrayList<>(controller.versionStatus().versions()); for (int i = 0; i < versions.size(); i++) { VespaVersion c = versions.get(i); if (c.isCurrentSystemVersion()) - versions.set(i, new VespaVersion(c.statistics(), c.releaseCommit(), c.releasedAt(), false, c.configServerHostnames(), controller)); + versions.set(i, new VespaVersion(c.statistics(), c.releaseCommit(), c.releasedAt(), + false, c.configServerHostnames(), + c.confidence())); } versions.add(newSystemVespaVersion); controller.updateVersionStatus(new VersionStatus(versions)); @@ -378,7 +380,7 @@ public class ControllerTest { assertFalse(mockDomain.isVespaTenant); // Migrate tenant to Athens - NToken nToken = new NTokenMock("token"); + NToken nToken = TestIdentities.userNToken; tester.controller().tenants().migrateTenantToAthens( tenantId, athensDomain, new PropertyId("1567"), new Property("vespa_dev.no"), nToken); @@ -542,7 +544,7 @@ public class ControllerTest { // Current system version, matches version in test data Version version = Version.fromString("6.141.117"); - tester.configServer().setDefaultConfigServerVersion(version); + tester.configServer().setDefaultVersion(version); tester.updateVersionStatus(version); assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber()); @@ -572,7 +574,7 @@ public class ControllerTest { // New version is released version = Version.fromString("6.142.1"); - tester.configServer().setDefaultConfigServerVersion(version); + tester.configServer().setDefaultVersion(version); tester.updateVersionStatus(version); assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber()); tester.upgrader().maintain(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java index 5184cde79c2..8e1234b7e96 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java @@ -21,8 +21,6 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.Property; import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock; import com.yahoo.vespa.hosted.controller.api.integration.chef.ChefMock; import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService; import com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService; @@ -30,6 +28,8 @@ import com.yahoo.vespa.hosted.controller.api.integration.github.GitHubMock; import com.yahoo.vespa.hosted.controller.api.integration.jira.JiraMock; import com.yahoo.vespa.hosted.controller.api.integration.routing.MemoryGlobalRoutingService; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthensDbMock; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock; import com.yahoo.vespa.hosted.controller.integration.MockMetricsService; import com.yahoo.vespa.hosted.controller.persistence.ControllerDb; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; @@ -214,7 +214,7 @@ public final class ControllerTester { new MockRoutingGenerator(), new ChefMock(), clock, - new AthensMock(athensDb)); + new AthenzClientFactoryMock(athensDb)); controller.updateVersionStatus(VersionStatus.compute(controller)); return controller; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/TestIdentities.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/TestIdentities.java index 1f52ebcadb7..355b63335c0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/TestIdentities.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/TestIdentities.java @@ -1,7 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.NTokenMock; import com.yahoo.vespa.hosted.controller.api.Tenant; import com.yahoo.vespa.hosted.controller.api.identifiers.EnvironmentId; import com.yahoo.vespa.hosted.controller.api.identifiers.InstanceId; @@ -10,7 +9,9 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.RegionId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserGroup; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; +import com.yahoo.vespa.hosted.controller.athenz.AthenzUtils; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.filter.AthenzTestUtils; /** * @author Tony Vaagenes @@ -33,6 +34,8 @@ public class TestIdentities { public static Tenant tenant = Tenant.createOpsDbTenant(tenantId, userGroup1, property); - public static NToken userNToken = new NTokenMock("token"); + public static NToken userNToken = new NToken.Builder( + "U1", AthenzUtils.createPrincipal(userId), AthenzTestUtils.generateRsaKeypair().getPrivate(), "0") + .build(); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ClusterCostTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ClusterCostTest.java new file mode 100644 index 00000000000..313f565f546 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/ClusterCostTest.java @@ -0,0 +1,35 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.application; + +import com.yahoo.config.provision.ClusterSpec; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author smorgrav + */ +public class ClusterCostTest { + + @Test + public void clusterCost() throws Exception { + List<String> hostnames = new ArrayList<>(); + hostnames.add("host1"); + hostnames.add("host2"); + ClusterInfo info = new ClusterInfo("test", 100, 10, 10, 10, ClusterSpec.Type.container, hostnames); + ClusterUtilization util = new ClusterUtilization(0.3, 0.2, 0.5, 0.1); + ClusterCost cost = new ClusterCost(info, util); + + // CPU is fully utilized + Assert.assertEquals(200, cost.getTco(), Double.MIN_VALUE); + Assert.assertEquals(0, cost.getWaste(), Double.MIN_VALUE); + + // Set Disk as the most utilized resource + util = new ClusterUtilization(0.3, 0.1, 0.5, 0.1); + cost = new ClusterCost(info, util); + Assert.assertEquals(200, cost.getTco(), Double.MIN_NORMAL); // TCO is independent of utilization + Assert.assertEquals(57.1428571429, cost.getWaste(), 0.001); // Waste is not independent + } +}
\ No newline at end of file diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentCostTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentCostTest.java new file mode 100644 index 00000000000..2e58253d768 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/DeploymentCostTest.java @@ -0,0 +1,38 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.application; + +import com.yahoo.config.provision.ClusterSpec; +import org.junit.Assert; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author smorgrav + */ +public class DeploymentCostTest { + + @Test + public void deploymentCost() { + Map<String, ClusterCost> clusters = new HashMap<>(); + clusters.put("cluster1", createClusterCost(100, 0.2)); + clusters.put("cluster2", createClusterCost(50, 0.1)); + + DeploymentCost cost = new DeploymentCost(clusters); + Assert.assertEquals(300, cost.getTco(), Double.MIN_VALUE); // 2*100 + 2*50 + Assert.assertEquals(28.5714285714, cost.getWaste(), 0.001); // from cluster2 + Assert.assertEquals(0.7142857142857143, cost.getUtilization(), Double.MIN_VALUE); // from cluster2 + } + + private ClusterCost createClusterCost(int flavorCost, double cpuUtil) { + List<String> hostnames = new ArrayList<>(); + hostnames.add("host1"); + hostnames.add("host2"); + ClusterInfo info = new ClusterInfo("test", flavorCost, 10, 10, 10, ClusterSpec.Type.container, hostnames); + ClusterUtilization util = new ClusterUtilization(0.3, cpuUtil, 0.5, 0.1); + return new ClusterCost(info, util); + } +}
\ No newline at end of file diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzPrincipalFilterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzPrincipalFilterTest.java new file mode 100644 index 00000000000..20db038485d --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzPrincipalFilterTest.java @@ -0,0 +1,123 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.filter; + +import com.yahoo.jdisc.Response; +import com.yahoo.jdisc.handler.ContentChannel; +import com.yahoo.jdisc.handler.ReadableContentChannel; +import com.yahoo.jdisc.handler.ResponseHandler; +import com.yahoo.jdisc.http.filter.DiscFilterRequest; +import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzUtils; +import com.yahoo.vespa.hosted.controller.athenz.InvalidTokenException; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import org.junit.Before; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UncheckedIOException; +import java.util.Objects; + +import static com.yahoo.jdisc.Response.Status.UNAUTHORIZED; +import static java.util.stream.Collectors.joining; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * @author bjorncs + */ +public class AthenzPrincipalFilterTest { + + private static final NToken NTOKEN = createDummyToken(); + private static final String ATHENZ_PRINCIPAL_HEADER = "Athenz-Principal-Auth"; + + private NTokenValidator validator; + private AthenzPrincipal principal; + + @Before + public void before() { + validator = mock(NTokenValidator.class); + principal = AthenzUtils.createPrincipal(new UserId("bob")); + } + + @Test + public void valid_ntoken_is_accepted() throws Exception { + DiscFilterRequest request = mock(DiscFilterRequest.class); + when(request.getHeader(ATHENZ_PRINCIPAL_HEADER)).thenReturn(NTOKEN.getToken()); + + when(validator.validate(NTOKEN)).thenReturn(principal); + + AthenzPrincipalFilter filter = new AthenzPrincipalFilter(validator, Runnable::run, ATHENZ_PRINCIPAL_HEADER); + filter.filter(request, new ResponseHandlerMock()); + + verify(request).setUserPrincipal(principal); + } + + @Test + public void missing_token_is_unauthorized() throws Exception { + DiscFilterRequest request = mock(DiscFilterRequest.class); + when(request.getHeader(ATHENZ_PRINCIPAL_HEADER)).thenReturn(null); + + ResponseHandlerMock responseHandler = new ResponseHandlerMock(); + + AthenzPrincipalFilter filter = new AthenzPrincipalFilter(validator, Runnable::run, ATHENZ_PRINCIPAL_HEADER); + filter.filter(request, responseHandler); + + assertThat(responseHandler.response, notNullValue()); + assertThat(responseHandler.response.getStatus(), equalTo(UNAUTHORIZED)); + assertThat(responseHandler.getResponseContent(), containsString("NToken is missing")); + } + + @Test + public void invalid_token_is_unauthorized() throws Exception { + DiscFilterRequest request = mock(DiscFilterRequest.class); + when(request.getHeader(ATHENZ_PRINCIPAL_HEADER)).thenReturn(NTOKEN.getToken()); + + when(validator.validate(NTOKEN)).thenThrow(new InvalidTokenException("Invalid token")); + + ResponseHandlerMock responseHandler = new ResponseHandlerMock(); + + AthenzPrincipalFilter filter = new AthenzPrincipalFilter(validator, Runnable::run, ATHENZ_PRINCIPAL_HEADER); + filter.filter(request, responseHandler); + + assertThat(responseHandler.response, notNullValue()); + assertThat(responseHandler.response.getStatus(), equalTo(UNAUTHORIZED)); + assertThat(responseHandler.getResponseContent(), containsString("Invalid token")); + } + + private static NToken createDummyToken() { + return new NToken.Builder( + "U1", AthenzUtils.createPrincipal(new UserId("bob")), AthenzTestUtils.generateRsaKeypair().getPrivate(), "0") + .build(); + } + + private static class ResponseHandlerMock implements ResponseHandler { + + public Response response; + public ReadableContentChannel contentChannel; + + @Override + public ContentChannel handleResponse(Response r) { + response = Objects.requireNonNull(r); + contentChannel = new ReadableContentChannel(); + return contentChannel; + } + + public String getResponseContent() { + try (BufferedReader br = new BufferedReader(new InputStreamReader(contentChannel.toStream()))) { + return br.lines().collect(joining(System.lineSeparator())); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + } + +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzTestUtils.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzTestUtils.java new file mode 100644 index 00000000000..40b38254dda --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/AthenzTestUtils.java @@ -0,0 +1,22 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.filter; + +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; + +/** + * @author bjorncs + */ +public class AthenzTestUtils { + public static KeyPair generateRsaKeypair() { + try { + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(512); + return keyGen.genKeyPair(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/NTokenValidatorTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/NTokenValidatorTest.java new file mode 100644 index 00000000000..e269f2842e2 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/athenz/filter/NTokenValidatorTest.java @@ -0,0 +1,95 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.athenz.filter; + +import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; +import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.InvalidTokenException; +import com.yahoo.vespa.hosted.controller.athenz.NToken; +import com.yahoo.vespa.hosted.controller.athenz.ZmsKeystore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.security.KeyPair; +import java.security.NoSuchAlgorithmException; +import java.util.Optional; + +import static com.yahoo.vespa.hosted.controller.athenz.AthenzUtils.ZMS_ATHENZ_SERVICE; +import static org.junit.Assert.assertEquals; + +/** + * @author bjorncs + */ +public class NTokenValidatorTest { + + private static final KeyPair TRUSTED_KEY = AthenzTestUtils.generateRsaKeypair(); + private static final KeyPair UNKNOWN_KEY = AthenzTestUtils.generateRsaKeypair(); + private static final AthenzPrincipal PRINCIPAL = new AthenzPrincipal(new AthensDomain("yby"), new UserId("user")); + + @Rule + public ExpectedException exceptionRule = ExpectedException.none(); + + @Test + public void valid_token_is_accepted() throws NoSuchAlgorithmException, InvalidTokenException { + NTokenValidator validator = new NTokenValidator(createKeystore()); + NToken token = createNToken(PRINCIPAL, System.currentTimeMillis(), TRUSTED_KEY, "0"); + AthenzPrincipal principal = validator.validate(token); + assertEquals("yby.user", principal.toYRN()); + } + + @Test + public void invalid_signature_is_not_accepted() throws InvalidTokenException { + NTokenValidator validator = new NTokenValidator(createKeystore()); + NToken token = createNToken(PRINCIPAL, System.currentTimeMillis(), UNKNOWN_KEY, "0"); + exceptionRule.expect(InvalidTokenException.class); + exceptionRule.expectMessage("NToken is expired or has invalid signature"); + validator.validate(token); + } + + @Test + public void expired_token_is_not_accepted() throws InvalidTokenException { + NTokenValidator validator = new NTokenValidator(createKeystore()); + NToken token = createNToken(PRINCIPAL, 1234 /*long time ago*/, TRUSTED_KEY, "0"); + exceptionRule.expect(InvalidTokenException.class); + exceptionRule.expectMessage("NToken is expired or has invalid signature"); + validator.validate(token); + } + + @Test + public void unknown_keyId_is_not_accepted() throws InvalidTokenException { + NTokenValidator validator = new NTokenValidator(createKeystore()); + NToken token = createNToken(PRINCIPAL, System.currentTimeMillis(), TRUSTED_KEY, "unknown-key-id"); + exceptionRule.expect(InvalidTokenException.class); + exceptionRule.expectMessage("NToken has an unknown keyId"); + validator.validate(token); + } + + @Test + public void failing_to_find_key_should_throw_exception() throws InvalidTokenException { + ZmsKeystore keystore = (athensService, keyId) -> { throw new RuntimeException(); }; + NTokenValidator validator = new NTokenValidator(keystore); + NToken token = createNToken(PRINCIPAL, System.currentTimeMillis(), TRUSTED_KEY, "0"); + exceptionRule.expect(InvalidTokenException.class); + exceptionRule.expectMessage("Failed to retrieve public key"); + validator.validate(token); + } + + private static ZmsKeystore createKeystore() { + return (athensService, keyId) -> + athensService.equals(ZMS_ATHENZ_SERVICE) && keyId.equals("0") + ? Optional.of(TRUSTED_KEY.getPublic()) + : Optional.empty(); + } + + private static NToken createNToken(AthenzPrincipal principal, long issueTime, KeyPair keyPair, String keyId) { + return new NToken.Builder("U1", principal, keyPair.getPrivate(), keyId) + .salt("1234") + .hostname("host") + .ip("1.2.3.4") + .issueTime(issueTime / 1000) + .expirationWindow(1000) + .build(); + } + +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java index be14947de2b..e45166b1c16 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentTester.java @@ -90,12 +90,17 @@ public class DeploymentTester { .filter(c -> c instanceof Change.VersionChange) .map(Change.VersionChange.class::cast); } + + public void updateVersionStatus() { + controller().updateVersionStatus(VersionStatus.compute(controller(), tester.controller().systemVersion())); + } public void updateVersionStatus(Version currentVersion) { controller().updateVersionStatus(VersionStatus.compute(controller(), currentVersion)); } public void upgradeSystem(Version version) { + controllerTester().configServer().setDefaultVersion(version); updateVersionStatus(version); upgrader().maintain(); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainerTest.java index 7ae89082660..13919cefd3b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ClusterInfoMaintainerTest.java @@ -31,7 +31,7 @@ public class ClusterInfoMaintainerTest { deployment = tester.controller().applications().get(app).get().deployments().values().stream().findAny().get(); Assert.assertEquals(2, deployment.clusterInfo().size()); - Assert.assertEquals(10, deployment.clusterInfo().get(ClusterSpec.Id.from("clusterA")).getCost()); + Assert.assertEquals(10, deployment.clusterInfo().get(ClusterSpec.Id.from("clusterA")).getFlavorCost()); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java new file mode 100644 index 00000000000..cb503fc1fb7 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/DeploymentMetricsMaintainerTest.java @@ -0,0 +1,41 @@ +package com.yahoo.vespa.hosted.controller.maintenance; + +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Environment; +import com.yahoo.vespa.hosted.controller.ControllerTester; +import com.yahoo.vespa.hosted.controller.application.Deployment; +import com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb; +import org.junit.Assert; +import org.junit.Test; + +import java.time.Duration; + +/** + * @author smorgrav + */ +public class DeploymentMetricsMaintainerTest { + + @Test + public void maintain() { + ControllerTester tester = new ControllerTester(); + ApplicationId app = tester.createAndDeploy("tenant1", "domain1", "app1", Environment.dev, 123).id(); + + // Pre condition: no metric info on the deployment + Deployment deployment = tester.controller().applications().get(app).get().deployments().values().stream().findAny().get(); + Assert.assertEquals(0, deployment.metrics().documentCount(), Double.MIN_VALUE); + + DeploymentMetricsMaintainer maintainer = new DeploymentMetricsMaintainer(tester.controller(), Duration.ofMinutes(10), new JobControl(new MockCuratorDb())); + maintainer.maintain(); + + // Post condition: + deployment = tester.controller().applications().get(app).get().deployments().values().stream().findAny().get(); + Assert.assertEquals(1, deployment.metrics().queriesPerSecond(), Double.MIN_VALUE); + Assert.assertEquals(2, deployment.metrics().writesPerSecond(), Double.MIN_VALUE); + Assert.assertEquals(3, deployment.metrics().documentCount(), Double.MIN_VALUE); + Assert.assertEquals(4, deployment.metrics().queryLatencyMillis(), Double.MIN_VALUE); + Assert.assertEquals(5, deployment.metrics().writeLatencyMillis(), Double.MIN_VALUE); + } + +}
\ No newline at end of file diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java index 286db864c22..4c935747ac6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/FailureRedeployerTest.java @@ -181,7 +181,7 @@ public class FailureRedeployerTest { // Current system version, matches version in test data Version version = Version.fromString("6.141.117"); - tester.configServer().setDefaultConfigServerVersion(version); + tester.configServer().setDefaultVersion(version); tester.updateVersionStatus(version); assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber()); @@ -200,7 +200,7 @@ public class FailureRedeployerTest { // New version is released version = Version.fromString("6.142.1"); - tester.configServer().setDefaultConfigServerVersion(version); + tester.configServer().setDefaultVersion(version); tester.updateVersionStatus(version); assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber()); tester.upgrader().maintain(); @@ -237,7 +237,7 @@ public class FailureRedeployerTest { // Current system version, matches version in test data Version version = Version.fromString("6.42.1"); - tester.configServer().setDefaultConfigServerVersion(version); + tester.configServer().setDefaultVersion(version); tester.updateVersionStatus(version); assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber()); @@ -262,7 +262,7 @@ public class FailureRedeployerTest { // Current system version, matches version in test data Version version = Version.fromString("6.42.1"); - tester.configServer().setDefaultConfigServerVersion(version); + tester.configServer().setDefaultVersion(version); tester.updateVersionStatus(version); assertEquals(version, tester.controller().versionStatus().systemVersion().get().versionNumber()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java index 3e73bf4445b..f7fd7cb6fb1 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializerTest.java @@ -20,6 +20,7 @@ import com.yahoo.vespa.hosted.controller.application.ClusterUtilization; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError; +import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; import com.yahoo.vespa.hosted.controller.application.JobStatus; import com.yahoo.vespa.hosted.controller.application.SourceRevision; import org.junit.Test; @@ -61,7 +62,7 @@ public class ApplicationSerializerTest { ApplicationRevision revision2 = ApplicationRevision.from("appHash2", new SourceRevision("repo1", "branch1", "commit1")); deployments.add(new Deployment(zone1, revision1, Version.fromString("1.2.3"), Instant.ofEpochMilli(3))); // One deployment without cluster info and utils deployments.add(new Deployment(zone2, revision2, Version.fromString("1.2.3"), Instant.ofEpochMilli(5), - createClusterUtils(3, 0.2), createClusterInfo(3, 4))); + createClusterUtils(3, 0.2), createClusterInfo(3, 4),new DeploymentMetrics(2,3,4,5,6))); Optional<Long> projectId = Optional.of(123L); List<JobStatus> statusList = new ArrayList<>(); @@ -118,10 +119,20 @@ public class ApplicationSerializerTest { // Test cluster info assertEquals(3, serialized.deployments().get(zone2).clusterInfo().size()); - assertEquals(10, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getCost()); + assertEquals(10, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getFlavorCost()); assertEquals(ClusterSpec.Type.content, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getClusterType()); assertEquals("flavor2", serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getFlavor()); assertEquals(4, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getHostnames().size()); + assertEquals(2, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getFlavorCPU(), Double.MIN_VALUE); + assertEquals(4, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getFlavorMem(), Double.MIN_VALUE); + assertEquals(50, serialized.deployments().get(zone2).clusterInfo().get(ClusterSpec.Id.from("id2")).getFlavorDisk(), Double.MIN_VALUE); + + // Test metrics + assertEquals(2, serialized.deployments().get(zone2).metrics().queriesPerSecond(), Double.MIN_VALUE); + assertEquals(3, serialized.deployments().get(zone2).metrics().writesPerSecond(), Double.MIN_VALUE); + assertEquals(4, serialized.deployments().get(zone2).metrics().documentCount(), Double.MIN_VALUE); + assertEquals(5, serialized.deployments().get(zone2).metrics().queryLatencyMillis(), Double.MIN_VALUE); + assertEquals(6, serialized.deployments().get(zone2).metrics().writeLatencyMillis(), Double.MIN_VALUE); { // test more deployment serialization cases Application original2 = original.withDeploying(Optional.of(Change.ApplicationChange.of(ApplicationRevision.from("hash1")))); @@ -153,7 +164,7 @@ public class ApplicationSerializerTest { } result.put(ClusterSpec.Id.from("id" + cluster), new ClusterInfo("flavor" + cluster, 10, - ClusterSpec.Type.content, hostnames)); + 2, 4, 50, ClusterSpec.Type.content, hostnames)); } return result; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java new file mode 100644 index 00000000000..feaf1289853 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java @@ -0,0 +1,53 @@ +package com.yahoo.vespa.hosted.controller.persistence; + +import com.yahoo.component.Version; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.vespa.hosted.controller.versions.DeploymentStatistics; +import com.yahoo.vespa.hosted.controller.versions.VersionStatus; +import com.yahoo.vespa.hosted.controller.versions.VespaVersion; +import org.junit.Test; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +/** + * @author mpolden + */ +public class VersionStatusSerializerTest { + + @Test + public void testSerialization() throws Exception { + List<VespaVersion> vespaVersions = new ArrayList<>(); + DeploymentStatistics statistics = new DeploymentStatistics( + Version.fromString("5.0"), + Arrays.asList(ApplicationId.from("tenant1", "failing1", "default")), + Arrays.asList(ApplicationId.from("tenant2", "success1", "default"), + ApplicationId.from("tenant2", "success2", "default")) + ); + vespaVersions.add(new VespaVersion(statistics, "dead", Instant.now(), false, + Arrays.asList("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); + vespaVersions.add(new VespaVersion(statistics, "cafe", Instant.now(), true, + Arrays.asList("cfg1", "cfg2", "cfg3"), VespaVersion.Confidence.normal)); + VersionStatus status = new VersionStatus(vespaVersions); + VersionStatusSerializer serializer = new VersionStatusSerializer(); + VersionStatus deserialized = serializer.fromSlime(serializer.toSlime(status)); + + assertEquals(status.versions().size(), deserialized.versions().size()); + for (int i = 0; i < status.versions().size(); i++) { + VespaVersion a = status.versions().get(i); + VespaVersion b = deserialized.versions().get(i); + assertEquals(a.releaseCommit(), b.releaseCommit()); + assertEquals(a.releasedAt(), b.releasedAt()); + assertEquals(a.isCurrentSystemVersion(), b.isCurrentSystemVersion()); + assertEquals(a.statistics(), b.statistics()); + assertEquals(a.configServerHostnames(), b.configServerHostnames()); + assertEquals(a.confidence(), b.confidence()); + } + + } + +} diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java index a792626d691..99381d538d5 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerControllerTester.java @@ -21,13 +21,11 @@ import com.yahoo.vespa.hosted.controller.api.identifiers.PropertyId; import com.yahoo.vespa.hosted.controller.api.identifiers.ScrewdriverId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.ZmsClientFactoryMock; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthensDbMock; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock; import com.yahoo.vespa.hosted.controller.maintenance.JobControl; import com.yahoo.vespa.hosted.controller.maintenance.Upgrader; import com.yahoo.vespa.hosted.controller.persistence.CuratorDb; @@ -97,14 +95,12 @@ public class ContainerControllerTester { } public AthensDomain addTenantAthensDomain(String domainName, String userName) { - Athens athens = (AthensMock) containerTester.container().components().getComponent( - "com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock" - ); - ZmsClientFactoryMock mock = (ZmsClientFactoryMock) athens.zmsClientFactory(); + AthenzClientFactoryMock mock = (AthenzClientFactoryMock) containerTester.container().components() + .getComponent(AthenzClientFactoryMock.class.getName()); AthensDomain athensDomain = new AthensDomain(domainName); AthensDbMock.Domain domain = new AthensDbMock.Domain(athensDomain); domain.markAsVespaTenant(); - domain.admin(new AthensPrincipal(new AthensDomain("domain"), new UserId(userName))); + domain.admin(new AthenzPrincipal(new AthensDomain("domain"), new UserId(userName))); mock.getSetup().addDomain(domain); return athensDomain; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java index fd07428126a..5c102b0d9df 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java @@ -36,7 +36,7 @@ public class ControllerContainerTest { " <system>main</system>" + " </config>" + " <component id='com.yahoo.vespa.hosted.controller.persistence.MockCuratorDb'/>" + - " <component id='com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock'/>" + + " <component id='com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock'/>" + " <component id='com.yahoo.vespa.hosted.controller.api.integration.chef.ChefMock'/>" + " <component id='com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService'/>" + " <component id='com.yahoo.vespa.hosted.controller.api.integration.entity.MemoryEntityService'/>" + diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 13b1165ccb2..0c9ebedc09b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -10,17 +10,17 @@ import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.ConfigServerClientMock; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.Athens; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensDbMock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock; -import com.yahoo.vespa.hosted.controller.api.integration.athens.mock.ZmsClientFactoryMock; import com.yahoo.vespa.hosted.controller.api.integration.configserver.ConfigServerException; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; import com.yahoo.vespa.hosted.controller.application.ClusterInfo; import com.yahoo.vespa.hosted.controller.application.ClusterUtilization; import com.yahoo.vespa.hosted.controller.application.Deployment; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; +import com.yahoo.vespa.hosted.controller.application.DeploymentMetrics; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.AthenzUtils; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthensDbMock; +import com.yahoo.vespa.hosted.controller.athenz.mock.AthenzClientFactoryMock; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester; import com.yahoo.vespa.hosted.controller.restapi.ContainerTester; @@ -54,7 +54,7 @@ public class ApplicationApiTest extends ControllerContainerTest { .region("corp-us-east-1") .build(); private static final String athensUserDomain = "domain1"; - private static final String athensScrewdriverDomain = "screwdriver-domain"; + private static final String athensScrewdriverDomain = AthenzUtils.SCREWDRIVER_DOMAIN.id(); @Test @@ -173,7 +173,7 @@ public class ApplicationApiTest extends ControllerContainerTest { tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1", "", Request.Method.GET), new File("application.json")); // GET an application deployment - addMockObservedApplicationCost(controllerTester); + setDeploymentMaintainedInfo(controllerTester); tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/environment/prod/region/corp-us-east-1/instance/default", "", Request.Method.GET), new File("deployment.json")); // POST a 'restart application' command @@ -671,14 +671,12 @@ public class ApplicationApiTest extends ControllerContainerTest { * mock setup to replicate the action. */ private AthensDomain addTenantAthensDomain(String domainName, String userName) { - Athens athens = (AthensMock) container.components().getComponent( - "com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock" - ); - ZmsClientFactoryMock mock = (ZmsClientFactoryMock) athens.zmsClientFactory(); + AthenzClientFactoryMock mock = (AthenzClientFactoryMock) container.components() + .getComponent(AthenzClientFactoryMock.class.getName()); AthensDomain athensDomain = new AthensDomain(domainName); AthensDbMock.Domain domain = new AthensDbMock.Domain(athensDomain); domain.markAsVespaTenant(); - domain.admin(new AthensPrincipal(new AthensDomain(athensUserDomain), new UserId(userName))); + domain.admin(AthenzUtils.createPrincipal(new UserId(userName))); mock.getSetup().addDomain(domain); return athensDomain; } @@ -688,12 +686,10 @@ public class ApplicationApiTest extends ControllerContainerTest { * mock setup to replicate the action. */ private void addScrewdriverUserToDomain(String screwdriverUserId, String domainName) { - Athens athens = (AthensMock) container.components().getComponent( - "com.yahoo.vespa.hosted.controller.api.integration.athens.mock.AthensMock" - ); - ZmsClientFactoryMock mock = (ZmsClientFactoryMock) athens.zmsClientFactory(); + AthenzClientFactoryMock mock = (AthenzClientFactoryMock) container.components() + .getComponent(AthenzClientFactoryMock.class.getName()); AthensDbMock.Domain domain = mock.getSetup().domains.get(new AthensDomain(domainName)); - domain.admin(new AthensPrincipal(new AthensDomain(athensScrewdriverDomain), new UserId(screwdriverUserId))); + domain.admin(new AthenzPrincipal(new AthensDomain(athensScrewdriverDomain), new UserId(screwdriverUserId))); } private void startAndTestChange(ContainerControllerTester controllerTester, ApplicationId application, long projectId, @@ -732,7 +728,14 @@ public class ApplicationApiTest extends ControllerContainerTest { controllerTester.notifyJobCompletion(application, projectId, true, DeploymentJobs.JobType.stagingTest); } - private void addMockObservedApplicationCost(ContainerControllerTester controllerTester) { + /** + * Cluster info, utilization and deployment metrics are maintained async by maintainers. + * + * This sets these values as if the maintainers has been ran. + * + * @param controllerTester + */ + private void setDeploymentMaintainedInfo(ContainerControllerTester controllerTester) { for (Application application : controllerTester.controller().applications().asList()) { try (Lock lock = controllerTester.controller().applications().lock(application.id())) { for (Deployment deployment : application.deployments().values()) { @@ -740,11 +743,12 @@ public class ApplicationApiTest extends ControllerContainerTest { List<String> hostnames = new ArrayList<>(); hostnames.add("host1"); hostnames.add("host2"); - clusterInfo.put(ClusterSpec.Id.from("cluster1"), new ClusterInfo("flavor1", 37, ClusterSpec.Type.content, hostnames)); + clusterInfo.put(ClusterSpec.Id.from("cluster1"), new ClusterInfo("flavor1", 37, 2, 4, 50, ClusterSpec.Type.content, hostnames)); Map<ClusterSpec.Id, ClusterUtilization> clusterUtils = new HashMap<>(); clusterUtils.put(ClusterSpec.Id.from("cluster1"), new ClusterUtilization(0.3, 0.6, 0.4, 0.3)); deployment = deployment.withClusterInfo(clusterInfo); deployment = deployment.withClusterUtils(clusterUtils); + deployment = deployment.withMetrics(new DeploymentMetrics(1,2,3,4,5)); application = application.with(deployment); controllerTester.controller().applications().store(application, lock); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MockAuthorizer.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MockAuthorizer.java index 16557157cf5..6f8dfc681ac 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MockAuthorizer.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/MockAuthorizer.java @@ -6,9 +6,10 @@ import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.TestIdentities; import com.yahoo.vespa.hosted.controller.api.identifiers.AthensDomain; import com.yahoo.vespa.hosted.controller.api.identifiers.UserId; -import com.yahoo.vespa.hosted.controller.api.integration.athens.AthensPrincipal; -import com.yahoo.vespa.hosted.controller.api.integration.athens.NToken; import com.yahoo.vespa.hosted.controller.api.integration.entity.EntityService; +import com.yahoo.vespa.hosted.controller.athenz.AthenzClientFactory; +import com.yahoo.vespa.hosted.controller.athenz.AthenzPrincipal; +import com.yahoo.vespa.hosted.controller.athenz.NToken; import javax.ws.rs.core.SecurityContext; import java.security.Principal; @@ -23,15 +24,15 @@ import java.util.Optional; @SuppressWarnings("unused") // injected public class MockAuthorizer extends Authorizer { - public MockAuthorizer(Controller controller, EntityService entityService) { - super(controller, entityService); + public MockAuthorizer(Controller controller, EntityService entityService, AthenzClientFactory athenzClientFactory) { + super(controller, entityService, athenzClientFactory); } /** Returns a principal given by the request parameters 'domain' and 'user' */ @Override public Optional<Principal> getPrincipalIfAny(HttpRequest request) { if (request.getProperty("user") == null) return Optional.empty(); - return Optional.of(new AthensPrincipal(new AthensDomain(request.getProperty("domain")), + return Optional.of(new AthenzPrincipal(new AthensDomain(request.getProperty("domain")), new UserId(request.getProperty("user")))); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json index 67fc48d4646..9174e7dd8b2 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment.json @@ -17,17 +17,21 @@ "gitBranch": "master", "gitCommit": "commit1", "cost": { - "tco": 37, - "utilization": 5.999999999999999, - "waste": 0.0, + "tco": 74, + "waste": 0, + "utilization": 2.999999999999999, "cluster": { "cluster1": { "count": 2, "resource": "cpu", "utilization": 2.999999999999999, - "tco": 37, - "flavor": "flavor1", + "tco": 74, "waste": 0, + "flavor": "flavor1", + "flavorCost":37.0, + "flavorCpu":2.0, + "flavorMem":4.0, + "flavorDisk":50.0, "type": "content", "util": { "cpu": 2.999999999999999, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json index e974c315eb2..3633860772b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/maintenance.json @@ -4,10 +4,7 @@ "name": "DelayedDeployer" }, { - "name": "ClusterUtilizationMaintainer" - }, - { - "name":"BlockedChangeDeployer" + "name": "BlockedChangeDeployer" }, { "name": "Upgrader" @@ -16,25 +13,31 @@ "name": "FailureRedeployer" }, { - "name": "ClusterInfoMaintainer" + "name": "VersionStatusUpdater" }, { - "name": "DeploymentExpirer" + "name": "DeploymentIssueReporter" }, { - "name": "MetricsReporter" + "name": "DeploymentMetricsMaintainer" }, { - "name": "VersionStatusUpdater" + "name": "OutstandingChangeDeployer" }, { - "name": "DeploymentIssueReporter" + "name": "ClusterUtilizationMaintainer" }, { - "name": "OutstandingChangeDeployer" + "name": "ClusterInfoMaintainer" + }, + { + "name": "DeploymentExpirer" + }, + { + "name": "MetricsReporter" } ], "inactive": [ "DeploymentExpirer" ] -} +}
\ No newline at end of file diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java index c002c7fb24a..55a4b46f4a7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java @@ -85,7 +85,8 @@ public class DeploymentApiTest extends ControllerContainerTest { version.releasedAt(), version.isCurrentSystemVersion(), ImmutableSet.of("config1.test", "config2.test"), - controller); + VespaVersion.confidenceFrom(version.statistics(), controller, version.releasedAt()) + ); censored.add(version); } return new VersionStatus(censored); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json index c2e83373cf7..00bd1ed8208 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/responses/root.json @@ -2,7 +2,7 @@ "versions": [ { "version": "(ignore)", - "confidence": "normal", + "confidence": "high", "commit": "(ignore)", "date": 0, "controllerVersion": false, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java index 7bbbf8f0499..17935906186 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java @@ -6,6 +6,7 @@ import com.yahoo.component.Vtag; import com.yahoo.config.provision.Environment; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.ApplicationController; +import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.application.ApplicationPackage; @@ -13,6 +14,7 @@ import com.yahoo.vespa.hosted.controller.application.DeploymentJobs; import com.yahoo.vespa.hosted.controller.application.DeploymentJobs.JobError; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; +import com.yahoo.vespa.hosted.controller.versions.VespaVersion.Confidence; import org.junit.Test; import java.net.URI; @@ -46,7 +48,7 @@ public class VersionStatusTest { public void testSystemVersionIsControllerVersionIfConfigserversAreNewer() { ControllerTester tester = new ControllerTester(); Version largerThanCurrent = new Version(Vtag.currentVersion.getMajor() + 1); - tester.configServer().setDefaultConfigServerVersion(largerThanCurrent); + tester.configServer().setDefaultVersion(largerThanCurrent); VersionStatus versionStatus = VersionStatus.compute(tester.controller()); assertEquals(Vtag.currentVersion, versionStatus.systemVersion().get().versionNumber()); } @@ -55,7 +57,7 @@ public class VersionStatusTest { public void testSystemVersionIsVersionOfOldestConfigServer() throws URISyntaxException { ControllerTester tester = new ControllerTester(); Version oldest = new Version(5); - tester.configServer().configServerVersions().put(new URI("http://cfg.prod.corp-us-east-1.test"), oldest); + tester.configServer().versions().put(new URI("http://cfg.prod.corp-us-east-1.test"), oldest); VersionStatus versionStatus = VersionStatus.compute(tester.controller()); assertEquals(oldest, versionStatus.systemVersion().get().versionNumber()); } @@ -70,7 +72,6 @@ public class VersionStatusTest { .region("us-east-3") .build(); - // Application versions which are older than the current version Version version1 = new Version("5.1"); Version version2 = new Version("5.2"); tester.upgradeSystem(version1); @@ -90,14 +91,9 @@ public class VersionStatusTest { // - app3 is in production on version1, but then fails in staging test on version2 tester.completeUpgradeWithError(app3, version2, applicationPackage, stagingTest); - VersionStatus versionStatus = VersionStatus.compute(tester.controller()); - List<VespaVersion> versions = versionStatus.versions(); - assertEquals("The version of this controller, the default config server version, plus the two versions above exist", 4, versions.size()); - - VespaVersion v0 = versions.get(2); - assertEquals(tester.configServer().getDefaultConfigServerVersion(), v0.versionNumber()); - assertEquals(0, v0.statistics().failing().size()); - assertEquals(0, v0.statistics().production().size()); + tester.updateVersionStatus(); + List<VespaVersion> versions = tester.controller().versionStatus().versions(); + assertEquals("The two versions above exist", 2, versions.size()); VespaVersion v1 = versions.get(0); assertEquals(version1, v1.versionNumber()); @@ -116,11 +112,6 @@ public class VersionStatusTest { // Only one application is on v2 in at least one zone assertEquals(1, v2.statistics().production().size()); assertTrue(v2.statistics().production().contains(app2.id())); - - VespaVersion v3 = versions.get(3); - assertEquals(Vtag.currentVersion, v3.versionNumber()); - assertEquals(0, v3.statistics().failing().size()); - assertEquals(0, v3.statistics().production().size()); } @Test @@ -130,7 +121,7 @@ public class VersionStatusTest { Version version0 = new Version("5.0"); tester.upgradeSystem(version0); - // Setup applications + // Setup applications - all running on version0 Application canary0 = tester.createAndDeploy("canary0", 1, "canary"); Application canary1 = tester.createAndDeploy("canary1", 2, "canary"); Application canary2 = tester.createAndDeploy("canary2", 3, "canary"); @@ -146,8 +137,7 @@ public class VersionStatusTest { Application default9 = tester.createAndDeploy("default9", 13, "default"); Application conservative0 = tester.createAndDeploy("conservative1", 14, "conservative"); - - // The following applications should not affect confidence calculation: + // Applications that do not affect confidence calculation: // Application without deployment Application ignored0 = tester.createApplication("ignored0", "tenant1", 1000, 1000L); @@ -157,30 +147,40 @@ public class VersionStatusTest { "ignored1", "default-pr42", 1000); + assertEquals("All applications running on this version: High", + Confidence.high, confidence(tester.controller(), version0)); + + // New version is released Version version1 = new Version("5.1"); - Version version2 = new Version("5.2"); tester.upgradeSystem(version1); // Canaries upgrade to new versions and fail tester.completeUpgrade(canary0, version1, "canary"); tester.completeUpgradeWithError(canary1, version1, "canary", productionUsWest1); - tester.upgradeSystem(version2); - tester.completeUpgrade(canary2, version2, "canary"); - - VersionStatus versionStatus = VersionStatus.compute(tester.controller()); - List<VespaVersion> versions = versionStatus.versions(); - + tester.updateVersionStatus(); assertEquals("One canary failed: Broken", - VespaVersion.Confidence.broken, confidence(versions, version1)); - assertEquals("Nothing has failed but not all canaries has deployed: Low", - VespaVersion.Confidence.low, confidence(versions, version2)); - assertEquals("Current version of this - no deployments: Low", - VespaVersion.Confidence.low, confidence(versions, Vtag.currentVersion)); + Confidence.broken, confidence(tester.controller(), version1)); - // All canaries are upgraded to version2 which raises confidence to normal and more apps upgrade + // New version is released + Version version2 = new Version("5.2"); + tester.upgradeSystem(version2); + assertEquals("Confidence defaults to low for version with no applications", + Confidence.low, confidence(tester.controller(), version2)); + + // All canaries upgrade successfully tester.completeUpgrade(canary0, version2, "canary"); tester.completeUpgrade(canary1, version2, "canary"); + + assertEquals("Confidence for remains unchanged for version1: Broken", + Confidence.broken, confidence(tester.controller(), version1)); + assertEquals("Nothing has failed but not all canaries have upgraded: Low", + Confidence.low, confidence(tester.controller(), version2)); + + // Remaining canary upgrades to version2 which raises confidence to normal and more apps upgrade + tester.completeUpgrade(canary2, version2, "canary"); tester.upgradeSystem(version2); + assertEquals("Canaries have upgraded: Normal", + Confidence.normal, confidence(tester.controller(), version2)); tester.completeUpgrade(default0, version2, "default"); tester.completeUpgrade(default1, version2, "default"); tester.completeUpgrade(default2, version2, "default"); @@ -189,29 +189,27 @@ public class VersionStatusTest { tester.completeUpgrade(default5, version2, "default"); tester.completeUpgrade(default6, version2, "default"); tester.completeUpgrade(default7, version2, "default"); + tester.updateVersionStatus(); - versionStatus = VersionStatus.compute(tester.controller()); - versions = versionStatus.versions(); + // Remember confidence across restart + tester.restartController(); - assertEquals("No deployments: Low", - VespaVersion.Confidence.low, confidence(versions, version0)); + assertEquals("Confidence remains unchanged for version0: High", + Confidence.high, confidence(tester.controller(), version0)); assertEquals("All canaries deployed + < 90% of defaults: Normal", - VespaVersion.Confidence.normal, confidence(versions, version2)); - assertEquals("Current version of this - no deployments: Low", - VespaVersion.Confidence.low, confidence(versions, Vtag.currentVersion)); + Confidence.normal, confidence(tester.controller(), version2)); + assertTrue("Status for version without applications is removed", + tester.controller().versionStatus().versions().stream() + .noneMatch(vespaVersion -> vespaVersion.versionNumber().equals(version1))); // Another default application upgrades, raising confidence to high tester.completeUpgrade(default8, version2, "default"); + tester.updateVersionStatus(); - versionStatus = VersionStatus.compute(tester.controller()); - versions = versionStatus.versions(); - - assertEquals("No deployments: Low", - VespaVersion.Confidence.low, confidence(versions, version0)); + assertEquals("Confidence remains unchanged for version0: High", + Confidence.high, confidence(tester.controller(), version0)); assertEquals("90% of defaults deployed successfully: High", - VespaVersion.Confidence.high, confidence(versions, version2)); - assertEquals("Current version of this - no deployments: Low", - VespaVersion.Confidence.low, confidence(versions, Vtag.currentVersion)); + VespaVersion.Confidence.high, confidence(tester.controller(), version2)); // A new version is released, all canaries upgrade successfully, but enough "default" apps fail to mark version // as broken @@ -225,16 +223,14 @@ public class VersionStatusTest { tester.completeUpgradeWithError(default1, version3, "default", stagingTest); tester.completeUpgradeWithError(default2, version3, "default", stagingTest); tester.completeUpgradeWithError(default9, version3, "default", stagingTest); + tester.updateVersionStatus(); - versionStatus = VersionStatus.compute(tester.controller()); - versions = versionStatus.versions(); - - assertEquals("No deployments: Low", - VespaVersion.Confidence.low, confidence(versions, version0)); + assertEquals("Confidence remains unchanged for version0: High", + Confidence.high, confidence(tester.controller(), version0)); + assertEquals("Confidence remains unchanged for version2: High", + Confidence.high, confidence(tester.controller(), version2)); assertEquals("40% of defaults failed: Broken", - VespaVersion.Confidence.broken, confidence(versions, version3)); - assertEquals("Current version of this - no deployments: Low", - VespaVersion.Confidence.low, confidence(versions, Vtag.currentVersion)); + VespaVersion.Confidence.broken, confidence(tester.controller(), version3)); } @Test @@ -260,8 +256,8 @@ public class VersionStatusTest { vespaVersions.stream().noneMatch(v -> v.versionNumber().equals(versionWithUnknownTag))); } - private VespaVersion.Confidence confidence(List<VespaVersion> versions, Version version) { - return versions.stream() + private Confidence confidence(Controller controller, Version version) { + return controller.versionStatus().versions().stream() .filter(v -> v.statistics().version().equals(version)) .findFirst() .map(VespaVersion::confidence) diff --git a/eval/src/apps/tensor_conformance/generate.cpp b/eval/src/apps/tensor_conformance/generate.cpp index 45ff6243d81..d3374665fd4 100644 --- a/eval/src/apps/tensor_conformance/generate.cpp +++ b/eval/src/apps/tensor_conformance/generate.cpp @@ -1,18 +1,222 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "generate.h" +#include <vespa/eval/eval/test/tensor_model.hpp> +#include <vespa/eval/eval/operation.h> +#include <vespa/eval/eval/aggr.h> +#include <vespa/vespalib/util/stringfmt.h> -using TensorSpec = vespalib::eval::TensorSpec; +using namespace vespalib::eval; +using namespace vespalib::eval::test; -TensorSpec spec(double value) { return TensorSpec("double").add({}, value); } +const double my_nan = std::numeric_limits<double>::quiet_NaN(); + +//----------------------------------------------------------------------------- + +void generate_reduce(Aggr aggr, const Sequence &seq, TestBuilder &dst) { + std::vector<Layout> layouts = { + {x(3)}, + {x(3),y(5)}, + {x(3),y(5),z(7)}, + {x({"a","b","c"})}, + {x({"a","b","c"}),y({"foo","bar"})}, + {x({"a","b","c"}),y({"foo","bar"}),z({"i","j","k","l"})}, + {x(3),y({"foo", "bar"}),z(7)}, + {x({"a","b","c"}),y(5),z({"i","j","k","l"})} + }; + for (const Layout &layout: layouts) { + TensorSpec input = spec(layout, seq); + for (const Domain &domain: layout) { + vespalib::string expr = vespalib::make_string("reduce(a,%s,%s)", + AggrNames::name_of(aggr)->c_str(), domain.dimension.c_str()); + dst.add(expr, {{"a", input}}); + } + { + vespalib::string expr = vespalib::make_string("reduce(a,%s)", AggrNames::name_of(aggr)->c_str()); + dst.add(expr, {{"a", input}}); + } + } +} + +void generate_tensor_reduce(TestBuilder &dst) { + generate_reduce(Aggr::AVG, N(), dst); + generate_reduce(Aggr::COUNT, N(), dst); + generate_reduce(Aggr::PROD, Sigmoid(N()), dst); + generate_reduce(Aggr::SUM, N(), dst); + generate_reduce(Aggr::MAX, N(), dst); + generate_reduce(Aggr::MIN, N(), dst); +} + +//----------------------------------------------------------------------------- + +void generate_map_expr(const vespalib::string &expr, const UnaryOperation &ref_op, const Sequence &seq, TestBuilder &dst) { + std::vector<Layout> layouts = { + {}, + {x(3)}, + {x(3),y(5)}, + {x(3),y(5),z(7)}, + {x({"a","b","c"})}, + {x({"a","b","c"}),y({"foo","bar"})}, + {x({"a","b","c"}),y({"foo","bar"}),z({"i","j","k","l"})}, + {x(3),y({"foo", "bar"}),z(7)}, + {x({"a","b","c"}),y(5),z({"i","j","k","l"})} + }; + for (const Layout &layout: layouts) { + dst.add(expr, {{"a", spec(layout, seq)}}, spec(layout, OpSeq(seq, ref_op))); + } +} + +void generate_op1_map(const vespalib::string &op1_expr, const UnaryOperation &ref_op, const Sequence &seq, TestBuilder &dst) { + generate_map_expr(op1_expr, ref_op, seq, dst); + generate_map_expr(vespalib::make_string("map(a,f(a)(%s))", op1_expr.c_str()), ref_op, seq, dst); +} + +void generate_tensor_map(TestBuilder &dst) { + generate_op1_map("-a", operation::Neg(), Sub2(Div10(N())), dst); + generate_op1_map("!a", operation::Not(), Mask2Seq(SkipNth(3)), dst); + generate_op1_map("cos(a)", operation::Cos(), Div10(N()), dst); + generate_op1_map("sin(a)", operation::Sin(), Div10(N()), dst); + generate_op1_map("tan(a)", operation::Tan(), Div10(N()), dst); + generate_op1_map("cosh(a)", operation::Cosh(), Div10(N()), dst); + generate_op1_map("sinh(a)", operation::Sinh(), Div10(N()), dst); + generate_op1_map("tanh(a)", operation::Tanh(), Div10(N()), dst); + generate_op1_map("acos(a)", operation::Acos(), Sigmoid(Div10(N())), dst); + generate_op1_map("asin(a)", operation::Asin(), Sigmoid(Div10(N())), dst); + generate_op1_map("atan(a)", operation::Atan(), Div10(N()), dst); + generate_op1_map("exp(a)", operation::Exp(), Div10(N()), dst); + generate_op1_map("log10(a)", operation::Log10(), Div10(N()), dst); + generate_op1_map("log(a)", operation::Log(), Div10(N()), dst); + generate_op1_map("sqrt(a)", operation::Sqrt(), Div10(N()), dst); + generate_op1_map("ceil(a)", operation::Ceil(), Div10(N()), dst); + generate_op1_map("fabs(a)", operation::Fabs(), Div10(N()), dst); + generate_op1_map("floor(a)", operation::Floor(), Div10(N()), dst); + generate_op1_map("isNan(a)", operation::IsNan(), Mask2Seq(SkipNth(3), 1.0, my_nan), dst); + generate_op1_map("relu(a)", operation::Relu(), Sub2(Div10(N())), dst); + generate_op1_map("sigmoid(a)", operation::Sigmoid(), Sub2(Div10(N())), dst); + generate_map_expr("map(a,f(a)((a+1)*2))", MyOp(), Div10(N()), dst); +} + +//----------------------------------------------------------------------------- + +void generate_join_expr(const vespalib::string &expr, const Sequence &seq, TestBuilder &dst) { + std::vector<Layout> layouts = { + {}, {}, + {x(5)}, {x(5)}, + {x(5)}, {x(3)}, + {x(5)}, {y(5)}, + {x(5)}, {x(5),y(5)}, + {x(3),y(5)}, {x(4),y(4)}, + {x(3),y(5)}, {y(5),z(7)}, + {x({"a","b","c"})}, {x({"a","b","c"})}, + {x({"a","b","c"})}, {x({"a","b"})}, + {x({"a","b","c"})}, {y({"foo","bar","baz"})}, + {x({"a","b","c"})}, {x({"a","b","c"}),y({"foo","bar","baz"})}, + {x({"a","b"}),y({"foo","bar","baz"})}, {x({"a","b","c"}),y({"foo","bar"})}, + {x({"a","b"}),y({"foo","bar","baz"})}, {y({"foo","bar"}),z({"i","j","k","l"})}, + {x(3),y({"foo", "bar"})}, {y({"foo", "bar"}),z(7)}, + {x({"a","b","c"}),y(5)}, {y(5),z({"i","j","k","l"})} + }; + ASSERT_TRUE((layouts.size() % 2) == 0); + for (size_t i = 0; i < layouts.size(); i += 2) { + auto a = spec(layouts[i], seq); + auto b = spec(layouts[i + 1], seq); + dst.add(expr, {{"a", a}, {"b", b}}); + } +} + +void generate_op2_join(const vespalib::string &op2_expr, const Sequence &seq, TestBuilder &dst) { + generate_join_expr(op2_expr, seq, dst); + generate_join_expr(vespalib::make_string("join(a,b,f(a,b)(%s))", op2_expr.c_str()), seq, dst); +} + +void generate_tensor_join(TestBuilder &dst) { + generate_op2_join("a+b", Div10(N()), dst); + generate_op2_join("a-b", Div10(N()), dst); + generate_op2_join("a*b", Div10(N()), dst); + generate_op2_join("a/b", Div10(N()), dst); + generate_op2_join("a%b", Div10(N()), dst); + generate_op2_join("a^b", Div10(N()), dst); + generate_op2_join("pow(a,b)", Div10(N()), dst); + generate_op2_join("a==b", Div10(N()), dst); + generate_op2_join("a!=b", Div10(N()), dst); + generate_op2_join("a~=b", Div10(N()), dst); + generate_op2_join("a<b", Div10(N()), dst); + generate_op2_join("a<=b", Div10(N()), dst); + generate_op2_join("a>b", Div10(N()), dst); + generate_op2_join("a>=b", Div10(N()), dst); + generate_op2_join("a&&b", Mask2Seq(SkipNth(3)), dst); + generate_op2_join("a||b", Mask2Seq(SkipNth(3)), dst); + generate_op2_join("atan2(a,b)", Div10(N()), dst); + generate_op2_join("ldexp(a,b)", Div10(N()), dst); + generate_op2_join("fmod(a,b)", Div10(N()), dst); + generate_op2_join("min(a,b)", Div10(N()), dst); + generate_op2_join("max(a,b)", Div10(N()), dst); + generate_join_expr("join(a,b,f(a,b)((a+b)/(a*b)))", Div10(N()), dst); +} + +//----------------------------------------------------------------------------- + +void generate_dot_product(TestBuilder &dst) { + dst.add("reduce(a*b,sum)", {{"a", spec(x(3), Seq({ 2, 3, 5 }))}, {"b", spec(x(3), Seq({ 7, 11, 13 }))}}, + spec((2 * 7) + (3 * 11) + (5 * 13))); + dst.add("reduce(a*b,sum)", {{"a", spec(x(2), Seq({ 2, 3 }))}, {"b", spec(x(3), Seq({ 7, 11, 13 }))}}, + spec((2 * 7) + (3 * 11))); + dst.add("reduce(a*b,sum)", {{"a", spec(x(3), Seq({ 2, 3, 5 }))}, {"b", spec(x(2), Seq({ 7, 11 }))}}, + spec((2 * 7) + (3 * 11))); +} + +//----------------------------------------------------------------------------- + +void generate_tensor_concat(TestBuilder &dst) { + dst.add("concat(a,b,x)", {{"a", spec(10.0)}, {"b", spec(20.0)}}, spec(x(2), Seq({10.0, 20.0}))); + dst.add("concat(a,b,x)", {{"a", spec(x(1), Seq({10.0}))}, {"b", spec(20.0)}}, spec(x(2), Seq({10.0, 20.0}))); + dst.add("concat(a,b,x)", {{"a", spec(10.0)}, {"b", spec(x(1), Seq({20.0}))}}, spec(x(2), Seq({10.0, 20.0}))); + dst.add("concat(a,b,x)", {{"a", spec(x(3), Seq({1.0, 2.0, 3.0}))}, {"b", spec(x(2), Seq({4.0, 5.0}))}}, + spec(x(5), Seq({1.0, 2.0, 3.0, 4.0, 5.0}))); + dst.add("concat(a,b,y)", {{"a", spec({x(2),y(2)}, Seq({1.0, 2.0, 3.0, 4.0}))}, {"b", spec(y(2), Seq({5.0, 6.0}))}}, + spec({x(2),y(4)}, Seq({1.0, 2.0, 5.0, 6.0, 3.0, 4.0, 5.0, 6.0}))); + dst.add("concat(a,b,x)", {{"a", spec({x(2),y(2)}, Seq({1.0, 2.0, 3.0, 4.0}))}, {"b", spec(x(2), Seq({5.0, 6.0}))}}, + spec({x(4),y(2)}, Seq({1.0, 2.0, 3.0, 4.0, 5.0, 5.0, 6.0, 6.0}))); + dst.add("concat(a,b,x)", {{"a", spec(z(3), Seq({1.0, 2.0, 3.0}))}, {"b", spec(y(2), Seq({4.0, 5.0}))}}, + spec({x(2),y(2),z(3)}, Seq({1.0, 2.0, 3.0, 1.0, 2.0, 3.0, 4.0, 4.0, 4.0, 5.0, 5.0, 5.0}))); + dst.add("concat(a,b,x)", {{"a", spec(y(3), Seq({1.0, 2.0, 3.0}))}, {"b", spec(y(2), Seq({4.0, 5.0}))}}, + spec({x(2), y(2)}, Seq({1.0, 2.0, 4.0, 5.0}))); +} + +//----------------------------------------------------------------------------- + +void generate_tensor_rename(TestBuilder &dst) { + dst.add("rename(a,x,y)", {{"a", spec(x(5), N())}}, spec(y(5), N())); + dst.add("rename(a,y,x)", {{"a", spec({y(5),z(5)}, N())}}, spec({x(5),z(5)}, N())); + dst.add("rename(a,z,x)", {{"a", spec({y(5),z(5)}, N())}}, spec({y(5),x(5)}, N())); + dst.add("rename(a,x,z)", {{"a", spec({x(5),y(5)}, N())}}, spec({z(5),y(5)}, N())); + dst.add("rename(a,y,z)", {{"a", spec({x(5),y(5)}, N())}}, spec({x(5),z(5)}, N())); + dst.add("rename(a,(x,y),(y,x))", {{"a", spec({x(5),y(5)}, N())}}, spec({y(5),x(5)}, N())); +} + +//----------------------------------------------------------------------------- + +void generate_tensor_lambda(TestBuilder &dst) { + dst.add("tensor(x[10])(x+1)", {{}}, spec(x(10), N())); + dst.add("tensor(x[5],y[4])(x*4+(y+1))", {{}}, spec({x(5),y(4)}, N())); + dst.add("tensor(x[5],y[4])(x==y)", {{}}, spec({x(5),y(4)}, + Seq({ 1.0, 0.0, 0.0, 0.0, + 0.0, 1.0, 0.0, 0.0, + 0.0, 0.0, 1.0, 0.0, + 0.0, 0.0, 0.0, 1.0, + 0.0, 0.0, 0.0, 0.0}))); +} + +//----------------------------------------------------------------------------- void Generator::generate(TestBuilder &dst) { - // smoke tests with expected result - dst.add("a+a", {{"a", spec(2.0)}}, spec(4.0)); - dst.add("a*b", {{"a", spec(2.0)}, {"b", spec(3.0)}}, spec(6.0)); - dst.add("(a+b)*(a-b)", {{"a", spec(5.0)}, {"b", spec(2.0)}}, spec(21.0)); - // smoke test without expected result - dst.add("(a-b)/(a+b)", {{"a", spec(5.0)}, {"b", spec(2.0)}}); + generate_tensor_reduce(dst); + generate_tensor_map(dst); + generate_tensor_join(dst); + generate_dot_product(dst); + generate_tensor_concat(dst); + generate_tensor_rename(dst); + generate_tensor_lambda(dst); } diff --git a/eval/src/apps/tensor_conformance/tensor_conformance.cpp b/eval/src/apps/tensor_conformance/tensor_conformance.cpp index cfe9542ecda..f594bdc207f 100644 --- a/eval/src/apps/tensor_conformance/tensor_conformance.cpp +++ b/eval/src/apps/tensor_conformance/tensor_conformance.cpp @@ -250,8 +250,8 @@ void for_each_test(Input &in, while (in.obtain().size > 0) { Slime slime; if (JsonFormat::decode(in, slime)) { - bool is_test = slime.get()["expression"].valid(); - bool is_summary = slime.get()["num_tests"].valid(); + bool is_test = slime["expression"].valid(); + bool is_summary = slime["num_tests"].valid(); ASSERT_TRUE(is_test != is_summary); if (is_test) { ++num_tests; @@ -259,7 +259,7 @@ void for_each_test(Input &in, handle_test(slime); } else { got_summary = true; - ASSERT_EQUAL(slime.get()["num_tests"].asLong(), int64_t(num_tests)); + ASSERT_EQUAL(slime["num_tests"].asLong(), int64_t(num_tests)); handle_summary(slime); } } else { @@ -274,7 +274,7 @@ void for_each_test(Input &in, void evaluate(Input &in, Output &out) { auto handle_test = [&out](Slime &slime) { - insert_value(slime.get()["result"], "prod_cpp", + insert_value(slime["result"], "prod_cpp", eval_expr(slime.get(), DefaultTensorEngine::ref())); write_compact(slime, out); }; @@ -300,10 +300,10 @@ void verify(Input &in, Output &out) { auto handle_test = [&out,&result_map](Slime &slime) { TensorSpec reference_result = eval_expr(slime.get(), SimpleTensorEngine::ref()); - for (const auto &result: extract_fields(slime.get()["result"])) { + for (const auto &result: extract_fields(slime["result"])) { ++result_map[result]; TEST_STATE(make_string("verifying result: '%s'", result.c_str()).c_str()); - if (!EXPECT_EQUAL(reference_result, extract_value(slime.get()["result"][result]))) { + if (!EXPECT_EQUAL(reference_result, extract_value(slime["result"][result]))) { dump_test(slime.get()); } } diff --git a/eval/src/apps/tensor_conformance/test_spec.json b/eval/src/apps/tensor_conformance/test_spec.json index c66931c2df8..286cc428cd9 100644 --- a/eval/src/apps/tensor_conformance/test_spec.json +++ b/eval/src/apps/tensor_conformance/test_spec.json @@ -1,5 +1,1209 @@ -{"expression":"a+a","inputs":{"a":"0x02004000000000000000"},"result":{"expect":"0x02004010000000000000"}} -{"expression":"a*b","inputs":{"a":"0x02004000000000000000","b":"0x02004008000000000000"},"result":{"expect":"0x02004018000000000000"}} -{"expression":"(a+b)*(a-b)","inputs":{"a":"0x02004014000000000000","b":"0x02004000000000000000"},"result":{"expect":"0x02004035000000000000"}} -{"expression":"(a-b)/(a+b)","inputs":{"a":"0x02004014000000000000","b":"0x02004000000000000000"},"result":{"expect":"0x02003FDB6DB6DB6DB6DB"}} -{"num_tests":4} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004000000000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004000000000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x02010179054018000000000000401C000000000000402000000000000040220000000000004024000000000000"}} +{"expression":"reduce(a,avg,y)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x020101780340080000000000004020000000000000402A000000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x02004020000000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017905017A074042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C00000000000405100000000000040514000000000004051800000000000"}} +{"expression":"reduce(a,avg,y)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017A07402E00000000000040300000000000004031000000000000403200000000000040330000000000004034000000000000403500000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C00000000000"}} +{"expression":"reduce(a,avg,z)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x02020178030179054010000000000000402600000000000040320000000000004039000000000000404000000000000040438000000000004047000000000000404A800000000000404E0000000000004050C000000000004052800000000000405440000000000040560000000000004057C000000000004059800000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0200404A800000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004000000000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004000000000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101790203626172401000000000000003666F6F4008000000000000"}} +{"expression":"reduce(a,avg,y)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101780301613FF80000000000000162400C00000000000001634016000000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x0200400C000000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020179017A08036261720169402A00000000000003626172016A402C00000000000003626172016B402E00000000000003626172016C403000000000000003666F6F0169402200000000000003666F6F016A402400000000000003666F6F016B402600000000000003666F6F016C4028000000000000"}} +{"expression":"reduce(a,avg,y)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017A0C0161016940080000000000000161016A40100000000000000161016B40140000000000000161016C40180000000000000162016940260000000000000162016A40280000000000000162016B402A0000000000000162016C402C0000000000000163016940330000000000000163016A40340000000000000163016B40350000000000000163016C4036000000000000"}} +{"expression":"reduce(a,avg,z)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017906016103626172401A000000000000016103666F6F4004000000000000016203626172402D000000000000016203666F6F40250000000000000163036261724036800000000000016303666F6F4032800000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x02004029000000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017A0702036261724036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C00000000000003666F6F402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000"}} +{"expression":"reduce(a,avg,y)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0202017803017A0740120000000000004016000000000000401A000000000000401E000000000000402100000000000040230000000000004025000000000000403280000000000040338000000000004034800000000000403580000000000040368000000000004037800000000000403880000000000040404000000000004040C0000000000040414000000000004041C0000000000040424000000000004042C000000000004043400000000000"}} +{"expression":"reduce(a,avg,z)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017803020362617240260000000000004039000000000000404380000000000003666F6F401000000000000040320000000000004040000000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x02004035800000000000"}} +{"expression":"reduce(a,avg,x)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0301017A0101790504016940350000000000004039000000000000403D00000000000040408000000000004042800000000000016A4036000000000000403A000000000000403E00000000000040410000000000004043000000000000016B4037000000000000403B000000000000403F00000000000040418000000000004043800000000000016C4038000000000000403C000000000000404000000000000040420000000000004044000000000000"}} +{"expression":"reduce(a,avg,y)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x01020178017A0C0161016940220000000000000161016A40240000000000000161016B40260000000000000161016C402800000000000001620169403D0000000000000162016A403E0000000000000162016B403F0000000000000162016C40400000000000000163016940488000000000000163016A40490000000000000163016B40498000000000000163016C404A000000000000"}} +{"expression":"reduce(a,avg,z)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x03010178010179050301614004000000000000401A0000000000004025000000000000402D000000000000403280000000000001624036800000000000403A800000000000403E800000000000404140000000000040434000000000000163404540000000000040474000000000004049400000000000404B400000000000404D400000000000"}} +{"expression":"reduce(a,avg)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0200403E800000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x020101790540080000000000004008000000000000400800000000000040080000000000004008000000000000"}} +{"expression":"reduce(a,count,y)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x0201017803401400000000000040140000000000004014000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x0200402E000000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017905017A0740080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000"}} +{"expression":"reduce(a,count,y)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017A07401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000"}} +{"expression":"reduce(a,count,z)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017905401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0200405A400000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101790203626172400800000000000003666F6F4008000000000000"}} +{"expression":"reduce(a,count,y)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x0101017803016140000000000000000162400000000000000001634000000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x02004018000000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020179017A08036261720169400800000000000003626172016A400800000000000003626172016B400800000000000003626172016C400800000000000003666F6F0169400800000000000003666F6F016A400800000000000003666F6F016B400800000000000003666F6F016C4008000000000000"}} +{"expression":"reduce(a,count,y)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017A0C0161016940000000000000000161016A40000000000000000161016B40000000000000000161016C40000000000000000162016940000000000000000162016A40000000000000000162016B40000000000000000162016C40000000000000000163016940000000000000000163016A40000000000000000163016B40000000000000000163016C4000000000000000"}} +{"expression":"reduce(a,count,z)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x010201780179060161036261724010000000000000016103666F6F40100000000000000162036261724010000000000000016203666F6F40100000000000000163036261724010000000000000016303666F6F4010000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x02004038000000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017A070203626172400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000003666F6F4008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000"}} +{"expression":"reduce(a,count,y)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0202017803017A07400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000"}} +{"expression":"reduce(a,count,z)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x03010179010178030203626172401C000000000000401C000000000000401C00000000000003666F6F401C000000000000401C000000000000401C000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x02004045000000000000"}} +{"expression":"reduce(a,count,x)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0301017A0101790504016940080000000000004008000000000000400800000000000040080000000000004008000000000000016A40080000000000004008000000000000400800000000000040080000000000004008000000000000016B40080000000000004008000000000000400800000000000040080000000000004008000000000000016C40080000000000004008000000000000400800000000000040080000000000004008000000000000"}} +{"expression":"reduce(a,count,y)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x01020178017A0C0161016940140000000000000161016A40140000000000000161016B40140000000000000161016C40140000000000000162016940140000000000000162016A40140000000000000162016B40140000000000000162016C40140000000000000163016940140000000000000163016A40140000000000000163016B40140000000000000163016C4014000000000000"}} +{"expression":"reduce(a,count,z)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x030101780101790503016140100000000000004010000000000000401000000000000040100000000000004010000000000000016240100000000000004010000000000000401000000000000040100000000000004010000000000000016340100000000000004010000000000000401000000000000040100000000000004010000000000000"}} +{"expression":"reduce(a,count)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0200404E000000000000"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x02010178033FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD"},"result":{"expect":"0x02003FE3A0C6D6CDDF1C"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x02010178033FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD"},"result":{"expect":"0x02003FE3A0C6D6CDDF1C"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x02020178030179053FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E39"},"result":{"expect":"0x02010179053FE755EC89C2D9973FEC28DF270AB4843FEE78DA4B7665D13FEF6BA85949A8FF3FEFC8CCDE39ABB0"}} +{"expression":"reduce(a,prod,y)","inputs":{"a":"0x02020178030179053FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E39"},"result":{"expect":"0x02010178033FE3255FF45BC60C3FEFE02F161461673FEFFFC8F6CE767E"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x02020178030179053FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E39"},"result":{"expect":"0x02003FE31235F3827378"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x0203017803017905017A073FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0202017905017A073FE764D4F5D5A2BC3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA"}} +{"expression":"reduce(a,prod,y)","inputs":{"a":"0x0203017803017905017A073FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0202017803017A073FE762D25A1D34B23FEC2E9937280B433FEE7B21F6215AF13FEF6C85C1C891CA3FEFC91F437A7BCC3FEFEBB9CCF1B66A3FEFF887A4B0D8603FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"reduce(a,prod,z)","inputs":{"a":"0x0203017803017905017A073FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02020178030179053FE314CD1BECD3773FEFFBA87FF697C23FEFFFFEFC6DCB133FEFFFFFFFC367BC3FEFFFFFFFFFF1DA3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x0203017803017905017A073FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02003FE31235BA8C31C4"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x010101780301613FE764D4F5D5A2BD01623FEC2F7D5A8A79C901633FEE7B7CBC36FABD"},"result":{"expect":"0x02003FE3A0C6D6CDDF1C"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x010101780301613FE764D4F5D5A2BD01623FEC2F7D5A8A79C901633FEE7B7CBC36FABD"},"result":{"expect":"0x02003FE3A0C6D6CDDF1C"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x010201780179060161036261723FEC2F7D5A8A79C9016103666F6F3FE764D4F5D5A2BD0162036261723FEF6CA82F0DE1EA016203666F6F3FEE7B7CBC36FABD0163036261723FEFEBBE888D0581016303666F6F3FEFC92C130538E2"},"result":{"expect":"0x0101017902036261723FEB9C30A7B9060803666F6F3FE6229FF7F09CEC"}} +{"expression":"reduce(a,prod,y)","inputs":{"a":"0x010201780179060161036261723FEC2F7D5A8A79C9016103666F6F3FE764D4F5D5A2BD0162036261723FEF6CA82F0DE1EA016203666F6F3FEE7B7CBC36FABD0163036261723FEFEBBE888D0581016303666F6F3FEFC92C130538E2"},"result":{"expect":"0x010101780301613FE49AF213F4B34901623FEDEF21D071F12801633FEFB50D50317D96"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x010201780179060161036261723FEC2F7D5A8A79C9016103666F6F3FE764D4F5D5A2BD0162036261723FEF6CA82F0DE1EA016203666F6F3FEE7B7CBC36FABD0163036261723FEFEBBE888D0581016303666F6F3FEFC92C130538E2"},"result":{"expect":"0x02003FE319416D005C7C"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x010301780179017A1801610362617201693FEFC92C130538E2016103626172016A3FEFEBBE888D0581016103626172016B3FEFF889631D483C016103626172016C3FEFFD40B84505A2016103666F6F01693FE764D4F5D5A2BD016103666F6F016A3FEC2F7D5A8A79C9016103666F6F016B3FEE7B7CBC36FABD016103666F6F016C3FEF6CA82F0DE1EA01620362617201693FEFFFFB427F64DC016203626172016A3FEFFFFE4193A878016203626172016B3FEFFFFF5BC51E39016203626172016C3FEFFFFFC39548FC016203666F6F01693FEFFEFD390A9CC1016203666F6F016A3FEFFFA0CB346F89016203666F6F016B3FEFFFDCF97E0F4A016203666F6F016C3FEFFFF31D5F129E01630362617201693FEFFFFFFF97C93C016303626172016A3FEFFFFFFFD9A96E016303626172016B3FEFFFFFFFF1E56C016303626172016C3FEFFFFFFFFACFBE016303666F6F01693FEFFFFFE9C61CF7016303666F6F016A3FEFFFFFF7D2CEBC016303666F6F016B3FEFFFFFFCFDF520016303666F6F016C3FEFFFFFFEE4B79A"},"result":{"expect":"0x01020179017A080362617201693FEFC9275D3C474103626172016A3FEFEBBCCB1504B303626172016B3FEFF888BEFA9CCB03626172016C3FEFFD407BDA4E9E03666F6F01693FE76417B72E39DD03666F6F016A3FEC2F2977DA44B303666F6F016B3FEE7B5B5C161BC003666F6F016C3FEF6C9B86AB347B"}} +{"expression":"reduce(a,prod,y)","inputs":{"a":"0x010301780179017A1801610362617201693FEFC92C130538E2016103626172016A3FEFEBBE888D0581016103626172016B3FEFF889631D483C016103626172016C3FEFFD40B84505A2016103666F6F01693FE764D4F5D5A2BD016103666F6F016A3FEC2F7D5A8A79C9016103666F6F016B3FEE7B7CBC36FABD016103666F6F016C3FEF6CA82F0DE1EA01620362617201693FEFFFFB427F64DC016203626172016A3FEFFFFE4193A878016203626172016B3FEFFFFF5BC51E39016203626172016C3FEFFFFFC39548FC016203666F6F01693FEFFEFD390A9CC1016203666F6F016A3FEFFFA0CB346F89016203666F6F016B3FEFFFDCF97E0F4A016203666F6F016C3FEFFFF31D5F129E01630362617201693FEFFFFFFF97C93C016303626172016A3FEFFFFFFFD9A96E016303626172016B3FEFFFFFFFF1E56C016303626172016C3FEFFFFFFFFACFBE016303666F6F01693FEFFFFFE9C61CF7016303666F6F016A3FEFFFFFF7D2CEBC016303666F6F016B3FEFFFFFFCFDF520016303666F6F016C3FEFFFFFFEE4B79A"},"result":{"expect":"0x01020178017A0C016101693FE73CBFE05B9D5C0161016A3FEC1DA6028563590161016B3FEE7460BC1FE1680161016C3FEF69F58D8E659A016201693FEFFEF87BB056F30162016A3FEFFF9F0CCD48330162016B3FEFFFDC5543E1450162016C3FEFFFF2E0F473EE016301693FEFFFFFE95DE6330163016A3FEFFFFFF7AC782A0163016B3FEFFFFFFCEFDA8C0163016C3FEFFFFFFEDF8758"}} +{"expression":"reduce(a,prod,z)","inputs":{"a":"0x010301780179017A1801610362617201693FEFC92C130538E2016103626172016A3FEFEBBE888D0581016103626172016B3FEFF889631D483C016103626172016C3FEFFD40B84505A2016103666F6F01693FE764D4F5D5A2BD016103666F6F016A3FEC2F7D5A8A79C9016103666F6F016B3FEE7B7CBC36FABD016103666F6F016C3FEF6CA82F0DE1EA01620362617201693FEFFFFB427F64DC016203626172016A3FEFFFFE4193A878016203626172016B3FEFFFFF5BC51E39016203626172016C3FEFFFFFC39548FC016203666F6F01693FEFFEFD390A9CC1016203666F6F016A3FEFFFA0CB346F89016203666F6F016B3FEFFFDCF97E0F4A016203666F6F016C3FEFFFF31D5F129E01630362617201693FEFFFFFFF97C93C016303626172016A3FEFFFFFFFD9A96E016303626172016B3FEFFFFFFFF1E56C016303626172016C3FEFFFFFFFFACFBE016303666F6F01693FEFFFFFE9C61CF7016303666F6F016A3FEFFFFFF7D2CEBC016303666F6F016B3FEFFFFFFCFDF520016303666F6F016C3FEFFFFFFEE4B79A"},"result":{"expect":"0x010201780179060161036261723FEFAAEFF82A7803016103666F6F3FE34666681CF69B0162036261723FEFFFF8A36DE565016203666F6F3FEFFE6E203E29E40163036261723FEFFFFFFF5E27D4016303666F6F3FEFFFFFDD7B9877"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x010301780179017A1801610362617201693FEFC92C130538E2016103626172016A3FEFEBBE888D0581016103626172016B3FEFF889631D483C016103626172016C3FEFFD40B84505A2016103666F6F01693FE764D4F5D5A2BD016103666F6F016A3FEC2F7D5A8A79C9016103666F6F016B3FEE7B7CBC36FABD016103666F6F016C3FEF6CA82F0DE1EA01620362617201693FEFFFFB427F64DC016203626172016A3FEFFFFE4193A878016203626172016B3FEFFFFF5BC51E39016203626172016C3FEFFFFFC39548FC016203666F6F01693FEFFEFD390A9CC1016203666F6F016A3FEFFFA0CB346F89016203666F6F016B3FEFFFDCF97E0F4A016203666F6F016C3FEFFFF31D5F129E01630362617201693FEFFFFFFF97C93C016303626172016A3FEFFFFFFFD9A96E016303626172016B3FEFFFFFFFF1E56C016303626172016C3FEFFFFFFFFACFBE016303666F6F01693FEFFFFFE9C61CF7016303666F6F016A3FEFFFFFF7D2CEBC016303666F6F016B3FEFFFFFFCFDF520016303666F6F016C3FEFFFFFFEE4B79A"},"result":{"expect":"0x02003FE31235BA8DFE78"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x0301017902017803017A0702036261723FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F3FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA"},"result":{"expect":"0x0301017901017A0702036261723FEFFD40B81EB2593FEFFEFD38FC829F3FEFFFA0CB2F3F563FEFFFDCF97C26A83FEFFFF31D5E5EDC3FEFFFFB427F22BA3FEFFFFE4193902403666F6F3FE764D47DC5CCF53FEC2F7D25536D573FEE7B7CA70AEF9A3FEF6CA8270656413FEFC92C100855363FEFEBBE8772705C3FEFF88962B529C0"}} +{"expression":"reduce(a,prod,y)","inputs":{"a":"0x0301017902017803017A0702036261723FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F3FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA"},"result":{"expect":"0x0202017803017A073FE762D2D23EC0703FEC2E996C69D52A3FEE7B220B52184C3FEF6C85C9D1F4823FEFC91F467810D23FEFEBB9CE0C8D5D3FEFF887A5190F233FEFFFFF5B9EC7A83FEFFFFFC3872E683FEFFFFFE9C0ECB53FEFFFFFF7D0E6183FEFFFFFFCFD415E3FEFFFFFFEE475783FEFFFFFFF97B0E83FEFFFFFFFFFF70A3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA"}} +{"expression":"reduce(a,prod,z)","inputs":{"a":"0x0301017902017803017A0702036261723FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F3FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA"},"result":{"expect":"0x030101790101780302036261723FEFFBA87FF697C23FEFFFFFFFC367BC3FEFFFFFFFFFFFFE03666F6F3FE314CD1BECD3773FEFFFFEFC6DCB143FEFFFFFFFFFF1DA"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x0301017902017803017A0702036261723FEFFD40B84505A23FEFFEFD390A9CC13FEFFFA0CB346F893FEFFFDCF97E0F4A3FEFFFF31D5F129E3FEFFFFB427F64DC3FEFFFFE4193A8783FEFFFFFFFD9A96E3FEFFFFFFFF1E56C3FEFFFFFFFFACFBE3FEFFFFFFFFE175C3FEFFFFFFFFF4C3E3FEFFFFFFFFFBDDE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFFFE3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F3FE764D4F5D5A2BD3FEC2F7D5A8A79C93FEE7B7CBC36FABD3FEF6CA82F0DE1EA3FEFC92C130538E23FEFEBBE888D05813FEFF889631D483C3FEFFFFF5BC51E393FEFFFFFC39548FC3FEFFFFFE9C61CF73FEFFFFFF7D2CEBC3FEFFFFFFCFDF5203FEFFFFFFEE4B79A3FEFFFFFFF97C93C3FEFFFFFFFFFF70C3FEFFFFFFFFFFCB63FEFFFFFFFFFFECA3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFD63FEFFFFFFFFFFFF03FEFFFFFFFFFFFFA"},"result":{"expect":"0x02003FE31235BA8C31C5"}} +{"expression":"reduce(a,prod,x)","inputs":{"a":"0x03020178017A010179050C016101693FE764D4F5D5A2BD3FEFC92C130538E23FEFFEFD390A9CC13FEFFFFB427F64DC3FEFFFFFE9C61CF70161016A3FEC2F7D5A8A79C93FEFEBBE888D05813FEFFFA0CB346F893FEFFFFE4193A8783FEFFFFFF7D2CEBC0161016B3FEE7B7CBC36FABD3FEFF889631D483C3FEFFFDCF97E0F4A3FEFFFFF5BC51E393FEFFFFFFCFDF5200161016C3FEF6CA82F0DE1EA3FEFFD40B84505A23FEFFFF31D5F129E3FEFFFFFC39548FC3FEFFFFFFEE4B79A016201693FEFFFFFFF97C93C3FEFFFFFFFFE175C3FEFFFFFFFFFF70C3FEFFFFFFFFFFFD63FF00000000000000162016A3FEFFFFFFFD9A96E3FEFFFFFFFFF4C3E3FEFFFFFFFFFFCB63FEFFFFFFFFFFFF03FF00000000000000162016B3FEFFFFFFFF1E56C3FEFFFFFFFFFBDDE3FEFFFFFFFFFFECA3FEFFFFFFFFFFFFA3FF00000000000000162016C3FEFFFFFFFFACFBE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFFE3FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0301017A010179050401693FE764D4F58972FF3FEFC92C130353833FEFFEFD390A93CD3FEFFFFB427F64B23FEFFFFFE9C61CF7016A3FEC2F7D5A68B5243FEFEBBE888C52313FEFFFA0CB346C3F3FEFFFFE4193A8683FEFFFFFF7D2CEBC016B3FEE7B7CBC298B653FEFF889631D06293FEFFFDCF97E0E143FEFFFFF5BC51E333FEFFFFFFCFDF520016C3FEF6CA82F08C98C3FEFFD40B844ED503FEFFFF31D5F122C3FEFFFFFC39548FA3FEFFFFFFEE4B79A"}} +{"expression":"reduce(a,prod,y)","inputs":{"a":"0x03020178017A010179050C016101693FE764D4F5D5A2BD3FEFC92C130538E23FEFFEFD390A9CC13FEFFFFB427F64DC3FEFFFFFE9C61CF70161016A3FEC2F7D5A8A79C93FEFEBBE888D05813FEFFFA0CB346F893FEFFFFE4193A8783FEFFFFFF7D2CEBC0161016B3FEE7B7CBC36FABD3FEFF889631D483C3FEFFFDCF97E0F4A3FEFFFFF5BC51E393FEFFFFFFCFDF5200161016C3FEF6CA82F0DE1EA3FEFFD40B84505A23FEFFFF31D5F129E3FEFFFFFC39548FC3FEFFFFFFEE4B79A016201693FEFFFFFFF97C93C3FEFFFFFFFFE175C3FEFFFFFFFFFF70C3FEFFFFFFFFFFFD63FF00000000000000162016A3FEFFFFFFFD9A96E3FEFFFFFFFFF4C3E3FEFFFFFFFFFFCB63FEFFFFFFFFFFFF03FF00000000000000162016B3FEFFFFFFFF1E56C3FEFFFFFFFFFBDDE3FEFFFFFFFFFFECA3FEFFFFFFFFFFFFA3FF00000000000000162016C3FEFFFFFFFFACFBE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFFE3FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x01020178017A0C016101693FE73C0074DAE91E0161016A3FEC1D50CCB69E9E0161016B3FEE743EC77BF1470161016C3FEF69E8AAF29095016201693FEFFFFFFF95D77A0162016A3FEFFFFFFFD8F2520162016B3FEFFFFFFFF1A20E0162016C3FEFFFFFFFFAB6F6016301693FF00000000000000163016A3FF00000000000000163016B3FF00000000000000163016C3FF0000000000000"}} +{"expression":"reduce(a,prod,z)","inputs":{"a":"0x03020178017A010179050C016101693FE764D4F5D5A2BD3FEFC92C130538E23FEFFEFD390A9CC13FEFFFFB427F64DC3FEFFFFFE9C61CF70161016A3FEC2F7D5A8A79C93FEFEBBE888D05813FEFFFA0CB346F893FEFFFFE4193A8783FEFFFFFF7D2CEBC0161016B3FEE7B7CBC36FABD3FEFF889631D483C3FEFFFDCF97E0F4A3FEFFFFF5BC51E393FEFFFFFFCFDF5200161016C3FEF6CA82F0DE1EA3FEFFD40B84505A23FEFFFF31D5F129E3FEFFFFFC39548FC3FEFFFFFFEE4B79A016201693FEFFFFFFF97C93C3FEFFFFFFFFE175C3FEFFFFFFFFFF70C3FEFFFFFFFFFFFD63FF00000000000000162016A3FEFFFFFFFD9A96E3FEFFFFFFFFF4C3E3FEFFFFFFFFFFCB63FEFFFFFFFFFFFF03FF00000000000000162016B3FEFFFFFFFF1E56C3FEFFFFFFFFFBDDE3FEFFFFFFFFFFECA3FEFFFFFFFFFFFFA3FF00000000000000162016C3FEFFFFFFFFACFBE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFFE3FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x03010178010179050301613FE34666681CF69B3FEFAAEFF82A78023FEFFE6E203E29E43FEFFFF8A36DE5653FEFFFFFDD7B987701623FEFFFFFFF5E27D43FEFFFFFFFFD09243FEFFFFFFFFFF21A3FEFFFFFFFFFFFBE3FF000000000000001633FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"reduce(a,prod)","inputs":{"a":"0x03020178017A010179050C016101693FE764D4F5D5A2BD3FEFC92C130538E23FEFFEFD390A9CC13FEFFFFB427F64DC3FEFFFFFE9C61CF70161016A3FEC2F7D5A8A79C93FEFEBBE888D05813FEFFFA0CB346F893FEFFFFE4193A8783FEFFFFFF7D2CEBC0161016B3FEE7B7CBC36FABD3FEFF889631D483C3FEFFFDCF97E0F4A3FEFFFFF5BC51E393FEFFFFFFCFDF5200161016C3FEF6CA82F0DE1EA3FEFFD40B84505A23FEFFFF31D5F129E3FEFFFFFC39548FC3FEFFFFFFEE4B79A016201693FEFFFFFFF97C93C3FEFFFFFFFFE175C3FEFFFFFFFFFF70C3FEFFFFFFFFFFFD63FF00000000000000162016A3FEFFFFFFFD9A96E3FEFFFFFFFFF4C3E3FEFFFFFFFFFFCB63FEFFFFFFFFFFFF03FF00000000000000162016B3FEFFFFFFFF1E56C3FEFFFFFFFFFBDDE3FEFFFFFFFFFFECA3FEFFFFFFFFFFFFA3FF00000000000000162016C3FEFFFFFFFFACFBE3FEFFFFFFFFFE7AC3FEFFFFFFFFFFF8E3FEFFFFFFFFFFFFE3FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02003FE31235BA8C31C5"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004018000000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004018000000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x0201017905403200000000000040350000000000004038000000000000403B000000000000403E000000000000"}} +{"expression":"reduce(a,sum,y)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x0201017803402E00000000000040440000000000004050400000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x0200405E000000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017905017A07405B000000000000405BC00000000000405C800000000000405D400000000000405E000000000000405EC00000000000405F800000000000406020000000000040608000000000004060E0000000000040614000000000004061A00000000000406200000000000040626000000000004062C00000000000406320000000000040638000000000004063E0000000000040644000000000004064A00000000000406500000000000040656000000000004065C00000000000406620000000000040668000000000004066E0000000000040674000000000004067A00000000000406800000000000040686000000000004068C00000000000406920000000000040698000000000004069E00000000000406A400000000000"}} +{"expression":"reduce(a,sum,y)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017A074052C000000000004054000000000000405540000000000040568000000000004057C000000000004059000000000000405A400000000000406F400000000000406FE00000000000407040000000000040709000000000004070E0000000000040713000000000004071800000000000407A900000000000407AE00000000000407B300000000000407B800000000000407BD00000000000407C200000000000407C700000000000"}} +{"expression":"reduce(a,sum,z)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017905403C0000000000004053400000000000405F8000000000004065E00000000000406C000000000000407110000000000040742000000000004077300000000000407A400000000000407D50000000000040803000000000004081B8000000000040834000000000004084C800000000004086500000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x020040B5BD0000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004018000000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004018000000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101790203626172402800000000000003666F6F4022000000000000"}} +{"expression":"reduce(a,sum,y)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x0101017803016140080000000000000162401C00000000000001634026000000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x02004035000000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020179017A08036261720169404380000000000003626172016A404500000000000003626172016B404680000000000003626172016C404800000000000003666F6F0169403B00000000000003666F6F016A403E00000000000003666F6F016B404080000000000003666F6F016C4042000000000000"}} +{"expression":"reduce(a,sum,y)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017A0C0161016940180000000000000161016A40200000000000000161016B40240000000000000161016C40280000000000000162016940360000000000000162016A40380000000000000162016B403A0000000000000162016C403C0000000000000163016940430000000000000163016A40440000000000000163016B40450000000000000163016C4046000000000000"}} +{"expression":"reduce(a,sum,z)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017906016103626172403A000000000000016103666F6F4024000000000000016203626172404D000000000000016203666F6F40450000000000000163036261724056800000000000016303666F6F4052800000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x02004072C00000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017A0702036261724050800000000000405140000000000040520000000000004052C0000000000040538000000000004054400000000000405500000000000003666F6F404680000000000040480000000000004049800000000000404B000000000000404C800000000000404E000000000000404F800000000000"}} +{"expression":"reduce(a,sum,y)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0202017803017A0740220000000000004026000000000000402A000000000000402E000000000000403100000000000040330000000000004035000000000000404280000000000040438000000000004044800000000000404580000000000040468000000000004047800000000000404880000000000040504000000000004050C0000000000040514000000000004051C0000000000040524000000000004052C000000000004053400000000000"}} +{"expression":"reduce(a,sum,z)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017803020362617240534000000000004065E00000000000407110000000000003666F6F403C000000000000405F800000000000406C000000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0200408C380000000000"}} +{"expression":"reduce(a,sum,x)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0301017A01017905040169404F8000000000004052C000000000004055C000000000004058C00000000000405BC00000000000016A4050800000000000405380000000000040568000000000004059800000000000405C800000000000016B405140000000000040544000000000004057400000000000405A400000000000405D400000000000016C405200000000000040550000000000004058000000000000405B000000000000405E000000000000"}} +{"expression":"reduce(a,sum,y)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x01020178017A0C0161016940468000000000000161016A40490000000000000161016B404B8000000000000161016C404E0000000000000162016940622000000000000162016A4062C000000000000162016B40636000000000000162016C406400000000000001630169406EA000000000000163016A406F4000000000000163016B406FE000000000000163016C4070400000000000"}} +{"expression":"reduce(a,sum,z)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x03010178010179050301614024000000000000403A0000000000004045000000000000404D000000000000405280000000000001624056800000000000405A800000000000405E800000000000406140000000000040634000000000000163406540000000000040674000000000004069400000000000406B400000000000406D400000000000"}} +{"expression":"reduce(a,sum)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0200409C980000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x020101790540260000000000004028000000000000402A000000000000402C000000000000402E000000000000"}} +{"expression":"reduce(a,max,y)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x020101780340140000000000004024000000000000402E000000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x0200402E000000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017905017A074051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"}} +{"expression":"reduce(a,max,y)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017A07403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"}} +{"expression":"reduce(a,max,z)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017905401C000000000000402C0000000000004035000000000000403C000000000000404180000000000040450000000000004048800000000000404C000000000000404F8000000000004051800000000000405340000000000040550000000000004056C000000000004058800000000000405A400000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0200405A400000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02004008000000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101790203626172401800000000000003666F6F4014000000000000"}} +{"expression":"reduce(a,max,y)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x0101017803016140000000000000000162401000000000000001634018000000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x02004018000000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020179017A08036261720169403500000000000003626172016A403600000000000003626172016B403700000000000003626172016C403800000000000003666F6F0169403100000000000003666F6F016A403200000000000003666F6F016B403300000000000003666F6F016C4034000000000000"}} +{"expression":"reduce(a,max,y)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017A0C0161016940140000000000000161016A40180000000000000161016B401C0000000000000161016C402000000000000001620169402A0000000000000162016A402C0000000000000162016B402E0000000000000162016C40300000000000000163016940350000000000000163016A40360000000000000163016B40370000000000000163016C4038000000000000"}} +{"expression":"reduce(a,max,z)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x010201780179060161036261724020000000000000016103666F6F40100000000000000162036261724030000000000000016203666F6F40280000000000000163036261724038000000000000016303666F6F4034000000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x02004038000000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017A070203626172404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"}} +{"expression":"reduce(a,max,y)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0202017803017A0740200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C0000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000"}} +{"expression":"reduce(a,max,z)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x03010179010178030203626172402C000000000000403C000000000000404500000000000003666F6F401C00000000000040350000000000004041800000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x02004045000000000000"}} +{"expression":"reduce(a,max,x)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0301017A01017905040169404480000000000040468000000000004048800000000000404A800000000000404C800000000000016A404500000000000040470000000000004049000000000000404B000000000000404D000000000000016B404580000000000040478000000000004049800000000000404B800000000000404D800000000000016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"}} +{"expression":"reduce(a,max,y)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x01020178017A0C0161016940310000000000000161016A40320000000000000161016B40330000000000000161016C40340000000000000162016940428000000000000162016A40430000000000000162016B40438000000000000162016C404400000000000001630169404C8000000000000163016A404D0000000000000163016B404D8000000000000163016C404E000000000000"}} +{"expression":"reduce(a,max,z)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x03010178010179050301614010000000000000402000000000000040280000000000004030000000000000403400000000000001624038000000000000403C000000000000404000000000000040420000000000004044000000000000016340460000000000004048000000000000404A000000000000404C000000000000404E000000000000"}} +{"expression":"reduce(a,max)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0200404E000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x02010179053FF00000000000004000000000000000400800000000000040100000000000004014000000000000"}} +{"expression":"reduce(a,min,y)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x02010178033FF000000000000040180000000000004026000000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x02020178030179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"}} +{"expression":"reduce(a,min,y)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x0202017803017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040420000000000004042800000000000404300000000000040438000000000004044000000000000404480000000000040450000000000004051C000000000004052000000000000405240000000000040528000000000004052C0000000000040530000000000004053400000000000"}} +{"expression":"reduce(a,min,z)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x02020178030179053FF00000000000004020000000000000402E0000000000004036000000000000403D000000000000404200000000000040458000000000004049000000000000404C80000000000040500000000000004051C000000000004053800000000000405540000000000040570000000000004058C00000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x0203017803017905017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000403D000000000000403E000000000000403F00000000000040400000000000004040800000000000404100000000000040418000000000004042000000000000404280000000000040430000000000004043800000000000404400000000000040448000000000004045000000000000404580000000000040460000000000004046800000000000404700000000000040478000000000004048000000000000404880000000000040490000000000004049800000000000404A000000000000404A800000000000404B000000000000404B800000000000404C000000000000404C800000000000404D000000000000404D800000000000404E000000000000404E800000000000404F000000000000404F8000000000004050000000000000405040000000000040508000000000004050C000000000004051000000000000405140000000000040518000000000004051C000000000004052000000000000405240000000000040528000000000004052C000000000004053000000000000405340000000000040538000000000004053C000000000004054000000000000405440000000000040548000000000004054C000000000004055000000000000405540000000000040558000000000004055C000000000004056000000000000405640000000000040568000000000004056C000000000004057000000000000405740000000000040578000000000004057C000000000004058000000000000405840000000000040588000000000004058C000000000004059000000000000405940000000000040598000000000004059C00000000000405A000000000000405A400000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x010101780301613FF00000000000000162400000000000000001634008000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101790203626172400000000000000003666F6F3FF0000000000000"}} +{"expression":"reduce(a,min,y)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x010101780301613FF00000000000000162400800000000000001634014000000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x010201780179060161036261724000000000000000016103666F6F3FF00000000000000162036261724010000000000000016203666F6F40080000000000000163036261724018000000000000016303666F6F4014000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020179017A08036261720169401400000000000003626172016A401800000000000003626172016B401C00000000000003626172016C402000000000000003666F6F01693FF000000000000003666F6F016A400000000000000003666F6F016B400800000000000003666F6F016C4010000000000000"}} +{"expression":"reduce(a,min,y)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x01020178017A0C016101693FF00000000000000161016A40000000000000000161016B40080000000000000161016C40100000000000000162016940220000000000000162016A40240000000000000162016B40260000000000000162016C40280000000000000163016940310000000000000163016A40320000000000000163016B40330000000000000163016C4034000000000000"}} +{"expression":"reduce(a,min,z)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x010201780179060161036261724014000000000000016103666F6F3FF0000000000000016203626172402A000000000000016203666F6F40220000000000000163036261724035000000000000016303666F6F4031000000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x010301780179017A1801610362617201694014000000000000016103626172016A4018000000000000016103626172016B401C000000000000016103626172016C4020000000000000016103666F6F01693FF0000000000000016103666F6F016A4000000000000000016103666F6F016B4008000000000000016103666F6F016C40100000000000000162036261720169402A000000000000016203626172016A402C000000000000016203626172016B402E000000000000016203626172016C4030000000000000016203666F6F01694022000000000000016203666F6F016A4024000000000000016203666F6F016B4026000000000000016203666F6F016C402800000000000001630362617201694035000000000000016303626172016A4036000000000000016303626172016B4037000000000000016303626172016C4038000000000000016303666F6F01694031000000000000016303666F6F016A4032000000000000016303666F6F016B4033000000000000016303666F6F016C4034000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C00000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000"}} +{"expression":"reduce(a,min,y)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0202017803017A073FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"}} +{"expression":"reduce(a,min,z)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x0301017901017803020362617240200000000000004036000000000000404200000000000003666F6F3FF0000000000000402E000000000000403D000000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x0301017902017803017A07020362617240200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C0000000000004036000000000000403700000000000040380000000000004039000000000000403A000000000000403B000000000000403C000000000000404200000000000040428000000000004043000000000000404380000000000040440000000000004044800000000000404500000000000003666F6F3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402E000000000000403000000000000040310000000000004032000000000000403300000000000040340000000000004035000000000000403D000000000000403E000000000000403F0000000000004040000000000000404080000000000040410000000000004041800000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"reduce(a,min,x)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x0301017A010179050401693FF000000000000040140000000000004022000000000000402A0000000000004031000000000000016A400000000000000040180000000000004024000000000000402C0000000000004032000000000000016B4008000000000000401C0000000000004026000000000000402E0000000000004033000000000000016C40100000000000004020000000000000402800000000000040300000000000004034000000000000"}} +{"expression":"reduce(a,min,y)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x01020178017A0C016101693FF00000000000000161016A40000000000000000161016B40080000000000000161016C40100000000000000162016940350000000000000162016A40360000000000000162016B40370000000000000162016C40380000000000000163016940448000000000000163016A40450000000000000163016B40458000000000000163016C4046000000000000"}} +{"expression":"reduce(a,min,z)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x03010178010179050301613FF000000000000040140000000000004022000000000000402A0000000000004031000000000000016240350000000000004039000000000000403D000000000000404080000000000040428000000000000163404480000000000040468000000000004048800000000000404A800000000000404C800000000000"}} +{"expression":"reduce(a,min)","inputs":{"a":"0x03020178017A010179050C016101693FF000000000000040140000000000004022000000000000402A00000000000040310000000000000161016A400000000000000040180000000000004024000000000000402C00000000000040320000000000000161016B4008000000000000401C0000000000004026000000000000402E00000000000040330000000000000161016C401000000000000040200000000000004028000000000000403000000000000040340000000000000162016940350000000000004039000000000000403D000000000000404080000000000040428000000000000162016A4036000000000000403A000000000000403E000000000000404100000000000040430000000000000162016B4037000000000000403B000000000000403F000000000000404180000000000040438000000000000162016C4038000000000000403C00000000000040400000000000004042000000000000404400000000000001630169404480000000000040468000000000004048800000000000404A800000000000404C8000000000000163016A404500000000000040470000000000004049000000000000404B000000000000404D0000000000000163016B404580000000000040478000000000004049800000000000404B800000000000404D8000000000000163016C40460000000000004048000000000000404A000000000000404C000000000000404E000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"-a","inputs":{"a":"0x0200BFFE666666666666"},"result":{"expect":"0x02003FFE666666666666"}} +{"expression":"-a","inputs":{"a":"0x0201017803BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333"},"result":{"expect":"0x02010178033FFE6666666666663FFCCCCCCCCCCCCD3FFB333333333333"}} +{"expression":"-a","inputs":{"a":"0x0202017803017905BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000"},"result":{"expect":"0x02020178030179053FFE6666666666663FFCCCCCCCCCCCCD3FFB3333333333333FF999999999999A3FF80000000000003FF66666666666663FF4CCCCCCCCCCCD3FF33333333333333FF199999999999A3FF00000000000003FECCCCCCCCCCCCC3FE999999999999A3FE66666666666663FE33333333333343FE0000000000000"}} +{"expression":"-a","inputs":{"a":"0x0203017803017905017A07BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"},"result":{"expect":"0x0203017803017905017A073FFE6666666666663FFCCCCCCCCCCCCD3FFB3333333333333FF999999999999A3FF80000000000003FF66666666666663FF4CCCCCCCCCCCD3FF33333333333333FF199999999999A3FF00000000000003FECCCCCCCCCCCCC3FE999999999999A3FE66666666666663FE33333333333343FE00000000000003FD99999999999983FD33333333333343FC99999999999983FB99999999999A08000000000000000BFB99999999999A0BFC99999999999A0BFD3333333333330BFD9999999999998BFE0000000000000BFE3333333333334BFE6666666666668BFE9999999999998BFECCCCCCCCCCCCCBFF0000000000000BFF199999999999ABFF3333333333334BFF4CCCCCCCCCCCCBFF6666666666666BFF8000000000000BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000C000CCCCCCCCCCCCC00199999999999AC002666666666666C003333333333334C004000000000000C004CCCCCCCCCCCCC00599999999999AC006666666666666C007333333333334C008000000000000C008CCCCCCCCCCCCC00999999999999AC00A666666666666C00B333333333334C00C000000000000C00CCCCCCCCCCCCCC00D99999999999AC00E666666666666C00F333333333334C010000000000000C010666666666666C010CCCCCCCCCCCDC011333333333333C01199999999999AC012000000000000C012666666666666C012CCCCCCCCCCCDC013333333333333C01399999999999AC014000000000000C014666666666666C014CCCCCCCCCCCDC015333333333333C01599999999999AC016000000000000C016666666666666C016CCCCCCCCCCCDC017333333333333C01799999999999AC018000000000000C018666666666666C018CCCCCCCCCCCCC019333333333334C01999999999999AC01A000000000000C01A666666666666C01ACCCCCCCCCCCCC01B333333333334C01B99999999999AC01C000000000000C01C666666666666C01CCCCCCCCCCCCCC01D333333333334C01D99999999999AC01E000000000000C01E666666666666C01ECCCCCCCCCCCCC01F333333333334C01F99999999999AC020000000000000C020333333333333C020666666666666C02099999999999AC020CCCCCCCCCCCDC021000000000000"}} +{"expression":"-a","inputs":{"a":"0x01010178030161BFFE6666666666660162BFFCCCCCCCCCCCCD0163BFFB333333333333"},"result":{"expect":"0x010101780301613FFE66666666666601623FFCCCCCCCCCCCCD01633FFB333333333333"}} +{"expression":"-a","inputs":{"a":"0x01020178017906016103626172BFFCCCCCCCCCCCCD016103666F6FBFFE666666666666016203626172BFF999999999999A016203666F6FBFFB333333333333016303626172BFF6666666666666016303666F6FBFF8000000000000"},"result":{"expect":"0x010201780179060161036261723FFCCCCCCCCCCCCD016103666F6F3FFE6666666666660162036261723FF999999999999A016203666F6F3FFB3333333333330163036261723FF6666666666666016303666F6F3FF8000000000000"}} +{"expression":"-a","inputs":{"a":"0x010301780179017A180161036261720169BFF8000000000000016103626172016ABFF6666666666666016103626172016BBFF4CCCCCCCCCCCD016103626172016CBFF3333333333333016103666F6F0169BFFE666666666666016103666F6F016ABFFCCCCCCCCCCCCD016103666F6F016BBFFB333333333333016103666F6F016CBFF999999999999A0162036261720169BFE6666666666666016203626172016ABFE3333333333334016203626172016BBFE0000000000000016203626172016CBFD9999999999998016203666F6F0169BFF199999999999A016203666F6F016ABFF0000000000000016203666F6F016BBFECCCCCCCCCCCCC016203666F6F016CBFE999999999999A01630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F0169BFD3333333333334016303666F6F016ABFC9999999999998016303666F6F016BBFB99999999999A0016303666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FF8000000000000016103626172016A3FF6666666666666016103626172016B3FF4CCCCCCCCCCCD016103626172016C3FF3333333333333016103666F6F01693FFE666666666666016103666F6F016A3FFCCCCCCCCCCCCD016103666F6F016B3FFB333333333333016103666F6F016C3FF999999999999A01620362617201693FE6666666666666016203626172016A3FE3333333333334016203626172016B3FE0000000000000016203626172016C3FD9999999999998016203666F6F01693FF199999999999A016203666F6F016A3FF0000000000000016203666F6F016B3FECCCCCCCCCCCCC016203666F6F016C3FE999999999999A0163036261720169BFB99999999999A0016303626172016ABFC99999999999A0016303626172016BBFD3333333333330016303626172016CBFD9999999999998016303666F6F01693FD3333333333334016303666F6F016A3FC9999999999998016303666F6F016B3FB99999999999A0016303666F6F016C8000000000000000"}} +{"expression":"-a","inputs":{"a":"0x0301017902017803017A070203626172BFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE33333333333343FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6FBFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF33333333333333FF199999999999A3FF00000000000003FECCCCCCCCCCCCC3FE999999999999A3FE66666666666663FE3333333333334BFC99999999999A0BFD3333333333330BFD9999999999998BFE0000000000000BFE3333333333334BFE6666666666668BFE9999999999998BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000C000CCCCCCCCCCCCC00199999999999A03666F6F3FFE6666666666663FFCCCCCCCCCCCCD3FFB3333333333333FF999999999999A3FF80000000000003FF66666666666663FF4CCCCCCCCCCCD3FE00000000000003FD99999999999983FD33333333333343FC99999999999983FB99999999999A08000000000000000BFB99999999999A0BFECCCCCCCCCCCCCBFF0000000000000BFF199999999999ABFF3333333333334BFF4CCCCCCCCCCCCBFF6666666666666BFF8000000000000"}} +{"expression":"-a","inputs":{"a":"0x03020178017A010179050C01610169BFFE666666666666BFF8000000000000BFF199999999999ABFE6666666666666BFD33333333333340161016ABFFCCCCCCCCCCCCDBFF6666666666666BFF0000000000000BFE3333333333334BFC99999999999980161016BBFFB333333333333BFF4CCCCCCCCCCCDBFECCCCCCCCCCCCCBFE0000000000000BFB99999999999A00161016CBFF999999999999ABFF3333333333333BFE999999999999ABFD99999999999980000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FFE6666666666663FF80000000000003FF199999999999A3FE66666666666663FD33333333333340161016A3FFCCCCCCCCCCCCD3FF66666666666663FF00000000000003FE33333333333343FC99999999999980161016B3FFB3333333333333FF4CCCCCCCCCCCD3FECCCCCCCCCCCCC3FE00000000000003FB99999999999A00161016C3FF999999999999A3FF33333333333333FE999999999999A3FD9999999999998800000000000000001620169BFB99999999999A0BFE0000000000000BFECCCCCCCCCCCCCBFF4CCCCCCCCCCCCBFFB3333333333340162016ABFC99999999999A0BFE3333333333334BFF0000000000000BFF6666666666666BFFCCCCCCCCCCCCC0162016BBFD3333333333330BFE6666666666668BFF199999999999ABFF8000000000000BFFE6666666666660162016CBFD9999999999998BFE9999999999998BFF3333333333334BFF999999999999AC00000000000000001630169C000CCCCCCCCCCCCC004000000000000C007333333333334C00A666666666666C00D99999999999A0163016AC00199999999999AC004CCCCCCCCCCCCC008000000000000C00B333333333334C00E6666666666660163016BC002666666666666C00599999999999AC008CCCCCCCCCCCCC00C000000000000C00F3333333333340163016CC003333333333334C006666666666666C00999999999999AC00CCCCCCCCCCCCCC010000000000000"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x0200BFFE666666666666"},"result":{"expect":"0x02003FFE666666666666"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x0201017803BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333"},"result":{"expect":"0x02010178033FFE6666666666663FFCCCCCCCCCCCCD3FFB333333333333"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x0202017803017905BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000"},"result":{"expect":"0x02020178030179053FFE6666666666663FFCCCCCCCCCCCCD3FFB3333333333333FF999999999999A3FF80000000000003FF66666666666663FF4CCCCCCCCCCCD3FF33333333333333FF199999999999A3FF00000000000003FECCCCCCCCCCCCC3FE999999999999A3FE66666666666663FE33333333333343FE0000000000000"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x0203017803017905017A07BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"},"result":{"expect":"0x0203017803017905017A073FFE6666666666663FFCCCCCCCCCCCCD3FFB3333333333333FF999999999999A3FF80000000000003FF66666666666663FF4CCCCCCCCCCCD3FF33333333333333FF199999999999A3FF00000000000003FECCCCCCCCCCCCC3FE999999999999A3FE66666666666663FE33333333333343FE00000000000003FD99999999999983FD33333333333343FC99999999999983FB99999999999A08000000000000000BFB99999999999A0BFC99999999999A0BFD3333333333330BFD9999999999998BFE0000000000000BFE3333333333334BFE6666666666668BFE9999999999998BFECCCCCCCCCCCCCBFF0000000000000BFF199999999999ABFF3333333333334BFF4CCCCCCCCCCCCBFF6666666666666BFF8000000000000BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000C000CCCCCCCCCCCCC00199999999999AC002666666666666C003333333333334C004000000000000C004CCCCCCCCCCCCC00599999999999AC006666666666666C007333333333334C008000000000000C008CCCCCCCCCCCCC00999999999999AC00A666666666666C00B333333333334C00C000000000000C00CCCCCCCCCCCCCC00D99999999999AC00E666666666666C00F333333333334C010000000000000C010666666666666C010CCCCCCCCCCCDC011333333333333C01199999999999AC012000000000000C012666666666666C012CCCCCCCCCCCDC013333333333333C01399999999999AC014000000000000C014666666666666C014CCCCCCCCCCCDC015333333333333C01599999999999AC016000000000000C016666666666666C016CCCCCCCCCCCDC017333333333333C01799999999999AC018000000000000C018666666666666C018CCCCCCCCCCCCC019333333333334C01999999999999AC01A000000000000C01A666666666666C01ACCCCCCCCCCCCC01B333333333334C01B99999999999AC01C000000000000C01C666666666666C01CCCCCCCCCCCCCC01D333333333334C01D99999999999AC01E000000000000C01E666666666666C01ECCCCCCCCCCCCC01F333333333334C01F99999999999AC020000000000000C020333333333333C020666666666666C02099999999999AC020CCCCCCCCCCCDC021000000000000"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x01010178030161BFFE6666666666660162BFFCCCCCCCCCCCCD0163BFFB333333333333"},"result":{"expect":"0x010101780301613FFE66666666666601623FFCCCCCCCCCCCCD01633FFB333333333333"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x01020178017906016103626172BFFCCCCCCCCCCCCD016103666F6FBFFE666666666666016203626172BFF999999999999A016203666F6FBFFB333333333333016303626172BFF6666666666666016303666F6FBFF8000000000000"},"result":{"expect":"0x010201780179060161036261723FFCCCCCCCCCCCCD016103666F6F3FFE6666666666660162036261723FF999999999999A016203666F6F3FFB3333333333330163036261723FF6666666666666016303666F6F3FF8000000000000"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x010301780179017A180161036261720169BFF8000000000000016103626172016ABFF6666666666666016103626172016BBFF4CCCCCCCCCCCD016103626172016CBFF3333333333333016103666F6F0169BFFE666666666666016103666F6F016ABFFCCCCCCCCCCCCD016103666F6F016BBFFB333333333333016103666F6F016CBFF999999999999A0162036261720169BFE6666666666666016203626172016ABFE3333333333334016203626172016BBFE0000000000000016203626172016CBFD9999999999998016203666F6F0169BFF199999999999A016203666F6F016ABFF0000000000000016203666F6F016BBFECCCCCCCCCCCCC016203666F6F016CBFE999999999999A01630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F0169BFD3333333333334016303666F6F016ABFC9999999999998016303666F6F016BBFB99999999999A0016303666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FF8000000000000016103626172016A3FF6666666666666016103626172016B3FF4CCCCCCCCCCCD016103626172016C3FF3333333333333016103666F6F01693FFE666666666666016103666F6F016A3FFCCCCCCCCCCCCD016103666F6F016B3FFB333333333333016103666F6F016C3FF999999999999A01620362617201693FE6666666666666016203626172016A3FE3333333333334016203626172016B3FE0000000000000016203626172016C3FD9999999999998016203666F6F01693FF199999999999A016203666F6F016A3FF0000000000000016203666F6F016B3FECCCCCCCCCCCCC016203666F6F016C3FE999999999999A0163036261720169BFB99999999999A0016303626172016ABFC99999999999A0016303626172016BBFD3333333333330016303626172016CBFD9999999999998016303666F6F01693FD3333333333334016303666F6F016A3FC9999999999998016303666F6F016B3FB99999999999A0016303666F6F016C8000000000000000"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x0301017902017803017A070203626172BFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE33333333333343FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6FBFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF33333333333333FF199999999999A3FF00000000000003FECCCCCCCCCCCCC3FE999999999999A3FE66666666666663FE3333333333334BFC99999999999A0BFD3333333333330BFD9999999999998BFE0000000000000BFE3333333333334BFE6666666666668BFE9999999999998BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000C000CCCCCCCCCCCCC00199999999999A03666F6F3FFE6666666666663FFCCCCCCCCCCCCD3FFB3333333333333FF999999999999A3FF80000000000003FF66666666666663FF4CCCCCCCCCCCD3FE00000000000003FD99999999999983FD33333333333343FC99999999999983FB99999999999A08000000000000000BFB99999999999A0BFECCCCCCCCCCCCCBFF0000000000000BFF199999999999ABFF3333333333334BFF4CCCCCCCCCCCCBFF6666666666666BFF8000000000000"}} +{"expression":"map(a,f(a)(-a))","inputs":{"a":"0x03020178017A010179050C01610169BFFE666666666666BFF8000000000000BFF199999999999ABFE6666666666666BFD33333333333340161016ABFFCCCCCCCCCCCCDBFF6666666666666BFF0000000000000BFE3333333333334BFC99999999999980161016BBFFB333333333333BFF4CCCCCCCCCCCDBFECCCCCCCCCCCCCBFE0000000000000BFB99999999999A00161016CBFF999999999999ABFF3333333333333BFE999999999999ABFD99999999999980000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FFE6666666666663FF80000000000003FF199999999999A3FE66666666666663FD33333333333340161016A3FFCCCCCCCCCCCCD3FF66666666666663FF00000000000003FE33333333333343FC99999999999980161016B3FFB3333333333333FF4CCCCCCCCCCCD3FECCCCCCCCCCCCC3FE00000000000003FB99999999999A00161016C3FF999999999999A3FF33333333333333FE999999999999A3FD9999999999998800000000000000001620169BFB99999999999A0BFE0000000000000BFECCCCCCCCCCCCCBFF4CCCCCCCCCCCCBFFB3333333333340162016ABFC99999999999A0BFE3333333333334BFF0000000000000BFF6666666666666BFFCCCCCCCCCCCCC0162016BBFD3333333333330BFE6666666666668BFF199999999999ABFF8000000000000BFFE6666666666660162016CBFD9999999999998BFE9999999999998BFF3333333333334BFF999999999999AC00000000000000001630169C000CCCCCCCCCCCCC004000000000000C007333333333334C00A666666666666C00D99999999999A0163016AC00199999999999AC004CCCCCCCCCCCCC008000000000000C00B333333333334C00E6666666666660163016BC002666666666666C00599999999999AC008CCCCCCCCCCCCC00C000000000000C00F3333333333340163016CC003333333333334C006666666666666C00999999999999AC00CCCCCCCCCCCCCC010000000000000"}} +{"expression":"!a","inputs":{"a":"0x02000000000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"!a","inputs":{"a":"0x020101780300000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02010178033FF000000000000000000000000000000000000000000000"}} +{"expression":"!a","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02020178030179053FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"!a","inputs":{"a":"0x0203017803017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A073FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"!a","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x010101780301613FF00000000000000162000000000000000001630000000000000000"}} +{"expression":"!a","inputs":{"a":"0x010201780179060161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"!a","inputs":{"a":"0x010301780179017A1801610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B0000000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C000000000000000001620362617201690000000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C0000000000000000016203666F6F01693FF0000000000000016203666F6F016A0000000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF000000000000001630362617201693FF0000000000000016303626172016A0000000000000000016303626172016B3FF0000000000000016303626172016C3FF0000000000000016303666F6F01693FF0000000000000016303666F6F016A3FF0000000000000016303666F6F016B0000000000000000016303666F6F016C3FF0000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B3FF0000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C3FF000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B0000000000000000016203666F6F016C000000000000000001630362617201690000000000000000016303626172016A3FF0000000000000016303626172016B0000000000000000016303626172016C0000000000000000016303666F6F01690000000000000000016303666F6F016A0000000000000000016303666F6F016B3FF0000000000000016303666F6F016C0000000000000000"}} +{"expression":"!a","inputs":{"a":"0x0301017902017803017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x0301017902017803017A070203626172000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000"}} +{"expression":"!a","inputs":{"a":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000161016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000161016B3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000161016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016201693FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000162016A00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000162016B3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000162016C3FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000016301693FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000163016A3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000163016B00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000163016C3FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000161016A000000000000000000000000000000003FF0000000000000000000000000000000000000000000000161016B00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000161016C3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016900000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000162016A3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016B000000000000000000000000000000003FF0000000000000000000000000000000000000000000000162016C00000000000000003FF0000000000000000000000000000000000000000000003FF000000000000001630169000000000000000000000000000000003FF0000000000000000000000000000000000000000000000163016A00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000163016B3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000163016C000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x02000000000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x020101780300000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02010178033FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02020178030179053FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x0203017803017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A073FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x010101780301613FF00000000000000162000000000000000001630000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x010201780179060161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x010301780179017A1801610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B0000000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C000000000000000001620362617201690000000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C0000000000000000016203666F6F01693FF0000000000000016203666F6F016A0000000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF000000000000001630362617201693FF0000000000000016303626172016A0000000000000000016303626172016B3FF0000000000000016303626172016C3FF0000000000000016303666F6F01693FF0000000000000016303666F6F016A3FF0000000000000016303666F6F016B0000000000000000016303666F6F016C3FF0000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B3FF0000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C3FF000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B0000000000000000016203666F6F016C000000000000000001630362617201690000000000000000016303626172016A3FF0000000000000016303626172016B0000000000000000016303626172016C0000000000000000016303666F6F01690000000000000000016303666F6F016A0000000000000000016303666F6F016B3FF0000000000000016303666F6F016C0000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x0301017902017803017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x0301017902017803017A070203626172000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000"}} +{"expression":"map(a,f(a)(!a))","inputs":{"a":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000161016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000161016B3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000161016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016201693FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000162016A00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000162016B3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000162016C3FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000016301693FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000163016A3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000163016B00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000163016C3FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000161016A000000000000000000000000000000003FF0000000000000000000000000000000000000000000000161016B00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000161016C3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016900000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000162016A3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016B000000000000000000000000000000003FF0000000000000000000000000000000000000000000000162016C00000000000000003FF0000000000000000000000000000000000000000000003FF000000000000001630169000000000000000000000000000000003FF0000000000000000000000000000000000000000000000163016A00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000163016B3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000163016C000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"cos(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FEFD712F9A817C1"}} +{"expression":"cos(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA"}} +{"expression":"cos(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA3FED7954E7DBA2F83FEC1528065B7D503FEA69263C485B153FE87996529F9D933FE64B6BDE7198653FE3E43A9692E21C3FE14A280FB5068C3FDD07B806C761113FD730DE943B79D43FD11EB3682A4C5F3FC5C17BBC13570B3FB21BD54FC5F9A7"}} +{"expression":"cos(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA3FED7954E7DBA2F83FEC1528065B7D503FEA69263C485B153FE87996529F9D933FE64B6BDE7198653FE3E43A9692E21C3FE14A280FB5068C3FDD07B806C761113FD730DE943B79D43FD11EB3682A4C5F3FC5C17BBC13570B3FB21BD54FC5F9A7BF9DE67AC55F1633BFC07DF9F4A26C86BFCD14F54F250E7ABFD4B0C6B93445ABBFDAA22657537205BFE027B304989ECABFE2D5004B88AD70BFE5522217302FE1BFE798BAB490D185BFE9A2F7EF858B7DBFEB6BA1F680F470BFECEE28B36603A6BFEE26AF7757704ABFEF1216DBA340C9BFEFAE04BE85E5D2BFEFF8EA4756A624BFEFF207E2B9CBB6BFEF996F2CA70BB6BFEEF002C35EBE04BFEDF77403C11A5FBFECB23EB4D22C59BFEB23A2AD7DD937BFE94F9B84DBA8EBBFE73AD66234C8EABFE4EAA606DB24C1BFE264F5306A2D6ABFDF606EEC8AC71DBFD9A6B192163B53BFD3AB577C62C2AABFCAFB5B54583D6ABFBCB6072B598DCABF895F3A43506A343FB66655584E40403FC7DFA3277C16643FD22785706B4AD93FD830C98EE45C9C3FDDFC2D59376AEE3FE1BD6F3F7432D53FE44F676F25B08C3FE6AD6C3C07D4483FE8D16F88830A7F3FEAB5F7960DFE2A3FEC562D06A772233FEDADE73EF950293FEEB9B7097822F53FEF76EF5F4998B23FEFE3AC4079A9CE3FEFFED789FC7A413FEFC82BBD1E4CA13FEF4034B145C3C83FEE684E2E41C42D3FED42A072B5E51B3FEBD21AAF88DCFB3FEA1A6B8672124B3FE81FF79ED920173FE5E7CE691EA5463FE3779D2D0CA0EA3FE0D5A0848A01CB3FDC1128CF6B887D3FD62F45E66F5C2F3FD014A429AC16E13FC3A1C134C1C59E3FABA00B7D845AFABFA78D9732562AABBFC29FBEBF632F94BFCF2C746FB6AF1DBFD5B4B6970D1EA6BFDB9BADA059A170BFE09E033D53AE3FBFE343AE773AB08EBFE5B8131ACC20FBBFE7F4E9CF633AD1BFE9F479562D158DBFEBB1A52E0FEB79BFED27FAA6A6196BBFEE53BC40DBB50ABFEF31EB4014A490BFEFC04F53629ED4BFEFFD7C43328F13BFEFE8D594EB0C48BFEF82901B2CEEB6BFEECBB16EB638EABFEDC60D5140EE7DBFEC7441010D641ABFEAD9AC890C6B1FBFE8FA6A1EC3FF04BFE6DB43A4039D37BFE481A6673F777BBFE1F39541E710BCBFDE6F3270721E39"}} +{"expression":"cos(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FEFD712F9A817C101623FEF5CB49577627A01633FEE921DD42F09BA"}} +{"expression":"cos(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FEF5CB49577627A016103666F6F3FEFD712F9A817C10162036261723FED7954E7DBA2F8016203666F6F3FEE921DD42F09BA0163036261723FEA69263C485B15016303666F6F3FEC1528065B7D50"}} +{"expression":"cos(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FEC1528065B7D50016103626172016A3FEA69263C485B15016103626172016B3FE87996529F9D93016103626172016C3FE64B6BDE719865016103666F6F01693FEFD712F9A817C1016103666F6F016A3FEF5CB49577627A016103666F6F016B3FEE921DD42F09BA016103666F6F016C3FED7954E7DBA2F801620362617201693FD11EB3682A4C5F016203626172016A3FC5C17BBC13570B016203626172016B3FB21BD54FC5F9A7016203626172016CBF9DE67AC55F1633016203666F6F01693FE3E43A9692E21C016203666F6F016A3FE14A280FB5068C016203666F6F016B3FDD07B806C76111016203666F6F016C3FD730DE943B79D40163036261720169BFE027B304989ECA016303626172016ABFE2D5004B88AD70016303626172016BBFE5522217302FE1016303626172016CBFE798BAB490D185016303666F6F0169BFC07DF9F4A26C86016303666F6F016ABFCD14F54F250E7A016303666F6F016BBFD4B0C6B93445AB016303666F6F016CBFDAA22657537205"}} +{"expression":"cos(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE64B6BDE7198653FE3E43A9692E21C3FE14A280FB5068C3FDD07B806C761113FD730DE943B79D43FD11EB3682A4C5F3FC5C17BBC13570BBFE2D5004B88AD70BFE5522217302FE1BFE798BAB490D185BFE9A2F7EF858B7DBFEB6BA1F680F470BFECEE28B36603A6BFEE26AF7757704ABFECB23EB4D22C59BFEB23A2AD7DD937BFE94F9B84DBA8EBBFE73AD66234C8EABFE4EAA606DB24C1BFE264F5306A2D6ABFDF606EEC8AC71D03666F6F3FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA3FED7954E7DBA2F83FEC1528065B7D503FEA69263C485B153FE87996529F9D933FB21BD54FC5F9A7BF9DE67AC55F1633BFC07DF9F4A26C86BFCD14F54F250E7ABFD4B0C6B93445ABBFDAA22657537205BFE027B304989ECABFEF1216DBA340C9BFEFAE04BE85E5D2BFEFF8EA4756A624BFEFF207E2B9CBB6BFEF996F2CA70BB6BFEEF002C35EBE04BFEDF77403C11A5F"}} +{"expression":"cos(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FEFD712F9A817C13FEC1528065B7D503FE3E43A9692E21C3FD11EB3682A4C5FBFC07DF9F4A26C860161016A3FEF5CB49577627A3FEA69263C485B153FE14A280FB5068C3FC5C17BBC13570BBFCD14F54F250E7A0161016B3FEE921DD42F09BA3FE87996529F9D933FDD07B806C761113FB21BD54FC5F9A7BFD4B0C6B93445AB0161016C3FED7954E7DBA2F83FE64B6BDE7198653FD730DE943B79D4BF9DE67AC55F1633BFDAA2265753720501620169BFE027B304989ECABFE9A2F7EF858B7DBFEF1216DBA340C9BFEF996F2CA70BB6BFEB23A2AD7DD9370162016ABFE2D5004B88AD70BFEB6BA1F680F470BFEFAE04BE85E5D2BFEEF002C35EBE04BFE94F9B84DBA8EB0162016BBFE5522217302FE1BFECEE28B36603A6BFEFF8EA4756A624BFEDF77403C11A5FBFE73AD66234C8EA0162016CBFE798BAB490D185BFEE26AF7757704ABFEFF207E2B9CBB6BFECB23EB4D22C59BFE4EAA606DB24C101630169BFE264F5306A2D6ABFCAFB5B54583D6A3FC7DFA3277C16643FE1BD6F3F7432D53FEAB5F7960DFE2A0163016ABFDF606EEC8AC71DBFBCB6072B598DCA3FD22785706B4AD93FE44F676F25B08C3FEC562D06A772230163016BBFD9A6B192163B53BF895F3A43506A343FD830C98EE45C9C3FE6AD6C3C07D4483FEDADE73EF950290163016CBFD3AB577C62C2AA3FB66655584E40403FDDFC2D59376AEE3FE8D16F88830A7F3FEEB9B7097822F5"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FEFD712F9A817C1"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA3FED7954E7DBA2F83FEC1528065B7D503FEA69263C485B153FE87996529F9D933FE64B6BDE7198653FE3E43A9692E21C3FE14A280FB5068C3FDD07B806C761113FD730DE943B79D43FD11EB3682A4C5F3FC5C17BBC13570B3FB21BD54FC5F9A7"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA3FED7954E7DBA2F83FEC1528065B7D503FEA69263C485B153FE87996529F9D933FE64B6BDE7198653FE3E43A9692E21C3FE14A280FB5068C3FDD07B806C761113FD730DE943B79D43FD11EB3682A4C5F3FC5C17BBC13570B3FB21BD54FC5F9A7BF9DE67AC55F1633BFC07DF9F4A26C86BFCD14F54F250E7ABFD4B0C6B93445ABBFDAA22657537205BFE027B304989ECABFE2D5004B88AD70BFE5522217302FE1BFE798BAB490D185BFE9A2F7EF858B7DBFEB6BA1F680F470BFECEE28B36603A6BFEE26AF7757704ABFEF1216DBA340C9BFEFAE04BE85E5D2BFEFF8EA4756A624BFEFF207E2B9CBB6BFEF996F2CA70BB6BFEEF002C35EBE04BFEDF77403C11A5FBFECB23EB4D22C59BFEB23A2AD7DD937BFE94F9B84DBA8EBBFE73AD66234C8EABFE4EAA606DB24C1BFE264F5306A2D6ABFDF606EEC8AC71DBFD9A6B192163B53BFD3AB577C62C2AABFCAFB5B54583D6ABFBCB6072B598DCABF895F3A43506A343FB66655584E40403FC7DFA3277C16643FD22785706B4AD93FD830C98EE45C9C3FDDFC2D59376AEE3FE1BD6F3F7432D53FE44F676F25B08C3FE6AD6C3C07D4483FE8D16F88830A7F3FEAB5F7960DFE2A3FEC562D06A772233FEDADE73EF950293FEEB9B7097822F53FEF76EF5F4998B23FEFE3AC4079A9CE3FEFFED789FC7A413FEFC82BBD1E4CA13FEF4034B145C3C83FEE684E2E41C42D3FED42A072B5E51B3FEBD21AAF88DCFB3FEA1A6B8672124B3FE81FF79ED920173FE5E7CE691EA5463FE3779D2D0CA0EA3FE0D5A0848A01CB3FDC1128CF6B887D3FD62F45E66F5C2F3FD014A429AC16E13FC3A1C134C1C59E3FABA00B7D845AFABFA78D9732562AABBFC29FBEBF632F94BFCF2C746FB6AF1DBFD5B4B6970D1EA6BFDB9BADA059A170BFE09E033D53AE3FBFE343AE773AB08EBFE5B8131ACC20FBBFE7F4E9CF633AD1BFE9F479562D158DBFEBB1A52E0FEB79BFED27FAA6A6196BBFEE53BC40DBB50ABFEF31EB4014A490BFEFC04F53629ED4BFEFFD7C43328F13BFEFE8D594EB0C48BFEF82901B2CEEB6BFEECBB16EB638EABFEDC60D5140EE7DBFEC7441010D641ABFEAD9AC890C6B1FBFE8FA6A1EC3FF04BFE6DB43A4039D37BFE481A6673F777BBFE1F39541E710BCBFDE6F3270721E39"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FEFD712F9A817C101623FEF5CB49577627A01633FEE921DD42F09BA"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FEF5CB49577627A016103666F6F3FEFD712F9A817C10162036261723FED7954E7DBA2F8016203666F6F3FEE921DD42F09BA0163036261723FEA69263C485B15016303666F6F3FEC1528065B7D50"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FEC1528065B7D50016103626172016A3FEA69263C485B15016103626172016B3FE87996529F9D93016103626172016C3FE64B6BDE719865016103666F6F01693FEFD712F9A817C1016103666F6F016A3FEF5CB49577627A016103666F6F016B3FEE921DD42F09BA016103666F6F016C3FED7954E7DBA2F801620362617201693FD11EB3682A4C5F016203626172016A3FC5C17BBC13570B016203626172016B3FB21BD54FC5F9A7016203626172016CBF9DE67AC55F1633016203666F6F01693FE3E43A9692E21C016203666F6F016A3FE14A280FB5068C016203666F6F016B3FDD07B806C76111016203666F6F016C3FD730DE943B79D40163036261720169BFE027B304989ECA016303626172016ABFE2D5004B88AD70016303626172016BBFE5522217302FE1016303626172016CBFE798BAB490D185016303666F6F0169BFC07DF9F4A26C86016303666F6F016ABFCD14F54F250E7A016303666F6F016BBFD4B0C6B93445AB016303666F6F016CBFDAA22657537205"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE64B6BDE7198653FE3E43A9692E21C3FE14A280FB5068C3FDD07B806C761113FD730DE943B79D43FD11EB3682A4C5F3FC5C17BBC13570BBFE2D5004B88AD70BFE5522217302FE1BFE798BAB490D185BFE9A2F7EF858B7DBFEB6BA1F680F470BFECEE28B36603A6BFEE26AF7757704ABFECB23EB4D22C59BFEB23A2AD7DD937BFE94F9B84DBA8EBBFE73AD66234C8EABFE4EAA606DB24C1BFE264F5306A2D6ABFDF606EEC8AC71D03666F6F3FEFD712F9A817C13FEF5CB49577627A3FEE921DD42F09BA3FED7954E7DBA2F83FEC1528065B7D503FEA69263C485B153FE87996529F9D933FB21BD54FC5F9A7BF9DE67AC55F1633BFC07DF9F4A26C86BFCD14F54F250E7ABFD4B0C6B93445ABBFDAA22657537205BFE027B304989ECABFEF1216DBA340C9BFEFAE04BE85E5D2BFEFF8EA4756A624BFEFF207E2B9CBB6BFEF996F2CA70BB6BFEEF002C35EBE04BFEDF77403C11A5F"}} +{"expression":"map(a,f(a)(cos(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FEFD712F9A817C13FEC1528065B7D503FE3E43A9692E21C3FD11EB3682A4C5FBFC07DF9F4A26C860161016A3FEF5CB49577627A3FEA69263C485B153FE14A280FB5068C3FC5C17BBC13570BBFCD14F54F250E7A0161016B3FEE921DD42F09BA3FE87996529F9D933FDD07B806C761113FB21BD54FC5F9A7BFD4B0C6B93445AB0161016C3FED7954E7DBA2F83FE64B6BDE7198653FD730DE943B79D4BF9DE67AC55F1633BFDAA2265753720501620169BFE027B304989ECABFE9A2F7EF858B7DBFEF1216DBA340C9BFEF996F2CA70BB6BFEB23A2AD7DD9370162016ABFE2D5004B88AD70BFEB6BA1F680F470BFEFAE04BE85E5D2BFEEF002C35EBE04BFE94F9B84DBA8EB0162016BBFE5522217302FE1BFECEE28B36603A6BFEFF8EA4756A624BFEDF77403C11A5FBFE73AD66234C8EA0162016CBFE798BAB490D185BFEE26AF7757704ABFEFF207E2B9CBB6BFECB23EB4D22C59BFE4EAA606DB24C101630169BFE264F5306A2D6ABFCAFB5B54583D6A3FC7DFA3277C16643FE1BD6F3F7432D53FEAB5F7960DFE2A0163016ABFDF606EEC8AC71DBFBCB6072B598DCA3FD22785706B4AD93FE44F676F25B08C3FEC562D06A772230163016BBFD9A6B192163B53BF895F3A43506A343FD830C98EE45C9C3FE6AD6C3C07D4483FEDADE73EF950290163016CBFD3AB577C62C2AA3FB66655584E40403FDDFC2D59376AEE3FE8D16F88830A7F3FEEB9B7097822F5"}} +{"expression":"sin(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB98EAECB8BCB2C"}} +{"expression":"sin(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA33"}} +{"expression":"sin(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA333FD8EC3AE92B676B3FDEAEE8744B05F03FE2118D17A541593FE49D6E694619B83FE6F494C2BFFECD3FE91103985DA8413FEAED548F090CEE3FEC84C54C2D63383FEDD343A21A55C43FEED577F9C51E4B3FEF88CDDF44E1023FEFEB7A9B2C6D8B"}} +{"expression":"sin(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA333FD8EC3AE92B676B3FDEAEE8744B05F03FE2118D17A541593FE49D6E694619B83FE6F494C2BFFECD3FE91103985DA8413FEAED548F090CEE3FEC84C54C2D63383FEDD343A21A55C43FEED577F9C51E4B3FEF88CDDF44E1023FEFEB7A9B2C6D8B3FEFFC81C7E042C53FEFBBB7D72F98B63FEF29C281BD15F03FEE48171F1A38573FED18F6EAD1B4463FEB9F693FEB72FB3FE9DF33D9AAD7083FE7DCD12D582F243FE59D64F5C3D19B3FE326AF0DCFCAB13FE07EFCBBA085BB3FDB5A312424A70C3FD57072235DE5C83FCE9FB8D64830E33FC210386DB6D55B3FA54A0F8298102EBFADE33739E82D32BFC43102CAB70C87BFD05AC910FF4C6CBFD6733B7EBA621FBFDC524143F0D1F1BFE0F46AEC2E1B41BFE39456FFECC09DBFE6022E2D1FB3CBBFE837B9DDDC1EAEBFEA2F537AE2C8B8BFEBE3F2DFD012D8BFED513B3A018A25BFEE7386314528EFBFEF47ED3DC74080BFEFCC51135DECB9BFEFFF5F0F37EC52BFEFE0949A0C3E00BFEF70407622EBA4BFEEAF81F5E09933BFEDA0461CD822BCBFEC4542B2BA24D7BFEAA1EF54BC123BBFE8BA7C97320570BFE693C94E0AB057BFE433561796F5BBBFE19F37497AC7A0BFDDBC0AC78EDFD8BFD7ED98640BBD1BBFD1E1F18AB0A2C0BFC75119D733FB7BBFB54558DBBECD1D3F9137A9C2CB3E7E3FBDD62B2F352A2C3FCB890D40C6CB3C3FD3F04B2FE909833FD9E90FA43588FC3FDF9F8D9AEA10FB3FE282941BD81ABF3FE50608C26D0A083FE753B6E16463863FE965BA25E3C90F3FEB36C6DC1D74453FECC2377B0529F63FEE041886FCAE303FEEF932AD10F80D3FEF9F12FCEE54583FEFF4112C80B72F3FEFF753D53A5FA93FEFA8D2A028CF7B3FEF09565B49B4673FEE1A76F7E933333FECDE97772B614F3FEB58DFCF2DF7993FE98D34D85FD9FC3FE7802E57B4B12D3FE5370B3F2EA2033FE2B7A442CAD2DD3FE0085CE42337803FDA6026360C2F913FD46C1B899FD9173FCC87A81DD59BA93FBFDC3EBECE2C503F995EBAA84441E2BFB33D1A94A4277ABFC650570815B6E9BFD16486AEB1A154BFD77464E0B36E02BFDD4844A120B670BFE1689EF5F34F52BFE400942955E6D4BFE6655F99D0663FBFE890E1D4D1362FBFEA7D8DEF6F8D9FBFEC2677B8F04315"}} +{"expression":"sin(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB98EAECB8BCB2C01623FC96DFF233DD2BC01633FD2E9CD95BABA33"}} +{"expression":"sin(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC96DFF233DD2BC016103666F6F3FB98EAECB8BCB2C0162036261723FD8EC3AE92B676B016203666F6F3FD2E9CD95BABA330163036261723FE2118D17A54159016303666F6F3FDEAEE8744B05F0"}} +{"expression":"sin(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FDEAEE8744B05F0016103626172016A3FE2118D17A54159016103626172016B3FE49D6E694619B8016103626172016C3FE6F494C2BFFECD016103666F6F01693FB98EAECB8BCB2C016103666F6F016A3FC96DFF233DD2BC016103666F6F016B3FD2E9CD95BABA33016103666F6F016C3FD8EC3AE92B676B01620362617201693FEED577F9C51E4B016203626172016A3FEF88CDDF44E102016203626172016B3FEFEB7A9B2C6D8B016203626172016C3FEFFC81C7E042C5016203666F6F01693FE91103985DA841016203666F6F016A3FEAED548F090CEE016203666F6F016B3FEC84C54C2D6338016203666F6F016C3FEDD343A21A55C401630362617201693FEB9F693FEB72FB016303626172016A3FE9DF33D9AAD708016303626172016B3FE7DCD12D582F24016303626172016C3FE59D64F5C3D19B016303666F6F01693FEFBBB7D72F98B6016303666F6F016A3FEF29C281BD15F0016303666F6F016B3FEE48171F1A3857016303666F6F016C3FED18F6EAD1B446"}} +{"expression":"sin(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE6F494C2BFFECD3FE91103985DA8413FEAED548F090CEE3FEC84C54C2D63383FEDD343A21A55C43FEED577F9C51E4B3FEF88CDDF44E1023FE9DF33D9AAD7083FE7DCD12D582F243FE59D64F5C3D19B3FE326AF0DCFCAB13FE07EFCBBA085BB3FDB5A312424A70C3FD57072235DE5C8BFDC524143F0D1F1BFE0F46AEC2E1B41BFE39456FFECC09DBFE6022E2D1FB3CBBFE837B9DDDC1EAEBFEA2F537AE2C8B8BFEBE3F2DFD012D803666F6F3FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA333FD8EC3AE92B676B3FDEAEE8744B05F03FE2118D17A541593FE49D6E694619B83FEFEB7A9B2C6D8B3FEFFC81C7E042C53FEFBBB7D72F98B63FEF29C281BD15F03FEE48171F1A38573FED18F6EAD1B4463FEB9F693FEB72FB3FCE9FB8D64830E33FC210386DB6D55B3FA54A0F8298102EBFADE33739E82D32BFC43102CAB70C87BFD05AC910FF4C6CBFD6733B7EBA621F"}} +{"expression":"sin(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB98EAECB8BCB2C3FDEAEE8744B05F03FE91103985DA8413FEED577F9C51E4B3FEFBBB7D72F98B60161016A3FC96DFF233DD2BC3FE2118D17A541593FEAED548F090CEE3FEF88CDDF44E1023FEF29C281BD15F00161016B3FD2E9CD95BABA333FE49D6E694619B83FEC84C54C2D63383FEFEB7A9B2C6D8B3FEE48171F1A38570161016C3FD8EC3AE92B676B3FE6F494C2BFFECD3FEDD343A21A55C43FEFFC81C7E042C53FED18F6EAD1B446016201693FEB9F693FEB72FB3FE326AF0DCFCAB13FCE9FB8D64830E3BFC43102CAB70C87BFE0F46AEC2E1B410162016A3FE9DF33D9AAD7083FE07EFCBBA085BB3FC210386DB6D55BBFD05AC910FF4C6CBFE39456FFECC09D0162016B3FE7DCD12D582F243FDB5A312424A70C3FA54A0F8298102EBFD6733B7EBA621FBFE6022E2D1FB3CB0162016C3FE59D64F5C3D19B3FD57072235DE5C8BFADE33739E82D32BFDC524143F0D1F1BFE837B9DDDC1EAE01630169BFEA2F537AE2C8B8BFEF47ED3DC74080BFEF70407622EBA4BFEAA1EF54BC123BBFE19F37497AC7A00163016ABFEBE3F2DFD012D8BFEFCC51135DECB9BFEEAF81F5E09933BFE8BA7C97320570BFDDBC0AC78EDFD80163016BBFED513B3A018A25BFEFFF5F0F37EC52BFEDA0461CD822BCBFE693C94E0AB057BFD7ED98640BBD1B0163016CBFEE7386314528EFBFEFE0949A0C3E00BFEC4542B2BA24D7BFE433561796F5BBBFD1E1F18AB0A2C0"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB98EAECB8BCB2C"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA33"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA333FD8EC3AE92B676B3FDEAEE8744B05F03FE2118D17A541593FE49D6E694619B83FE6F494C2BFFECD3FE91103985DA8413FEAED548F090CEE3FEC84C54C2D63383FEDD343A21A55C43FEED577F9C51E4B3FEF88CDDF44E1023FEFEB7A9B2C6D8B"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA333FD8EC3AE92B676B3FDEAEE8744B05F03FE2118D17A541593FE49D6E694619B83FE6F494C2BFFECD3FE91103985DA8413FEAED548F090CEE3FEC84C54C2D63383FEDD343A21A55C43FEED577F9C51E4B3FEF88CDDF44E1023FEFEB7A9B2C6D8B3FEFFC81C7E042C53FEFBBB7D72F98B63FEF29C281BD15F03FEE48171F1A38573FED18F6EAD1B4463FEB9F693FEB72FB3FE9DF33D9AAD7083FE7DCD12D582F243FE59D64F5C3D19B3FE326AF0DCFCAB13FE07EFCBBA085BB3FDB5A312424A70C3FD57072235DE5C83FCE9FB8D64830E33FC210386DB6D55B3FA54A0F8298102EBFADE33739E82D32BFC43102CAB70C87BFD05AC910FF4C6CBFD6733B7EBA621FBFDC524143F0D1F1BFE0F46AEC2E1B41BFE39456FFECC09DBFE6022E2D1FB3CBBFE837B9DDDC1EAEBFEA2F537AE2C8B8BFEBE3F2DFD012D8BFED513B3A018A25BFEE7386314528EFBFEF47ED3DC74080BFEFCC51135DECB9BFEFFF5F0F37EC52BFEFE0949A0C3E00BFEF70407622EBA4BFEEAF81F5E09933BFEDA0461CD822BCBFEC4542B2BA24D7BFEAA1EF54BC123BBFE8BA7C97320570BFE693C94E0AB057BFE433561796F5BBBFE19F37497AC7A0BFDDBC0AC78EDFD8BFD7ED98640BBD1BBFD1E1F18AB0A2C0BFC75119D733FB7BBFB54558DBBECD1D3F9137A9C2CB3E7E3FBDD62B2F352A2C3FCB890D40C6CB3C3FD3F04B2FE909833FD9E90FA43588FC3FDF9F8D9AEA10FB3FE282941BD81ABF3FE50608C26D0A083FE753B6E16463863FE965BA25E3C90F3FEB36C6DC1D74453FECC2377B0529F63FEE041886FCAE303FEEF932AD10F80D3FEF9F12FCEE54583FEFF4112C80B72F3FEFF753D53A5FA93FEFA8D2A028CF7B3FEF09565B49B4673FEE1A76F7E933333FECDE97772B614F3FEB58DFCF2DF7993FE98D34D85FD9FC3FE7802E57B4B12D3FE5370B3F2EA2033FE2B7A442CAD2DD3FE0085CE42337803FDA6026360C2F913FD46C1B899FD9173FCC87A81DD59BA93FBFDC3EBECE2C503F995EBAA84441E2BFB33D1A94A4277ABFC650570815B6E9BFD16486AEB1A154BFD77464E0B36E02BFDD4844A120B670BFE1689EF5F34F52BFE400942955E6D4BFE6655F99D0663FBFE890E1D4D1362FBFEA7D8DEF6F8D9FBFEC2677B8F04315"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB98EAECB8BCB2C01623FC96DFF233DD2BC01633FD2E9CD95BABA33"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC96DFF233DD2BC016103666F6F3FB98EAECB8BCB2C0162036261723FD8EC3AE92B676B016203666F6F3FD2E9CD95BABA330163036261723FE2118D17A54159016303666F6F3FDEAEE8744B05F0"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FDEAEE8744B05F0016103626172016A3FE2118D17A54159016103626172016B3FE49D6E694619B8016103626172016C3FE6F494C2BFFECD016103666F6F01693FB98EAECB8BCB2C016103666F6F016A3FC96DFF233DD2BC016103666F6F016B3FD2E9CD95BABA33016103666F6F016C3FD8EC3AE92B676B01620362617201693FEED577F9C51E4B016203626172016A3FEF88CDDF44E102016203626172016B3FEFEB7A9B2C6D8B016203626172016C3FEFFC81C7E042C5016203666F6F01693FE91103985DA841016203666F6F016A3FEAED548F090CEE016203666F6F016B3FEC84C54C2D6338016203666F6F016C3FEDD343A21A55C401630362617201693FEB9F693FEB72FB016303626172016A3FE9DF33D9AAD708016303626172016B3FE7DCD12D582F24016303626172016C3FE59D64F5C3D19B016303666F6F01693FEFBBB7D72F98B6016303666F6F016A3FEF29C281BD15F0016303666F6F016B3FEE48171F1A3857016303666F6F016C3FED18F6EAD1B446"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE6F494C2BFFECD3FE91103985DA8413FEAED548F090CEE3FEC84C54C2D63383FEDD343A21A55C43FEED577F9C51E4B3FEF88CDDF44E1023FE9DF33D9AAD7083FE7DCD12D582F243FE59D64F5C3D19B3FE326AF0DCFCAB13FE07EFCBBA085BB3FDB5A312424A70C3FD57072235DE5C8BFDC524143F0D1F1BFE0F46AEC2E1B41BFE39456FFECC09DBFE6022E2D1FB3CBBFE837B9DDDC1EAEBFEA2F537AE2C8B8BFEBE3F2DFD012D803666F6F3FB98EAECB8BCB2C3FC96DFF233DD2BC3FD2E9CD95BABA333FD8EC3AE92B676B3FDEAEE8744B05F03FE2118D17A541593FE49D6E694619B83FEFEB7A9B2C6D8B3FEFFC81C7E042C53FEFBBB7D72F98B63FEF29C281BD15F03FEE48171F1A38573FED18F6EAD1B4463FEB9F693FEB72FB3FCE9FB8D64830E33FC210386DB6D55B3FA54A0F8298102EBFADE33739E82D32BFC43102CAB70C87BFD05AC910FF4C6CBFD6733B7EBA621F"}} +{"expression":"map(a,f(a)(sin(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB98EAECB8BCB2C3FDEAEE8744B05F03FE91103985DA8413FEED577F9C51E4B3FEFBBB7D72F98B60161016A3FC96DFF233DD2BC3FE2118D17A541593FEAED548F090CEE3FEF88CDDF44E1023FEF29C281BD15F00161016B3FD2E9CD95BABA333FE49D6E694619B83FEC84C54C2D63383FEFEB7A9B2C6D8B3FEE48171F1A38570161016C3FD8EC3AE92B676B3FE6F494C2BFFECD3FEDD343A21A55C43FEFFC81C7E042C53FED18F6EAD1B446016201693FEB9F693FEB72FB3FE326AF0DCFCAB13FCE9FB8D64830E3BFC43102CAB70C87BFE0F46AEC2E1B410162016A3FE9DF33D9AAD7083FE07EFCBBA085BB3FC210386DB6D55BBFD05AC910FF4C6CBFE39456FFECC09D0162016B3FE7DCD12D582F243FDB5A312424A70C3FA54A0F8298102EBFD6733B7EBA621FBFE6022E2D1FB3CB0162016C3FE59D64F5C3D19B3FD57072235DE5C8BFADE33739E82D32BFDC524143F0D1F1BFE837B9DDDC1EAE01630169BFEA2F537AE2C8B8BFEF47ED3DC74080BFEF70407622EBA4BFEAA1EF54BC123BBFE19F37497AC7A00163016ABFEBE3F2DFD012D8BFEFCC51135DECB9BFEEAF81F5E09933BFE8BA7C97320570BFDDBC0AC78EDFD80163016BBFED513B3A018A25BFEFFF5F0F37EC52BFEDA0461CD822BCBFE693C94E0AB057BFD7ED98640BBD1B0163016CBFEE7386314528EFBFEFE0949A0C3E00BFEC4542B2BA24D7BFE433561796F5BBBFD1E1F18AB0A2C0"}} +{"expression":"tan(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB9AF8877430B80"}} +{"expression":"tan(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E29998"}} +{"expression":"tan(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E299983FDB0F0B49DCDCD83FE17B4F5BF3474A3FE5E472E03A280C3FEAF406C2FC78AE3FF079664793B60B3FF4299BA9C2A1383FF8EB245CBEE3A63FFF6FA7D286214E400493C43ACB164D400CD11B1696E97E401731086DC00A35402C33ED50B88777"}} +{"expression":"tan(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E299983FDB0F0B49DCDCD83FE17B4F5BF3474A3FE5E472E03A280C3FEAF406C2FC78AE3FF079664793B60B3FF4299BA9C2A1383FF8EB245CBEE3A63FFF6FA7D286214E400493C43ACB164D400CD11B1696E97E401731086DC00A35402C33ED50B88777C0411DC3A1F73BEAC01EC952123D33F2C0112521C7CA80BDC0076AB21A0DF38BC0017AF62E0950F8BFFB5B880C6F419EBFF5FB2DE2B500EBBFF1E84C9047C337BFED4FFD331A1C6CBFE7E79B4E00BB15BFE340478A535B2BBFDE412B62BA7143BFD6C10031EC6D8FBFCF8A364255739FBFC23EF71254B86FBFA54EC734D416903FADF048F92660603FC4728C74EFFCF33FD0EA916F405CD13FD7F9360C8212A73FDF94F57ABCC0183FE3FDD037DA35543FE8C0F8B3CAA42E3FEE514D7FDCC3DA3FF2866F9BE4DE133FF6C6C3B4A4F47E3FFC71C9347017784002496A9CA760A94008C54566FDBDEC40128CA0C62BF5954021B868D80B4C1140542D9DE890C6A9C026C50DC43253B3C01511E9B3C687CBC00B0B4B739BBB07C00398597A58D5D2BFFE2B96D13EA593BFF80537409587B1BFF37B0C1674A47BBFEFDBD31615B07ABFEA0BD2C907E03EBFE51C83499B4CC8BFE0CA10D11279EFBFD9CC91A8E776FCBFD29FD86EBB95BEBFC7B6AC3AFF3643BFB5583DEE907AF93F9138494AF2A7463FBE0A94A390BBE93FCC320B15C520E83FD4FBA0262423563FDC5623343B6BE13FE22FD752AF75CB3FE6B109DE2CBE283FEBE2E6E13EEA793FF109CD601B305A3FF4DFBA34F373AF3FF9DD6F83006FB1400064EF1934ECE04005A5EA99227D5B400ED170AD3162CE4019C5805C97CBEA403281BF104956AFC035B7119FEAF168C01B32E78F49A1E4C00FDBF39CABB7C1C00630A37877CC77C000BB24225BAC36BFFA54D4C53D3438BFF538C9CD26B92ABFF150013B15FD40BFEC567B80303594BFE713A29CC6B6A4BFE2868AC2A1D792BFDCF2BD61315C1CBFD58C805D64CFB4BFCD4421B0D2E0C3BFC00E13BA44EE32BF9960B92D8859EA3FB34B121CC03DD03FC6A92B1538D9403FD212A6916D90193FD93561369E93C63FE07737A93F0A8E3FE4BF5F34BE37823FE9A010E3634DCB3FEF5AF2C1E7E6863FF32ADA63074E7F3FF79C55F5777A7A3FFD9930BC49E27B"}} +{"expression":"tan(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB9AF8877430B8001623FC9F267068A55EC01633FD3CC2A44E29998"}} +{"expression":"tan(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC9F267068A55EC016103666F6F3FB9AF8877430B800162036261723FDB0F0B49DCDCD8016203666F6F3FD3CC2A44E299980163036261723FE5E472E03A280C016303666F6F3FE17B4F5BF3474A"}} +{"expression":"tan(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE17B4F5BF3474A016103626172016A3FE5E472E03A280C016103626172016B3FEAF406C2FC78AE016103626172016C3FF079664793B60B016103666F6F01693FB9AF8877430B80016103666F6F016A3FC9F267068A55EC016103666F6F016B3FD3CC2A44E29998016103666F6F016C3FDB0F0B49DCDCD80162036261720169400CD11B1696E97E016203626172016A401731086DC00A35016203626172016B402C33ED50B88777016203626172016CC0411DC3A1F73BEA016203666F6F01693FF4299BA9C2A138016203666F6F016A3FF8EB245CBEE3A6016203666F6F016B3FFF6FA7D286214E016203666F6F016C400493C43ACB164D0163036261720169BFFB5B880C6F419E016303626172016ABFF5FB2DE2B500EB016303626172016BBFF1E84C9047C337016303626172016CBFED4FFD331A1C6C016303666F6F0169C01EC952123D33F2016303666F6F016AC0112521C7CA80BD016303666F6F016BC0076AB21A0DF38B016303666F6F016CC0017AF62E0950F8"}} +{"expression":"tan(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF079664793B60B3FF4299BA9C2A1383FF8EB245CBEE3A63FFF6FA7D286214E400493C43ACB164D400CD11B1696E97E401731086DC00A35BFF5FB2DE2B500EBBFF1E84C9047C337BFED4FFD331A1C6CBFE7E79B4E00BB15BFE340478A535B2BBFDE412B62BA7143BFD6C10031EC6D8F3FDF94F57ABCC0183FE3FDD037DA35543FE8C0F8B3CAA42E3FEE514D7FDCC3DA3FF2866F9BE4DE133FF6C6C3B4A4F47E3FFC71C93470177803666F6F3FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E299983FDB0F0B49DCDCD83FE17B4F5BF3474A3FE5E472E03A280C3FEAF406C2FC78AE402C33ED50B88777C0411DC3A1F73BEAC01EC952123D33F2C0112521C7CA80BDC0076AB21A0DF38BC0017AF62E0950F8BFFB5B880C6F419EBFCF8A364255739FBFC23EF71254B86FBFA54EC734D416903FADF048F92660603FC4728C74EFFCF33FD0EA916F405CD13FD7F9360C8212A7"}} +{"expression":"tan(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB9AF8877430B803FE17B4F5BF3474A3FF4299BA9C2A138400CD11B1696E97EC01EC952123D33F20161016A3FC9F267068A55EC3FE5E472E03A280C3FF8EB245CBEE3A6401731086DC00A35C0112521C7CA80BD0161016B3FD3CC2A44E299983FEAF406C2FC78AE3FFF6FA7D286214E402C33ED50B88777C0076AB21A0DF38B0161016C3FDB0F0B49DCDCD83FF079664793B60B400493C43ACB164DC0411DC3A1F73BEAC0017AF62E0950F801620169BFFB5B880C6F419EBFE7E79B4E00BB15BFCF8A364255739F3FC4728C74EFFCF33FE3FDD037DA35540162016ABFF5FB2DE2B500EBBFE340478A535B2BBFC23EF71254B86F3FD0EA916F405CD13FE8C0F8B3CAA42E0162016BBFF1E84C9047C337BFDE412B62BA7143BFA54EC734D416903FD7F9360C8212A73FEE514D7FDCC3DA0162016CBFED4FFD331A1C6CBFD6C10031EC6D8F3FADF048F92660603FDF94F57ABCC0183FF2866F9BE4DE13016301693FF6C6C3B4A4F47E40128CA0C62BF595C01511E9B3C687CBBFF80537409587B1BFE51C83499B4CC80163016A3FFC71C9347017784021B868D80B4C11C00B0B4B739BBB07BFF37B0C1674A47BBFE0CA10D11279EF0163016B4002496A9CA760A940542D9DE890C6A9C00398597A58D5D2BFEFDBD31615B07ABFD9CC91A8E776FC0163016C4008C54566FDBDECC026C50DC43253B3BFFE2B96D13EA593BFEA0BD2C907E03EBFD29FD86EBB95BE"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB9AF8877430B80"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E29998"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E299983FDB0F0B49DCDCD83FE17B4F5BF3474A3FE5E472E03A280C3FEAF406C2FC78AE3FF079664793B60B3FF4299BA9C2A1383FF8EB245CBEE3A63FFF6FA7D286214E400493C43ACB164D400CD11B1696E97E401731086DC00A35402C33ED50B88777"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E299983FDB0F0B49DCDCD83FE17B4F5BF3474A3FE5E472E03A280C3FEAF406C2FC78AE3FF079664793B60B3FF4299BA9C2A1383FF8EB245CBEE3A63FFF6FA7D286214E400493C43ACB164D400CD11B1696E97E401731086DC00A35402C33ED50B88777C0411DC3A1F73BEAC01EC952123D33F2C0112521C7CA80BDC0076AB21A0DF38BC0017AF62E0950F8BFFB5B880C6F419EBFF5FB2DE2B500EBBFF1E84C9047C337BFED4FFD331A1C6CBFE7E79B4E00BB15BFE340478A535B2BBFDE412B62BA7143BFD6C10031EC6D8FBFCF8A364255739FBFC23EF71254B86FBFA54EC734D416903FADF048F92660603FC4728C74EFFCF33FD0EA916F405CD13FD7F9360C8212A73FDF94F57ABCC0183FE3FDD037DA35543FE8C0F8B3CAA42E3FEE514D7FDCC3DA3FF2866F9BE4DE133FF6C6C3B4A4F47E3FFC71C9347017784002496A9CA760A94008C54566FDBDEC40128CA0C62BF5954021B868D80B4C1140542D9DE890C6A9C026C50DC43253B3C01511E9B3C687CBC00B0B4B739BBB07C00398597A58D5D2BFFE2B96D13EA593BFF80537409587B1BFF37B0C1674A47BBFEFDBD31615B07ABFEA0BD2C907E03EBFE51C83499B4CC8BFE0CA10D11279EFBFD9CC91A8E776FCBFD29FD86EBB95BEBFC7B6AC3AFF3643BFB5583DEE907AF93F9138494AF2A7463FBE0A94A390BBE93FCC320B15C520E83FD4FBA0262423563FDC5623343B6BE13FE22FD752AF75CB3FE6B109DE2CBE283FEBE2E6E13EEA793FF109CD601B305A3FF4DFBA34F373AF3FF9DD6F83006FB1400064EF1934ECE04005A5EA99227D5B400ED170AD3162CE4019C5805C97CBEA403281BF104956AFC035B7119FEAF168C01B32E78F49A1E4C00FDBF39CABB7C1C00630A37877CC77C000BB24225BAC36BFFA54D4C53D3438BFF538C9CD26B92ABFF150013B15FD40BFEC567B80303594BFE713A29CC6B6A4BFE2868AC2A1D792BFDCF2BD61315C1CBFD58C805D64CFB4BFCD4421B0D2E0C3BFC00E13BA44EE32BF9960B92D8859EA3FB34B121CC03DD03FC6A92B1538D9403FD212A6916D90193FD93561369E93C63FE07737A93F0A8E3FE4BF5F34BE37823FE9A010E3634DCB3FEF5AF2C1E7E6863FF32ADA63074E7F3FF79C55F5777A7A3FFD9930BC49E27B"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB9AF8877430B8001623FC9F267068A55EC01633FD3CC2A44E29998"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC9F267068A55EC016103666F6F3FB9AF8877430B800162036261723FDB0F0B49DCDCD8016203666F6F3FD3CC2A44E299980163036261723FE5E472E03A280C016303666F6F3FE17B4F5BF3474A"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE17B4F5BF3474A016103626172016A3FE5E472E03A280C016103626172016B3FEAF406C2FC78AE016103626172016C3FF079664793B60B016103666F6F01693FB9AF8877430B80016103666F6F016A3FC9F267068A55EC016103666F6F016B3FD3CC2A44E29998016103666F6F016C3FDB0F0B49DCDCD80162036261720169400CD11B1696E97E016203626172016A401731086DC00A35016203626172016B402C33ED50B88777016203626172016CC0411DC3A1F73BEA016203666F6F01693FF4299BA9C2A138016203666F6F016A3FF8EB245CBEE3A6016203666F6F016B3FFF6FA7D286214E016203666F6F016C400493C43ACB164D0163036261720169BFFB5B880C6F419E016303626172016ABFF5FB2DE2B500EB016303626172016BBFF1E84C9047C337016303626172016CBFED4FFD331A1C6C016303666F6F0169C01EC952123D33F2016303666F6F016AC0112521C7CA80BD016303666F6F016BC0076AB21A0DF38B016303666F6F016CC0017AF62E0950F8"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF079664793B60B3FF4299BA9C2A1383FF8EB245CBEE3A63FFF6FA7D286214E400493C43ACB164D400CD11B1696E97E401731086DC00A35BFF5FB2DE2B500EBBFF1E84C9047C337BFED4FFD331A1C6CBFE7E79B4E00BB15BFE340478A535B2BBFDE412B62BA7143BFD6C10031EC6D8F3FDF94F57ABCC0183FE3FDD037DA35543FE8C0F8B3CAA42E3FEE514D7FDCC3DA3FF2866F9BE4DE133FF6C6C3B4A4F47E3FFC71C93470177803666F6F3FB9AF8877430B803FC9F267068A55EC3FD3CC2A44E299983FDB0F0B49DCDCD83FE17B4F5BF3474A3FE5E472E03A280C3FEAF406C2FC78AE402C33ED50B88777C0411DC3A1F73BEAC01EC952123D33F2C0112521C7CA80BDC0076AB21A0DF38BC0017AF62E0950F8BFFB5B880C6F419EBFCF8A364255739FBFC23EF71254B86FBFA54EC734D416903FADF048F92660603FC4728C74EFFCF33FD0EA916F405CD13FD7F9360C8212A7"}} +{"expression":"map(a,f(a)(tan(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB9AF8877430B803FE17B4F5BF3474A3FF4299BA9C2A138400CD11B1696E97EC01EC952123D33F20161016A3FC9F267068A55EC3FE5E472E03A280C3FF8EB245CBEE3A6401731086DC00A35C0112521C7CA80BD0161016B3FD3CC2A44E299983FEAF406C2FC78AE3FFF6FA7D286214E402C33ED50B88777C0076AB21A0DF38B0161016C3FDB0F0B49DCDCD83FF079664793B60B400493C43ACB164DC0411DC3A1F73BEAC0017AF62E0950F801620169BFFB5B880C6F419EBFE7E79B4E00BB15BFCF8A364255739F3FC4728C74EFFCF33FE3FDD037DA35540162016ABFF5FB2DE2B500EBBFE340478A535B2BBFC23EF71254B86F3FD0EA916F405CD13FE8C0F8B3CAA42E0162016BBFF1E84C9047C337BFDE412B62BA7143BFA54EC734D416903FD7F9360C8212A73FEE514D7FDCC3DA0162016CBFED4FFD331A1C6CBFD6C10031EC6D8F3FADF048F92660603FDF94F57ABCC0183FF2866F9BE4DE13016301693FF6C6C3B4A4F47E40128CA0C62BF595C01511E9B3C687CBBFF80537409587B1BFE51C83499B4CC80163016A3FFC71C9347017784021B868D80B4C11C00B0B4B739BBB07BFF37B0C1674A47BBFE0CA10D11279EF0163016B4002496A9CA760A940542D9DE890C6A9C00398597A58D5D2BFEFDBD31615B07ABFD9CC91A8E776FC0163016C4008C54566FDBDECC026C50DC43253B3BFFE2B96D13EA593BFEA0BD2C907E03EBFD29FD86EBB95BE"}} +{"expression":"cosh(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0147F40224B38"}} +{"expression":"cosh(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C"}} +{"expression":"cosh(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C3FF14C128B1A7C2C3FF20AC1862AE8D03FF2F7AA606E56303FF4152C1862342F3FF566222FAE825A3FF6EDEBFD5D86803FF8B07551D9F5503FFAB24082D6F9113FFCF871F8DFA8003FFF88DD5C2795044001350A412F0A804002D1BC21E22022"}} +{"expression":"cosh(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C3FF14C128B1A7C2C3FF20AC1862AE8D03FF2F7AA606E56303FF4152C1862342F3FF566222FAE825A3FF6EDEBFD5D86803FF8B07551D9F5503FFAB24082D6F9113FFCF871F8DFA8003FFF88DD5C2795044001350A412F0A804002D1BC21E2202240049EA5B153125D4006A063DAD344F74008DC1AE58BD6D7400B5783A0F8AAB7400E18FA0DF2D9BC401093C6D4ED2D7340124589C2CEF9C14014261D2B7D618040163A505BAEDDE840188776E4B30AA3401B137642174316401DE4D4F525D240402081659E7A607940223AAACAED2BB1402422A497D6185E40263E35479AFBFD402892C34A71B792402B2647145E3E5A402DFF5A694CAEB1403092A4A33C887B403250124A3CA07D40343C6B68E7BD6340365C9D757C59534038B61ABD3F1CC5403B4EE858DE3E80403E2DAD98F061824040ACE28909C20940426DA7BA2CBB0240445DA42F240C79404681CEB06413584048DFA3B77D356D404B7D337D8FCF85404E6131844D2CE64050C982E0A9933240528D6FCBEFF3AA405480E568BDF76F4056A8E365AAC4CA40590AF009D7E905405BAD265C831F92405E9645C9B6718B4060E6E1B6159D2F4062ADEE9455E4194064A4D765F3FC074066D0A4B06BA24F406936E67DB9B919406BDDC29CF0766B406ECC04628691BC40710497085E60A24072CEC60A59B4FD4074C92524BD9DDC4076F8C5BBCD4B7C40796341A69E26DE407C0EC988C8A46B407F0234AE7705FB4081228949BA3A8B4082EFDF2112744A4084EDB9DE03AFC040872133D14E1EF140898FF0AEA7314E408C402BFFAED3CD408F38C91BEAA0AE409140B26758798E409311346C1DB0F540951290BDECC6BC409749EAA93F4E764099BCEFCF595DAA409C71E6B2AE9B68409F6FBECAFA076C40A15F11251D39C740A332C4E00D669F40A537A8E70B8D1440A772E991FCDF8740A9EA3E8112E92F40ACA3F942CCEE5B40AFA715845D889540B17DA57AF77EE540B35490884ECAA440B55D027868B0B340B79C30BE7A7BDC40BA17DD0B3504D640BCD6640C8F676040BFDECDBAAC368540C19C6FADCE5A0D40C37697B614FFBC40C5829DD053712E40C7C5C09B15224840CA45CBE94012F740CD09279BD639B340D00B7405C63B5240D1BB7016220CC0"}} +{"expression":"cosh(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF0147F40224B3801623FF0523184B1EE9D01633FF0B9B4E0B6EC4C"}} +{"expression":"cosh(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FF0523184B1EE9D016103666F6F3FF0147F40224B380162036261723FF14C128B1A7C2C016203666F6F3FF0B9B4E0B6EC4C0163036261723FF2F7AA606E5630016303666F6F3FF20AC1862AE8D0"}} +{"expression":"cosh(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FF20AC1862AE8D0016103626172016A3FF2F7AA606E5630016103626172016B3FF4152C1862342F016103626172016C3FF566222FAE825A016103666F6F01693FF0147F40224B38016103666F6F016A3FF0523184B1EE9D016103666F6F016B3FF0B9B4E0B6EC4C016103666F6F016C3FF14C128B1A7C2C01620362617201693FFF88DD5C279504016203626172016A4001350A412F0A80016203626172016B4002D1BC21E22022016203626172016C40049EA5B153125D016203666F6F01693FF6EDEBFD5D8680016203666F6F016A3FF8B07551D9F550016203666F6F016B3FFAB24082D6F911016203666F6F016C3FFCF871F8DFA8000163036261720169401093C6D4ED2D73016303626172016A40124589C2CEF9C1016303626172016B4014261D2B7D6180016303626172016C40163A505BAEDDE8016303666F6F01694006A063DAD344F7016303666F6F016A4008DC1AE58BD6D7016303666F6F016B400B5783A0F8AAB7016303666F6F016C400E18FA0DF2D9BC"}} +{"expression":"cosh(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF566222FAE825A3FF6EDEBFD5D86803FF8B07551D9F5503FFAB24082D6F9113FFCF871F8DFA8003FFF88DD5C2795044001350A412F0A8040124589C2CEF9C14014261D2B7D618040163A505BAEDDE840188776E4B30AA3401B137642174316401DE4D4F525D240402081659E7A6079403250124A3CA07D40343C6B68E7BD6340365C9D757C59534038B61ABD3F1CC5403B4EE858DE3E80403E2DAD98F061824040ACE28909C20903666F6F3FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C3FF14C128B1A7C2C3FF20AC1862AE8D03FF2F7AA606E56303FF4152C1862342F4002D1BC21E2202240049EA5B153125D4006A063DAD344F74008DC1AE58BD6D7400B5783A0F8AAB7400E18FA0DF2D9BC401093C6D4ED2D7340223AAACAED2BB1402422A497D6185E40263E35479AFBFD402892C34A71B792402B2647145E3E5A402DFF5A694CAEB1403092A4A33C887B"}} +{"expression":"cosh(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF0147F40224B383FF20AC1862AE8D03FF6EDEBFD5D86803FFF88DD5C2795044006A063DAD344F70161016A3FF0523184B1EE9D3FF2F7AA606E56303FF8B07551D9F5504001350A412F0A804008DC1AE58BD6D70161016B3FF0B9B4E0B6EC4C3FF4152C1862342F3FFAB24082D6F9114002D1BC21E22022400B5783A0F8AAB70161016C3FF14C128B1A7C2C3FF566222FAE825A3FFCF871F8DFA80040049EA5B153125D400E18FA0DF2D9BC01620169401093C6D4ED2D7340188776E4B30AA340223AAACAED2BB1402B2647145E3E5A40343C6B68E7BD630162016A40124589C2CEF9C1401B137642174316402422A497D6185E402DFF5A694CAEB140365C9D757C59530162016B4014261D2B7D6180401DE4D4F525D24040263E35479AFBFD403092A4A33C887B4038B61ABD3F1CC50162016C40163A505BAEDDE8402081659E7A6079402892C34A71B792403250124A3CA07D403B4EE858DE3E8001630169403E2DAD98F06182404681CEB06413584050C982E0A9933240590AF009D7E9054062ADEE9455E4190163016A4040ACE28909C2094048DFA3B77D356D40528D6FCBEFF3AA405BAD265C831F924064A4D765F3FC070163016B40426DA7BA2CBB02404B7D337D8FCF85405480E568BDF76F405E9645C9B6718B4066D0A4B06BA24F0163016C40445DA42F240C79404E6131844D2CE64056A8E365AAC4CA4060E6E1B6159D2F406936E67DB9B919"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0147F40224B38"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C3FF14C128B1A7C2C3FF20AC1862AE8D03FF2F7AA606E56303FF4152C1862342F3FF566222FAE825A3FF6EDEBFD5D86803FF8B07551D9F5503FFAB24082D6F9113FFCF871F8DFA8003FFF88DD5C2795044001350A412F0A804002D1BC21E22022"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C3FF14C128B1A7C2C3FF20AC1862AE8D03FF2F7AA606E56303FF4152C1862342F3FF566222FAE825A3FF6EDEBFD5D86803FF8B07551D9F5503FFAB24082D6F9113FFCF871F8DFA8003FFF88DD5C2795044001350A412F0A804002D1BC21E2202240049EA5B153125D4006A063DAD344F74008DC1AE58BD6D7400B5783A0F8AAB7400E18FA0DF2D9BC401093C6D4ED2D7340124589C2CEF9C14014261D2B7D618040163A505BAEDDE840188776E4B30AA3401B137642174316401DE4D4F525D240402081659E7A607940223AAACAED2BB1402422A497D6185E40263E35479AFBFD402892C34A71B792402B2647145E3E5A402DFF5A694CAEB1403092A4A33C887B403250124A3CA07D40343C6B68E7BD6340365C9D757C59534038B61ABD3F1CC5403B4EE858DE3E80403E2DAD98F061824040ACE28909C20940426DA7BA2CBB0240445DA42F240C79404681CEB06413584048DFA3B77D356D404B7D337D8FCF85404E6131844D2CE64050C982E0A9933240528D6FCBEFF3AA405480E568BDF76F4056A8E365AAC4CA40590AF009D7E905405BAD265C831F92405E9645C9B6718B4060E6E1B6159D2F4062ADEE9455E4194064A4D765F3FC074066D0A4B06BA24F406936E67DB9B919406BDDC29CF0766B406ECC04628691BC40710497085E60A24072CEC60A59B4FD4074C92524BD9DDC4076F8C5BBCD4B7C40796341A69E26DE407C0EC988C8A46B407F0234AE7705FB4081228949BA3A8B4082EFDF2112744A4084EDB9DE03AFC040872133D14E1EF140898FF0AEA7314E408C402BFFAED3CD408F38C91BEAA0AE409140B26758798E409311346C1DB0F540951290BDECC6BC409749EAA93F4E764099BCEFCF595DAA409C71E6B2AE9B68409F6FBECAFA076C40A15F11251D39C740A332C4E00D669F40A537A8E70B8D1440A772E991FCDF8740A9EA3E8112E92F40ACA3F942CCEE5B40AFA715845D889540B17DA57AF77EE540B35490884ECAA440B55D027868B0B340B79C30BE7A7BDC40BA17DD0B3504D640BCD6640C8F676040BFDECDBAAC368540C19C6FADCE5A0D40C37697B614FFBC40C5829DD053712E40C7C5C09B15224840CA45CBE94012F740CD09279BD639B340D00B7405C63B5240D1BB7016220CC0"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF0147F40224B3801623FF0523184B1EE9D01633FF0B9B4E0B6EC4C"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FF0523184B1EE9D016103666F6F3FF0147F40224B380162036261723FF14C128B1A7C2C016203666F6F3FF0B9B4E0B6EC4C0163036261723FF2F7AA606E5630016303666F6F3FF20AC1862AE8D0"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FF20AC1862AE8D0016103626172016A3FF2F7AA606E5630016103626172016B3FF4152C1862342F016103626172016C3FF566222FAE825A016103666F6F01693FF0147F40224B38016103666F6F016A3FF0523184B1EE9D016103666F6F016B3FF0B9B4E0B6EC4C016103666F6F016C3FF14C128B1A7C2C01620362617201693FFF88DD5C279504016203626172016A4001350A412F0A80016203626172016B4002D1BC21E22022016203626172016C40049EA5B153125D016203666F6F01693FF6EDEBFD5D8680016203666F6F016A3FF8B07551D9F550016203666F6F016B3FFAB24082D6F911016203666F6F016C3FFCF871F8DFA8000163036261720169401093C6D4ED2D73016303626172016A40124589C2CEF9C1016303626172016B4014261D2B7D6180016303626172016C40163A505BAEDDE8016303666F6F01694006A063DAD344F7016303666F6F016A4008DC1AE58BD6D7016303666F6F016B400B5783A0F8AAB7016303666F6F016C400E18FA0DF2D9BC"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF566222FAE825A3FF6EDEBFD5D86803FF8B07551D9F5503FFAB24082D6F9113FFCF871F8DFA8003FFF88DD5C2795044001350A412F0A8040124589C2CEF9C14014261D2B7D618040163A505BAEDDE840188776E4B30AA3401B137642174316401DE4D4F525D240402081659E7A6079403250124A3CA07D40343C6B68E7BD6340365C9D757C59534038B61ABD3F1CC5403B4EE858DE3E80403E2DAD98F061824040ACE28909C20903666F6F3FF0147F40224B383FF0523184B1EE9D3FF0B9B4E0B6EC4C3FF14C128B1A7C2C3FF20AC1862AE8D03FF2F7AA606E56303FF4152C1862342F4002D1BC21E2202240049EA5B153125D4006A063DAD344F74008DC1AE58BD6D7400B5783A0F8AAB7400E18FA0DF2D9BC401093C6D4ED2D7340223AAACAED2BB1402422A497D6185E40263E35479AFBFD402892C34A71B792402B2647145E3E5A402DFF5A694CAEB1403092A4A33C887B"}} +{"expression":"map(a,f(a)(cosh(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF0147F40224B383FF20AC1862AE8D03FF6EDEBFD5D86803FFF88DD5C2795044006A063DAD344F70161016A3FF0523184B1EE9D3FF2F7AA606E56303FF8B07551D9F5504001350A412F0A804008DC1AE58BD6D70161016B3FF0B9B4E0B6EC4C3FF4152C1862342F3FFAB24082D6F9114002D1BC21E22022400B5783A0F8AAB70161016C3FF14C128B1A7C2C3FF566222FAE825A3FFCF871F8DFA80040049EA5B153125D400E18FA0DF2D9BC01620169401093C6D4ED2D7340188776E4B30AA340223AAACAED2BB1402B2647145E3E5A40343C6B68E7BD630162016A40124589C2CEF9C1401B137642174316402422A497D6185E402DFF5A694CAEB140365C9D757C59530162016B4014261D2B7D6180401DE4D4F525D24040263E35479AFBFD403092A4A33C887B4038B61ABD3F1CC50162016C40163A505BAEDDE8402081659E7A6079402892C34A71B792403250124A3CA07D403B4EE858DE3E8001630169403E2DAD98F06182404681CEB06413584050C982E0A9933240590AF009D7E9054062ADEE9455E4190163016A4040ACE28909C2094048DFA3B77D356D40528D6FCBEFF3AA405BAD265C831F924064A4D765F3FC070163016B40426DA7BA2CBB02404B7D337D8FCF85405480E568BDF76F405E9645C9B6718B4066D0A4B06BA24F0163016C40445DA42F240C79404E6131844D2CE64056A8E365AAC4CA4060E6E1B6159D2F406936E67DB9B919"}} +{"expression":"sinh(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB9A487337B59B3"}} +{"expression":"sinh(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B926"}} +{"expression":"sinh(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B9263FDA49C41F850ED23FE0ACD00FE63B973FE45F775546A77D3FE8465153D5BDBC3FEC6B5D3C9C16EF3FF06C9CCD5B6AF83FF2CD9FC44EB9823FF55ECFE1B2B2153FF826C0F34123483FFB2C9310045C643FFE7804D9E7541C400108C3AABD6A60"}} +{"expression":"sinh(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B9263FDA49C41F850ED23FE0ACD00FE63B973FE45F775546A77D3FE8465153D5BDBC3FEC6B5D3C9C16EF3FF06C9CCD5B6AF83FF2CD9FC44EB9823FF55ECFE1B2B2153FF826C0F34123483FFB2C9310045C643FFE7804D9E7541C400108C3AABD6A6040030129C5635D7C40052A411348AC5640078992AC540633400A253298B81D35400D03CF63B6E1A0401016619D230D2A4011D41360B922FD4013BF72EA61AF1A4015DD6B30E4B6E840183368CDB0B6D3401AC767E2A1B654401DA0036F88823C402062431F5DE40B40221E7ECA07D84B40240926E70949AE402627249735007D40287DE481D7B796402B1364BAA2B89C402DEE441C2E9A1F40308AE99F364F3B403249139A3E4F914034361720F61B9F403656E35E36D7254038B0EC2A5371B3403B4A3803703630403E296F7D9585EA4040AAF72905BE5F40426BEB1CDA1FF840445C11E1595DAF40468062AB5FA9FC4048DE5A56945091404B7C0974D8F5F0404E6023D82DF5E04050C908DF6DE2C640528D0166F0737440548081852230564056A8890384D34A40590A9E4194C393405BACDC5C994386405E9602D48D06614060E6C36B1A25E94062ADD32B565D454064A4BE98B5E83E4066D08E3F636553406936D22F67C805406BDDB03D4E0647406ECBF3C2804AF04071048F82DD113A4072CEBF3C14D29B4074C91EFC453B364076F8C0295A47C64079633C9BE9C102407C0EC4F8E7E70F407F02308DB9AEA3408122876BA380C94082EFDD707ABF004084EDB85696A2B4408721326F20D75F40898FEF6E2E3C5D408C402ADDB5198D408F38C815892C5C409140B1F0A3C1CA4093113400B4D79F409512905CBC9936409749EA514ECA664099BCEF7FC732FA409C71E66AAEEB00409F6FBE89D458D840A15F1107A3EE2B40A332C4C56222A340A537A8CEE9FC5A40A772E97C272E4F40A9EA3E6D5125ED40ACA3F930EC7A6540AFA7157430966F40B17DA573A60DE740B3549081AFA1B640B55D02726AD89D40B79C30B90E9AB440BA17DD064D36AB40BCD664081F1AAB40BFDECDB6A80BE940C19C6FABFD30A540C37697B4701A6C40C5829DCED6999240C7C5C099BC889C40CA45CBE808445140CD09279ABC172D40D00B74054696B040D1BB7015AE8DB6"}} +{"expression":"sinh(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB9A487337B59B301623FC9C560CD35EF8201633FD37D42AF54B926"}} +{"expression":"sinh(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC9C560CD35EF82016103666F6F3FB9A487337B59B30162036261723FDA49C41F850ED2016203666F6F3FD37D42AF54B9260163036261723FE45F775546A77D016303666F6F3FE0ACD00FE63B97"}} +{"expression":"sinh(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE0ACD00FE63B97016103626172016A3FE45F775546A77D016103626172016B3FE8465153D5BDBC016103626172016C3FEC6B5D3C9C16EF016103666F6F01693FB9A487337B59B3016103666F6F016A3FC9C560CD35EF82016103666F6F016B3FD37D42AF54B926016103666F6F016C3FDA49C41F850ED201620362617201693FFB2C9310045C64016203626172016A3FFE7804D9E7541C016203626172016B400108C3AABD6A60016203626172016C40030129C5635D7C016203666F6F01693FF06C9CCD5B6AF8016203666F6F016A3FF2CD9FC44EB982016203666F6F016B3FF55ECFE1B2B215016203666F6F016C3FF826C0F34123480163036261720169401016619D230D2A016303626172016A4011D41360B922FD016303626172016B4013BF72EA61AF1A016303626172016C4015DD6B30E4B6E8016303666F6F016940052A411348AC56016303666F6F016A40078992AC540633016303666F6F016B400A253298B81D35016303666F6F016C400D03CF63B6E1A0"}} +{"expression":"sinh(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FEC6B5D3C9C16EF3FF06C9CCD5B6AF83FF2CD9FC44EB9823FF55ECFE1B2B2153FF826C0F34123483FFB2C9310045C643FFE7804D9E7541C4011D41360B922FD4013BF72EA61AF1A4015DD6B30E4B6E840183368CDB0B6D3401AC767E2A1B654401DA0036F88823C402062431F5DE40B403249139A3E4F914034361720F61B9F403656E35E36D7254038B0EC2A5371B3403B4A3803703630403E296F7D9585EA4040AAF72905BE5F03666F6F3FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B9263FDA49C41F850ED23FE0ACD00FE63B973FE45F775546A77D3FE8465153D5BDBC400108C3AABD6A6040030129C5635D7C40052A411348AC5640078992AC540633400A253298B81D35400D03CF63B6E1A0401016619D230D2A40221E7ECA07D84B40240926E70949AE402627249735007D40287DE481D7B796402B1364BAA2B89C402DEE441C2E9A1F40308AE99F364F3B"}} +{"expression":"sinh(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB9A487337B59B33FE0ACD00FE63B973FF06C9CCD5B6AF83FFB2C9310045C6440052A411348AC560161016A3FC9C560CD35EF823FE45F775546A77D3FF2CD9FC44EB9823FFE7804D9E7541C40078992AC5406330161016B3FD37D42AF54B9263FE8465153D5BDBC3FF55ECFE1B2B215400108C3AABD6A60400A253298B81D350161016C3FDA49C41F850ED23FEC6B5D3C9C16EF3FF826C0F341234840030129C5635D7C400D03CF63B6E1A001620169401016619D230D2A40183368CDB0B6D340221E7ECA07D84B402B1364BAA2B89C4034361720F61B9F0162016A4011D41360B922FD401AC767E2A1B65440240926E70949AE402DEE441C2E9A1F403656E35E36D7250162016B4013BF72EA61AF1A401DA0036F88823C402627249735007D40308AE99F364F3B4038B0EC2A5371B30162016C4015DD6B30E4B6E8402062431F5DE40B40287DE481D7B796403249139A3E4F91403B4A380370363001630169403E296F7D9585EA40468062AB5FA9FC4050C908DF6DE2C640590A9E4194C3934062ADD32B565D450163016A4040AAF72905BE5F4048DE5A5694509140528D0166F07374405BACDC5C9943864064A4BE98B5E83E0163016B40426BEB1CDA1FF8404B7C0974D8F5F04054808185223056405E9602D48D06614066D08E3F6365530163016C40445C11E1595DAF404E6023D82DF5E04056A8890384D34A4060E6C36B1A25E9406936D22F67C805"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB9A487337B59B3"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B926"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B9263FDA49C41F850ED23FE0ACD00FE63B973FE45F775546A77D3FE8465153D5BDBC3FEC6B5D3C9C16EF3FF06C9CCD5B6AF83FF2CD9FC44EB9823FF55ECFE1B2B2153FF826C0F34123483FFB2C9310045C643FFE7804D9E7541C400108C3AABD6A60"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B9263FDA49C41F850ED23FE0ACD00FE63B973FE45F775546A77D3FE8465153D5BDBC3FEC6B5D3C9C16EF3FF06C9CCD5B6AF83FF2CD9FC44EB9823FF55ECFE1B2B2153FF826C0F34123483FFB2C9310045C643FFE7804D9E7541C400108C3AABD6A6040030129C5635D7C40052A411348AC5640078992AC540633400A253298B81D35400D03CF63B6E1A0401016619D230D2A4011D41360B922FD4013BF72EA61AF1A4015DD6B30E4B6E840183368CDB0B6D3401AC767E2A1B654401DA0036F88823C402062431F5DE40B40221E7ECA07D84B40240926E70949AE402627249735007D40287DE481D7B796402B1364BAA2B89C402DEE441C2E9A1F40308AE99F364F3B403249139A3E4F914034361720F61B9F403656E35E36D7254038B0EC2A5371B3403B4A3803703630403E296F7D9585EA4040AAF72905BE5F40426BEB1CDA1FF840445C11E1595DAF40468062AB5FA9FC4048DE5A56945091404B7C0974D8F5F0404E6023D82DF5E04050C908DF6DE2C640528D0166F0737440548081852230564056A8890384D34A40590A9E4194C393405BACDC5C994386405E9602D48D06614060E6C36B1A25E94062ADD32B565D454064A4BE98B5E83E4066D08E3F636553406936D22F67C805406BDDB03D4E0647406ECBF3C2804AF04071048F82DD113A4072CEBF3C14D29B4074C91EFC453B364076F8C0295A47C64079633C9BE9C102407C0EC4F8E7E70F407F02308DB9AEA3408122876BA380C94082EFDD707ABF004084EDB85696A2B4408721326F20D75F40898FEF6E2E3C5D408C402ADDB5198D408F38C815892C5C409140B1F0A3C1CA4093113400B4D79F409512905CBC9936409749EA514ECA664099BCEF7FC732FA409C71E66AAEEB00409F6FBE89D458D840A15F1107A3EE2B40A332C4C56222A340A537A8CEE9FC5A40A772E97C272E4F40A9EA3E6D5125ED40ACA3F930EC7A6540AFA7157430966F40B17DA573A60DE740B3549081AFA1B640B55D02726AD89D40B79C30B90E9AB440BA17DD064D36AB40BCD664081F1AAB40BFDECDB6A80BE940C19C6FABFD30A540C37697B4701A6C40C5829DCED6999240C7C5C099BC889C40CA45CBE808445140CD09279ABC172D40D00B74054696B040D1BB7015AE8DB6"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB9A487337B59B301623FC9C560CD35EF8201633FD37D42AF54B926"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC9C560CD35EF82016103666F6F3FB9A487337B59B30162036261723FDA49C41F850ED2016203666F6F3FD37D42AF54B9260163036261723FE45F775546A77D016303666F6F3FE0ACD00FE63B97"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE0ACD00FE63B97016103626172016A3FE45F775546A77D016103626172016B3FE8465153D5BDBC016103626172016C3FEC6B5D3C9C16EF016103666F6F01693FB9A487337B59B3016103666F6F016A3FC9C560CD35EF82016103666F6F016B3FD37D42AF54B926016103666F6F016C3FDA49C41F850ED201620362617201693FFB2C9310045C64016203626172016A3FFE7804D9E7541C016203626172016B400108C3AABD6A60016203626172016C40030129C5635D7C016203666F6F01693FF06C9CCD5B6AF8016203666F6F016A3FF2CD9FC44EB982016203666F6F016B3FF55ECFE1B2B215016203666F6F016C3FF826C0F34123480163036261720169401016619D230D2A016303626172016A4011D41360B922FD016303626172016B4013BF72EA61AF1A016303626172016C4015DD6B30E4B6E8016303666F6F016940052A411348AC56016303666F6F016A40078992AC540633016303666F6F016B400A253298B81D35016303666F6F016C400D03CF63B6E1A0"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FEC6B5D3C9C16EF3FF06C9CCD5B6AF83FF2CD9FC44EB9823FF55ECFE1B2B2153FF826C0F34123483FFB2C9310045C643FFE7804D9E7541C4011D41360B922FD4013BF72EA61AF1A4015DD6B30E4B6E840183368CDB0B6D3401AC767E2A1B654401DA0036F88823C402062431F5DE40B403249139A3E4F914034361720F61B9F403656E35E36D7254038B0EC2A5371B3403B4A3803703630403E296F7D9585EA4040AAF72905BE5F03666F6F3FB9A487337B59B33FC9C560CD35EF823FD37D42AF54B9263FDA49C41F850ED23FE0ACD00FE63B973FE45F775546A77D3FE8465153D5BDBC400108C3AABD6A6040030129C5635D7C40052A411348AC5640078992AC540633400A253298B81D35400D03CF63B6E1A0401016619D230D2A40221E7ECA07D84B40240926E70949AE402627249735007D40287DE481D7B796402B1364BAA2B89C402DEE441C2E9A1F40308AE99F364F3B"}} +{"expression":"map(a,f(a)(sinh(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB9A487337B59B33FE0ACD00FE63B973FF06C9CCD5B6AF83FFB2C9310045C6440052A411348AC560161016A3FC9C560CD35EF823FE45F775546A77D3FF2CD9FC44EB9823FFE7804D9E7541C40078992AC5406330161016B3FD37D42AF54B9263FE8465153D5BDBC3FF55ECFE1B2B215400108C3AABD6A60400A253298B81D350161016C3FDA49C41F850ED23FEC6B5D3C9C16EF3FF826C0F341234840030129C5635D7C400D03CF63B6E1A001620169401016619D230D2A40183368CDB0B6D340221E7ECA07D84B402B1364BAA2B89C4034361720F61B9F0162016A4011D41360B922FD401AC767E2A1B65440240926E70949AE402DEE441C2E9A1F403656E35E36D7250162016B4013BF72EA61AF1A401DA0036F88823C402627249735007D40308AE99F364F3B4038B0EC2A5371B30162016C4015DD6B30E4B6E8402062431F5DE40B40287DE481D7B796403249139A3E4F91403B4A380370363001630169403E296F7D9585EA40468062AB5FA9FC4050C908DF6DE2C640590A9E4194C3934062ADD32B565D450163016A4040AAF72905BE5F4048DE5A5694509140528D0166F07374405BACDC5C9943864064A4BE98B5E83E0163016B40426BEB1CDA1FF8404B7C0974D8F5F04054808185223056405E9602D48D06614066D08E3F6365530163016C40445C11E1595DAF404E6023D82DF5E04056A8890384D34A4060E6C36B1A25E9406936D22F67C805"}} +{"expression":"tanh(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB983D7795F413A"}} +{"expression":"tanh(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA"}} +{"expression":"tanh(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA3FD8511573C242D63FDD9353D7568AF33FE12F8292D2CCFC3FE356FB17AF2E923FE53FCA0A748A423FE6EBE982D6605D3FE85EFAB514F3943FE99DB01FDE24053FEAAD4C6D28DCAF3FEB933C726E9B3A3FEC54CCFACFA1183FECF6F9786DF577"}} +{"expression":"tanh(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA3FD8511573C242D63FDD9353D7568AF33FE12F8292D2CCFC3FE356FB17AF2E923FE53FCA0A748A423FE6EBE982D6605D3FE85EFAB514F3943FE99DB01FDE24053FEAAD4C6D28DCAF3FEB933C726E9B3A3FEC54CCFACFA1183FECF6F9786DF5773FED7E4F0D5DAD303FEDEEDF00D3E7F53FEE4C3C1F9A968E3FEE997F4C3BCD483FEED9505E1BC3D43FEF0DF13843075E3FEF3949A819042D3FEF5CF31E1C81033FEF7A43B1F623503FEF9258260A71C23FEFA61CCB69A6603FEFB655437478D53FEFC3A32D87C3723FEFCE8BD82660E83FEFD77D111A0B003FEFDED130CA91243FEFE4D27BE70B933FEFE9BDF44F7C033FEFEDC5AF87E3383FEFF112C63A90773FEFF3C6EDA3A2963FEFF5FDC948488C3FEFF7CE0126A2893FEFF94A269AEF873FEFFA81708A0B423FEFFB8055F328883FEFFC510CD4C09B3FEFFCFBF24C09553FEFFD87DFFC38C53FEFFDFA721539833FEFFE5840BAA36E3FEFFEA50F0EEA103FEFFEE3F1BF80C23FEFFF176E9994C13FEFFF419668DF113FEFFF641A285DA73FEFFF805C5D55893FEFFF977F4E09A23FEFFFAA70A595BE3FEFFFB9F2FC1E913FEFFFC6A5A500D83FEFFFD10B1303023FEFFFD98E14151B3FEFFFE0861A4EEF3FEFFFE63ABE253C3FEFFFEAE69DD8FE3FEFFFEEB9B79E833FEFFFF1DB56A2C03FEFFFF46BA6B57C3FEFFFF684FEC9B93FEFFFF83CEF8EBF3FEFFFF9A520FD1F3FEFFFFACC07BB5A3FEFFFFBBD79A16D3FEFFFFC832750F23FEFFFFD24FFC2DC3FEFFFFDA981C98F3FEFFFFE15FECCB43FEFFFFE6ED16C4D3FEFFFFEB78A3C733FEFFFFEF314653A3FEFFFFF23D39F083FEFFFFF4BBCBF7C3FEFFFFF6C69D3103FEFFFFF872A91F83FEFFFFF9D11D9663FEFFFFFAF00B37E3FEFFFFFBDAF5F783FEFFFFFC9B4B6923FEFFFFFD38C39F03FEFFFFFDB9B077D3FEFFFFFE233E8D43FEFFFFFE79AA5CE3FEFFFFFEC06BCEB3FEFFFFFEFA59D783FEFFFFFF29C7A5A3FEFFFFFF509C8433FEFFFFFF70676973FEFFFFFF8A6EF9E3FEFFFFFF9FBEA413FEFFFFFFB1315C83FEFFFFFFBF7A6723FEFFFFFFCB2C8913FEFFFFFFD4BFEC73FEFFFFFFDC96F353FEFFFFFFE3022A53FEFFFFFFE8438403FEFFFFFFEC90FED3FEFFFFFFF016CF93FEFFFFFFF2F9279"}} +{"expression":"tanh(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB983D7795F413A01623FC9439830B3A59001633FD2A4DDA7D914FA"}} +{"expression":"tanh(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC9439830B3A590016103666F6F3FB983D7795F413A0162036261723FD8511573C242D6016203666F6F3FD2A4DDA7D914FA0163036261723FE12F8292D2CCFC016303666F6F3FDD9353D7568AF3"}} +{"expression":"tanh(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FDD9353D7568AF3016103626172016A3FE12F8292D2CCFC016103626172016B3FE356FB17AF2E92016103626172016C3FE53FCA0A748A42016103666F6F01693FB983D7795F413A016103666F6F016A3FC9439830B3A590016103666F6F016B3FD2A4DDA7D914FA016103666F6F016C3FD8511573C242D601620362617201693FEB933C726E9B3A016203626172016A3FEC54CCFACFA118016203626172016B3FECF6F9786DF577016203626172016C3FED7E4F0D5DAD30016203666F6F01693FE6EBE982D6605D016203666F6F016A3FE85EFAB514F394016203666F6F016B3FE99DB01FDE2405016203666F6F016C3FEAAD4C6D28DCAF01630362617201693FEF0DF13843075E016303626172016A3FEF3949A819042D016303626172016B3FEF5CF31E1C8103016303626172016C3FEF7A43B1F62350016303666F6F01693FEDEEDF00D3E7F5016303666F6F016A3FEE4C3C1F9A968E016303666F6F016B3FEE997F4C3BCD48016303666F6F016C3FEED9505E1BC3D4"}} +{"expression":"tanh(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE53FCA0A748A423FE6EBE982D6605D3FE85EFAB514F3943FE99DB01FDE24053FEAAD4C6D28DCAF3FEB933C726E9B3A3FEC54CCFACFA1183FEF3949A819042D3FEF5CF31E1C81033FEF7A43B1F623503FEF9258260A71C23FEFA61CCB69A6603FEFB655437478D53FEFC3A32D87C3723FEFF3C6EDA3A2963FEFF5FDC948488C3FEFF7CE0126A2893FEFF94A269AEF873FEFFA81708A0B423FEFFB8055F328883FEFFC510CD4C09B03666F6F3FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA3FD8511573C242D63FDD9353D7568AF33FE12F8292D2CCFC3FE356FB17AF2E923FECF6F9786DF5773FED7E4F0D5DAD303FEDEEDF00D3E7F53FEE4C3C1F9A968E3FEE997F4C3BCD483FEED9505E1BC3D43FEF0DF13843075E3FEFCE8BD82660E83FEFD77D111A0B003FEFDED130CA91243FEFE4D27BE70B933FEFE9BDF44F7C033FEFEDC5AF87E3383FEFF112C63A9077"}} +{"expression":"tanh(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB983D7795F413A3FDD9353D7568AF33FE6EBE982D6605D3FEB933C726E9B3A3FEDEEDF00D3E7F50161016A3FC9439830B3A5903FE12F8292D2CCFC3FE85EFAB514F3943FEC54CCFACFA1183FEE4C3C1F9A968E0161016B3FD2A4DDA7D914FA3FE356FB17AF2E923FE99DB01FDE24053FECF6F9786DF5773FEE997F4C3BCD480161016C3FD8511573C242D63FE53FCA0A748A423FEAAD4C6D28DCAF3FED7E4F0D5DAD303FEED9505E1BC3D4016201693FEF0DF13843075E3FEF9258260A71C23FEFCE8BD82660E83FEFE9BDF44F7C033FEFF5FDC948488C0162016A3FEF3949A819042D3FEFA61CCB69A6603FEFD77D111A0B003FEFEDC5AF87E3383FEFF7CE0126A2890162016B3FEF5CF31E1C81033FEFB655437478D53FEFDED130CA91243FEFF112C63A90773FEFF94A269AEF870162016C3FEF7A43B1F623503FEFC3A32D87C3723FEFE4D27BE70B933FEFF3C6EDA3A2963FEFFA81708A0B42016301693FEFFB8055F328883FEFFDFA721539833FEFFF176E9994C13FEFFF977F4E09A23FEFFFD10B1303020163016A3FEFFC510CD4C09B3FEFFE5840BAA36E3FEFFF419668DF113FEFFFAA70A595BE3FEFFFD98E14151B0163016B3FEFFCFBF24C09553FEFFEA50F0EEA103FEFFF641A285DA73FEFFFB9F2FC1E913FEFFFE0861A4EEF0163016C3FEFFD87DFFC38C53FEFFEE3F1BF80C23FEFFF805C5D55893FEFFFC6A5A500D83FEFFFE63ABE253C"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB983D7795F413A"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA3FD8511573C242D63FDD9353D7568AF33FE12F8292D2CCFC3FE356FB17AF2E923FE53FCA0A748A423FE6EBE982D6605D3FE85EFAB514F3943FE99DB01FDE24053FEAAD4C6D28DCAF3FEB933C726E9B3A3FEC54CCFACFA1183FECF6F9786DF577"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA3FD8511573C242D63FDD9353D7568AF33FE12F8292D2CCFC3FE356FB17AF2E923FE53FCA0A748A423FE6EBE982D6605D3FE85EFAB514F3943FE99DB01FDE24053FEAAD4C6D28DCAF3FEB933C726E9B3A3FEC54CCFACFA1183FECF6F9786DF5773FED7E4F0D5DAD303FEDEEDF00D3E7F53FEE4C3C1F9A968E3FEE997F4C3BCD483FEED9505E1BC3D43FEF0DF13843075E3FEF3949A819042D3FEF5CF31E1C81033FEF7A43B1F623503FEF9258260A71C23FEFA61CCB69A6603FEFB655437478D53FEFC3A32D87C3723FEFCE8BD82660E83FEFD77D111A0B003FEFDED130CA91243FEFE4D27BE70B933FEFE9BDF44F7C033FEFEDC5AF87E3383FEFF112C63A90773FEFF3C6EDA3A2963FEFF5FDC948488C3FEFF7CE0126A2893FEFF94A269AEF873FEFFA81708A0B423FEFFB8055F328883FEFFC510CD4C09B3FEFFCFBF24C09553FEFFD87DFFC38C53FEFFDFA721539833FEFFE5840BAA36E3FEFFEA50F0EEA103FEFFEE3F1BF80C23FEFFF176E9994C13FEFFF419668DF113FEFFF641A285DA73FEFFF805C5D55893FEFFF977F4E09A23FEFFFAA70A595BE3FEFFFB9F2FC1E913FEFFFC6A5A500D83FEFFFD10B1303023FEFFFD98E14151B3FEFFFE0861A4EEF3FEFFFE63ABE253C3FEFFFEAE69DD8FE3FEFFFEEB9B79E833FEFFFF1DB56A2C03FEFFFF46BA6B57C3FEFFFF684FEC9B93FEFFFF83CEF8EBF3FEFFFF9A520FD1F3FEFFFFACC07BB5A3FEFFFFBBD79A16D3FEFFFFC832750F23FEFFFFD24FFC2DC3FEFFFFDA981C98F3FEFFFFE15FECCB43FEFFFFE6ED16C4D3FEFFFFEB78A3C733FEFFFFEF314653A3FEFFFFF23D39F083FEFFFFF4BBCBF7C3FEFFFFF6C69D3103FEFFFFF872A91F83FEFFFFF9D11D9663FEFFFFFAF00B37E3FEFFFFFBDAF5F783FEFFFFFC9B4B6923FEFFFFFD38C39F03FEFFFFFDB9B077D3FEFFFFFE233E8D43FEFFFFFE79AA5CE3FEFFFFFEC06BCEB3FEFFFFFEFA59D783FEFFFFFF29C7A5A3FEFFFFFF509C8433FEFFFFFF70676973FEFFFFFF8A6EF9E3FEFFFFFF9FBEA413FEFFFFFFB1315C83FEFFFFFFBF7A6723FEFFFFFFCB2C8913FEFFFFFFD4BFEC73FEFFFFFFDC96F353FEFFFFFFE3022A53FEFFFFFFE8438403FEFFFFFFEC90FED3FEFFFFFFF016CF93FEFFFFFFF2F9279"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB983D7795F413A01623FC9439830B3A59001633FD2A4DDA7D914FA"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC9439830B3A590016103666F6F3FB983D7795F413A0162036261723FD8511573C242D6016203666F6F3FD2A4DDA7D914FA0163036261723FE12F8292D2CCFC016303666F6F3FDD9353D7568AF3"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FDD9353D7568AF3016103626172016A3FE12F8292D2CCFC016103626172016B3FE356FB17AF2E92016103626172016C3FE53FCA0A748A42016103666F6F01693FB983D7795F413A016103666F6F016A3FC9439830B3A590016103666F6F016B3FD2A4DDA7D914FA016103666F6F016C3FD8511573C242D601620362617201693FEB933C726E9B3A016203626172016A3FEC54CCFACFA118016203626172016B3FECF6F9786DF577016203626172016C3FED7E4F0D5DAD30016203666F6F01693FE6EBE982D6605D016203666F6F016A3FE85EFAB514F394016203666F6F016B3FE99DB01FDE2405016203666F6F016C3FEAAD4C6D28DCAF01630362617201693FEF0DF13843075E016303626172016A3FEF3949A819042D016303626172016B3FEF5CF31E1C8103016303626172016C3FEF7A43B1F62350016303666F6F01693FEDEEDF00D3E7F5016303666F6F016A3FEE4C3C1F9A968E016303666F6F016B3FEE997F4C3BCD48016303666F6F016C3FEED9505E1BC3D4"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE53FCA0A748A423FE6EBE982D6605D3FE85EFAB514F3943FE99DB01FDE24053FEAAD4C6D28DCAF3FEB933C726E9B3A3FEC54CCFACFA1183FEF3949A819042D3FEF5CF31E1C81033FEF7A43B1F623503FEF9258260A71C23FEFA61CCB69A6603FEFB655437478D53FEFC3A32D87C3723FEFF3C6EDA3A2963FEFF5FDC948488C3FEFF7CE0126A2893FEFF94A269AEF873FEFFA81708A0B423FEFFB8055F328883FEFFC510CD4C09B03666F6F3FB983D7795F413A3FC9439830B3A5903FD2A4DDA7D914FA3FD8511573C242D63FDD9353D7568AF33FE12F8292D2CCFC3FE356FB17AF2E923FECF6F9786DF5773FED7E4F0D5DAD303FEDEEDF00D3E7F53FEE4C3C1F9A968E3FEE997F4C3BCD483FEED9505E1BC3D43FEF0DF13843075E3FEFCE8BD82660E83FEFD77D111A0B003FEFDED130CA91243FEFE4D27BE70B933FEFE9BDF44F7C033FEFEDC5AF87E3383FEFF112C63A9077"}} +{"expression":"map(a,f(a)(tanh(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB983D7795F413A3FDD9353D7568AF33FE6EBE982D6605D3FEB933C726E9B3A3FEDEEDF00D3E7F50161016A3FC9439830B3A5903FE12F8292D2CCFC3FE85EFAB514F3943FEC54CCFACFA1183FEE4C3C1F9A968E0161016B3FD2A4DDA7D914FA3FE356FB17AF2E923FE99DB01FDE24053FECF6F9786DF5773FEE997F4C3BCD480161016C3FD8511573C242D63FE53FCA0A748A423FEAAD4C6D28DCAF3FED7E4F0D5DAD303FEED9505E1BC3D4016201693FEF0DF13843075E3FEF9258260A71C23FEFCE8BD82660E83FEFE9BDF44F7C033FEFF5FDC948488C0162016A3FEF3949A819042D3FEFA61CCB69A6603FEFD77D111A0B003FEFEDC5AF87E3383FEFF7CE0126A2890162016B3FEF5CF31E1C81033FEFB655437478D53FEFDED130CA91243FEFF112C63A90773FEFF94A269AEF870162016C3FEF7A43B1F623503FEFC3A32D87C3723FEFE4D27BE70B933FEFF3C6EDA3A2963FEFFA81708A0B42016301693FEFFB8055F328883FEFFDFA721539833FEFFF176E9994C13FEFFF977F4E09A23FEFFFD10B1303020163016A3FEFFC510CD4C09B3FEFFE5840BAA36E3FEFFF419668DF113FEFFFAA70A595BE3FEFFFD98E14151B0163016B3FEFFCFBF24C09553FEFFEA50F0EEA103FEFFF641A285DA73FEFFFB9F2FC1E913FEFFFE0861A4EEF0163016C3FEFFD87DFFC38C53FEFFEE3F1BF80C23FEFFF805C5D55893FEFFFC6A5A500D83FEFFFE63ABE253C"}} +{"expression":"acos(a)","inputs":{"a":"0x02003FE0CCA12729AFB8"},"result":{"expect":"0x02003FF04A292B02A075"}} +{"expression":"acos(a)","inputs":{"a":"0x02010178033FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B"},"result":{"expect":"0x02010178033FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A3"}} +{"expression":"acos(a)","inputs":{"a":"0x02020178030179053FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A97914"},"result":{"expect":"0x02020178030179053FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A33FEDB9D521101D5B3FECC3E9DFD275683FEBCE2484AAE47C3FEAD94D1BC729013FE9E6224E17FF153FE8F5574FE8BE1B3FE8079235D8AAA83FE71D6AB318C1A43FE637693F4D0FF83FE556069E9D4DC33FE479ABC37FED283FE3A2B1FFA9ACBD"}} +{"expression":"acos(a)","inputs":{"a":"0x0203017803017905017A073FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A933FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF3FEF925599378CD23FEF9CA4D40C82163FEFA5FEB616FE8F3FEFAE798F0E40823FEFB629BE21D26E3FEFBD21D8FB11A83FEFC372D07518CD3FEFC92C130538E23FEFCE5BACD8BFA43FEFD30E65B4D32F3FEFD74FDCAB1CF83FEFDB2AA1BA3C6B3FEFDEA84D73D7203FEFE1D196C3E1BA3FEFE4AE66F5A36A3FEFE745EC1330753FEFE99EA9BBCE223FEFEBBE888D05813FEFEDAAE43934F83FEFEF68986548923FEFF0FC0C65F7393FEFF2693DF385C93FEFF3B3CAE9A9D03FEFF4DEFA27BE023FEFF5EDC3A4177B3FEFF6E2D7C3F19D3FEFF7C0A60819EE3FEFF889631D483C3FEFF93F0E5DE28B3FEFF9E376D1D14B3FEFFA783FB7FEAC3FEFFAFEE4A424463FEFFB78BD3AA3B93FEFFBE7009351453FEFFC4AC84B51D53FEFFCA5134D77C33FEFFCF6C857E1CB3FEFFD40B84505A23FEFFD83A01DC2373FEFFDC02AF994433FEFFDF6F3B191333FEFFE28866A604D3FEFFE5561F907333FEFFE7DF92604AB3FEFFEA2B3D1E27B3FEFFEC3EFFE1C633FEFFEE202BCF6283FEFFEFD390A9CC13FEFFF15D891B6543FEFFF2C205D51B73FEFFF404979F78F3FEFFF52878775093FEFFF63093CD1D33FEFFF71F8DFC0623FEFFF7F7CB0B7D23FEFFF8BB74CCA603FEFFF96C80631433FEFFFA0CB346F893FEFFFA9DA7CD7F33FEFFFB20D142ED33FEFFFB977FA0F2F3FEFFFC02E2EAAC43FEFFFC640E36E19"},"result":{"expect":"0x0203017803017905017A073FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A33FEDB9D521101D5B3FECC3E9DFD275683FEBCE2484AAE47C3FEAD94D1BC729013FE9E6224E17FF153FE8F5574FE8BE1B3FE8079235D8AAA83FE71D6AB318C1A43FE637693F4D0FF83FE556069E9D4DC33FE479ABC37FED283FE3A2B1FFA9ACBD3FE2D1637843BBA63FE205FBD106D6FF3FE140A901FC29FC3FE0818C4C49E6003FDF917686EAB7453FDE2C81C389C2013FDCD43D3F9685023FDB889B1118E1B43FDA497E8A09BFC33FD916BE363A9F533FD7F025BA663A7B3FD6D57790AAB7303FD5C66EA04F51FB3FD4C2BFB00C3DED3FD3CA1AB319300C3FD2DC2BF21514323FD1F89D1170130D3FD11F15F768EB5E3FD04F3D93EFE0D83FCF117519C78DC23FCD9667A24F622C3FCC2CA22A0EE4173FCAD37674967B893FC98A394C771A6F3FC850430F622CA13FC724F01E47BA963FC607A135043F403FC4F7BBACDB21753FC3F4A9ACA8726D3FC2FDDA4965FAE03FC212C19955C5183FC132D8BBDFCDD73FC05D9DD7F195CC3FBF252824EA1FB13FBDA286FC8144963FBC32720D67200C3FBAD40CAC114FED3FB986837088B6803FB8490BF70598723FB71AE49C9BAF6C3FB5FB543913F3723FB4E9A9D6E60AEF3FB3E53C6A1D177C3FB2ED6A86D26E423FB2019A17CC06C73FB1213815B3AC083FB04BB83F46918F3FAF0129A59567253FAD7E9C920F31573FAC0ED623E596F63FAAB0EEA669E27F3FA964095145816F3FA82753CD79F7B03FA6FA05BE877F803FA5DB604FC76E7E3FA4CAADC5FE28B43FA3C741152054EA3FA2D0757A40DA8D3FA1E5AE1997BA8D3FA10655A08DCE053FA031DDEBB621C23F9ECF7F613611FE3F9D4EF4568613B33F9BE1259EA118183F9A8529F93C1B143F993A236E7066833F97FF3EC52D117B3F96D3B2FFE82B4B3F95B6C0DF51F92D3F94A7B26ACD00923F93A5DA7E6F2F3E3F92B0945E5189CF3F91C7434EF50BF83F90E95232850E213F9016332AC0ECBB3F8E9ABE7EB24BFF3F8D1CAC11194AC63F8BB13ABBAB8AD63F8A578210EFD2243F890EA4F381A1B53F87D5D109A270893F86AC3E37888C453F85912E2018A5703F8483EBABC100C03F8383CA95288E243F829026FB6FA8BA3F81A864F9BBB3153F80CBF043D041A53F7FF4778EEDBCE83F7E6582A4F5A65F"}} +{"expression":"acos(a)","inputs":{"a":"0x010101780301613FE0CCA12729AFB801623FE1983D7795F41401633FE261D545E46A8B"},"result":{"expect":"0x010101780301613FF04A292B02A07501623FEFA2DD25F534F101633FEEAF1748E5C5A3"}} +{"expression":"acos(a)","inputs":{"a":"0x010201780179060161036261723FE1983D7795F414016103666F6F3FE0CCA12729AFB80162036261723FE32873061674B2016203666F6F3FE261D545E46A8B0163036261723FE4A93769F6453E016303666F6F3FE3EB2FD4D34391"},"result":{"expect":"0x010201780179060161036261723FEFA2DD25F534F1016103666F6F3FF04A292B02A0750162036261723FEDB9D521101D5B016203666F6F3FEEAF1748E5C5A30163036261723FEBCE2484AAE47C016303666F6F3FECC3E9DFD27568"}} +{"expression":"acos(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE3EB2FD4D34391016103626172016A3FE4A93769F6453E016103626172016B3FE561CB52A19476016103626172016C3FE614455CF090B6016103666F6F01693FE0CCA12729AFB8016103666F6F016A3FE1983D7795F414016103666F6F016B3FE261D545E46A8B016103666F6F016C3FE32873061674B201620362617201693FE9258F68070E5E016203626172016A3FE9AB7D8BD79748016203626172016B3FEA2991F2A97914016203626172016C3FEA9FE5053A4520016203666F6F01693FE6C0192BDC382E016203666F6F016A3FE764D4F5D5A2BD016203666F6F016B3FE802217B20C902016203666F6F016C3FE897C14969667D01630362617201693FEC8247621BC0C8016303626172016A3FECCED80FEF1202016303626172016B3FED15854CD0D92B016303626172016C3FED56A636946E58016303666F6F01693FEB0E9EDC4324D8016303666F6F016A3FEB75F4C16B302F016303666F6F016B3FEBD626C0B5B606016303666F6F016C3FEC2F7D5A8A79C9"},"result":{"expect":"0x010301780179017A1801610362617201693FECC3E9DFD27568016103626172016A3FEBCE2484AAE47C016103626172016B3FEAD94D1BC72901016103626172016C3FE9E6224E17FF15016103666F6F01693FF04A292B02A075016103666F6F016A3FEFA2DD25F534F1016103666F6F016B3FEEAF1748E5C5A3016103666F6F016C3FEDB9D521101D5B01620362617201693FE556069E9D4DC3016203626172016A3FE479ABC37FED28016203626172016B3FE3A2B1FFA9ACBD016203626172016C3FE2D1637843BBA6016203666F6F01693FE8F5574FE8BE1B016203666F6F016A3FE8079235D8AAA8016203666F6F016B3FE71D6AB318C1A4016203666F6F016C3FE637693F4D0FF801630362617201693FDE2C81C389C201016303626172016A3FDCD43D3F968502016303626172016B3FDB889B1118E1B4016303626172016C3FDA497E8A09BFC3016303666F6F01693FE205FBD106D6FF016303666F6F016A3FE140A901FC29FC016303666F6F016B3FE0818C4C49E600016303666F6F016C3FDF917686EAB745"}} +{"expression":"acos(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF03666F6F3FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A93"},"result":{"expect":"0x0301017902017803017A0702036261723FE9E6224E17FF153FE8F5574FE8BE1B3FE8079235D8AAA83FE71D6AB318C1A43FE637693F4D0FF83FE556069E9D4DC33FE479ABC37FED283FDCD43D3F9685023FDB889B1118E1B43FDA497E8A09BFC33FD916BE363A9F533FD7F025BA663A7B3FD6D57790AAB7303FD5C66EA04F51FB3FCD9667A24F622C3FCC2CA22A0EE4173FCAD37674967B893FC98A394C771A6F3FC850430F622CA13FC724F01E47BA963FC607A135043F4003666F6F3FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A33FEDB9D521101D5B3FECC3E9DFD275683FEBCE2484AAE47C3FEAD94D1BC729013FE3A2B1FFA9ACBD3FE2D1637843BBA63FE205FBD106D6FF3FE140A901FC29FC3FE0818C4C49E6003FDF917686EAB7453FDE2C81C389C2013FD4C2BFB00C3DED3FD3CA1AB319300C3FD2DC2BF21514323FD1F89D1170130D3FD11F15F768EB5E3FD04F3D93EFE0D83FCF117519C78DC2"}} +{"expression":"acos(a)","inputs":{"a":"0x03020178017A010179050C016101693FE0CCA12729AFB83FE3EB2FD4D343913FE6C0192BDC382E3FE9258F68070E5E3FEB0E9EDC4324D80161016A3FE1983D7795F4143FE4A93769F6453E3FE764D4F5D5A2BD3FE9AB7D8BD797483FEB75F4C16B302F0161016B3FE261D545E46A8B3FE561CB52A194763FE802217B20C9023FEA2991F2A979143FEBD626C0B5B6060161016C3FE32873061674B23FE614455CF090B63FE897C14969667D3FEA9FE5053A45203FEC2F7D5A8A79C9016201693FEC8247621BC0C83FED9291DDB596F83FEE54C20D06AA953FEEDC99CF2C9D4D3FEF3A59F801F5820162016A3FECCED80FEF12023FEDC99E39374D9E3FEE7B7CBC36FABD3FEEF76F8069F3FA3FEF4CBFA61DE6A30162016B3FED15854CD0D92B3FEDFC1F4CE6E8223FEE9EDD88B9D8AF3FEF0FDFCBF19A933FEF5D77DCF758080162016C3FED56A636946E583FEE2A667D67D08C3FEEBF2786AED6983FEF261E0FCD4B463FEF6CA82F0DE1EA016301693FEF7A732E4B69463FEFA5FEB616FE8F3FEFC372D07518CD3FEFD74FDCAB1CF83FEFE4AE66F5A36A0163016A3FEF86F89C2183AF3FEFAE798F0E40823FEFC92C130538E23FEFDB2AA1BA3C6B3FEFE745EC1330750163016B3FEF925599378CD23FEFB629BE21D26E3FEFCE5BACD8BFA43FEFDEA84D73D7203FEFE99EA9BBCE220163016C3FEF9CA4D40C82163FEFBD21D8FB11A83FEFD30E65B4D32F3FEFE1D196C3E1BA3FEFEBBE888D0581"},"result":{"expect":"0x03020178017A010179050C016101693FF04A292B02A0753FECC3E9DFD275683FE8F5574FE8BE1B3FE556069E9D4DC33FE205FBD106D6FF0161016A3FEFA2DD25F534F13FEBCE2484AAE47C3FE8079235D8AAA83FE479ABC37FED283FE140A901FC29FC0161016B3FEEAF1748E5C5A33FEAD94D1BC729013FE71D6AB318C1A43FE3A2B1FFA9ACBD3FE0818C4C49E6000161016C3FEDB9D521101D5B3FE9E6224E17FF153FE637693F4D0FF83FE2D1637843BBA63FDF917686EAB745016201693FDE2C81C389C2013FD916BE363A9F533FD4C2BFB00C3DED3FD11F15F768EB5E3FCC2CA22A0EE4170162016A3FDCD43D3F9685023FD7F025BA663A7B3FD3CA1AB319300C3FD04F3D93EFE0D83FCAD37674967B890162016B3FDB889B1118E1B43FD6D57790AAB7303FD2DC2BF21514323FCF117519C78DC23FC98A394C771A6F0162016C3FDA497E8A09BFC33FD5C66EA04F51FB3FD1F89D1170130D3FCD9667A24F622C3FC850430F622CA1016301693FC724F01E47BA963FC2FDDA4965FAE03FBF252824EA1FB13FB986837088B6803FB4E9A9D6E60AEF0163016A3FC607A135043F403FC212C19955C5183FBDA286FC8144963FB8490BF70598723FB3E53C6A1D177C0163016B3FC4F7BBACDB21753FC132D8BBDFCDD73FBC32720D67200C3FB71AE49C9BAF6C3FB2ED6A86D26E420163016C3FC3F4A9ACA8726D3FC05D9DD7F195CC3FBAD40CAC114FED3FB5FB543913F3723FB2019A17CC06C7"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x02003FE0CCA12729AFB8"},"result":{"expect":"0x02003FF04A292B02A075"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x02010178033FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B"},"result":{"expect":"0x02010178033FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A3"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x02020178030179053FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A97914"},"result":{"expect":"0x02020178030179053FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A33FEDB9D521101D5B3FECC3E9DFD275683FEBCE2484AAE47C3FEAD94D1BC729013FE9E6224E17FF153FE8F5574FE8BE1B3FE8079235D8AAA83FE71D6AB318C1A43FE637693F4D0FF83FE556069E9D4DC33FE479ABC37FED283FE3A2B1FFA9ACBD"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x0203017803017905017A073FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A933FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF3FEF925599378CD23FEF9CA4D40C82163FEFA5FEB616FE8F3FEFAE798F0E40823FEFB629BE21D26E3FEFBD21D8FB11A83FEFC372D07518CD3FEFC92C130538E23FEFCE5BACD8BFA43FEFD30E65B4D32F3FEFD74FDCAB1CF83FEFDB2AA1BA3C6B3FEFDEA84D73D7203FEFE1D196C3E1BA3FEFE4AE66F5A36A3FEFE745EC1330753FEFE99EA9BBCE223FEFEBBE888D05813FEFEDAAE43934F83FEFEF68986548923FEFF0FC0C65F7393FEFF2693DF385C93FEFF3B3CAE9A9D03FEFF4DEFA27BE023FEFF5EDC3A4177B3FEFF6E2D7C3F19D3FEFF7C0A60819EE3FEFF889631D483C3FEFF93F0E5DE28B3FEFF9E376D1D14B3FEFFA783FB7FEAC3FEFFAFEE4A424463FEFFB78BD3AA3B93FEFFBE7009351453FEFFC4AC84B51D53FEFFCA5134D77C33FEFFCF6C857E1CB3FEFFD40B84505A23FEFFD83A01DC2373FEFFDC02AF994433FEFFDF6F3B191333FEFFE28866A604D3FEFFE5561F907333FEFFE7DF92604AB3FEFFEA2B3D1E27B3FEFFEC3EFFE1C633FEFFEE202BCF6283FEFFEFD390A9CC13FEFFF15D891B6543FEFFF2C205D51B73FEFFF404979F78F3FEFFF52878775093FEFFF63093CD1D33FEFFF71F8DFC0623FEFFF7F7CB0B7D23FEFFF8BB74CCA603FEFFF96C80631433FEFFFA0CB346F893FEFFFA9DA7CD7F33FEFFFB20D142ED33FEFFFB977FA0F2F3FEFFFC02E2EAAC43FEFFFC640E36E19"},"result":{"expect":"0x0203017803017905017A073FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A33FEDB9D521101D5B3FECC3E9DFD275683FEBCE2484AAE47C3FEAD94D1BC729013FE9E6224E17FF153FE8F5574FE8BE1B3FE8079235D8AAA83FE71D6AB318C1A43FE637693F4D0FF83FE556069E9D4DC33FE479ABC37FED283FE3A2B1FFA9ACBD3FE2D1637843BBA63FE205FBD106D6FF3FE140A901FC29FC3FE0818C4C49E6003FDF917686EAB7453FDE2C81C389C2013FDCD43D3F9685023FDB889B1118E1B43FDA497E8A09BFC33FD916BE363A9F533FD7F025BA663A7B3FD6D57790AAB7303FD5C66EA04F51FB3FD4C2BFB00C3DED3FD3CA1AB319300C3FD2DC2BF21514323FD1F89D1170130D3FD11F15F768EB5E3FD04F3D93EFE0D83FCF117519C78DC23FCD9667A24F622C3FCC2CA22A0EE4173FCAD37674967B893FC98A394C771A6F3FC850430F622CA13FC724F01E47BA963FC607A135043F403FC4F7BBACDB21753FC3F4A9ACA8726D3FC2FDDA4965FAE03FC212C19955C5183FC132D8BBDFCDD73FC05D9DD7F195CC3FBF252824EA1FB13FBDA286FC8144963FBC32720D67200C3FBAD40CAC114FED3FB986837088B6803FB8490BF70598723FB71AE49C9BAF6C3FB5FB543913F3723FB4E9A9D6E60AEF3FB3E53C6A1D177C3FB2ED6A86D26E423FB2019A17CC06C73FB1213815B3AC083FB04BB83F46918F3FAF0129A59567253FAD7E9C920F31573FAC0ED623E596F63FAAB0EEA669E27F3FA964095145816F3FA82753CD79F7B03FA6FA05BE877F803FA5DB604FC76E7E3FA4CAADC5FE28B43FA3C741152054EA3FA2D0757A40DA8D3FA1E5AE1997BA8D3FA10655A08DCE053FA031DDEBB621C23F9ECF7F613611FE3F9D4EF4568613B33F9BE1259EA118183F9A8529F93C1B143F993A236E7066833F97FF3EC52D117B3F96D3B2FFE82B4B3F95B6C0DF51F92D3F94A7B26ACD00923F93A5DA7E6F2F3E3F92B0945E5189CF3F91C7434EF50BF83F90E95232850E213F9016332AC0ECBB3F8E9ABE7EB24BFF3F8D1CAC11194AC63F8BB13ABBAB8AD63F8A578210EFD2243F890EA4F381A1B53F87D5D109A270893F86AC3E37888C453F85912E2018A5703F8483EBABC100C03F8383CA95288E243F829026FB6FA8BA3F81A864F9BBB3153F80CBF043D041A53F7FF4778EEDBCE83F7E6582A4F5A65F"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x010101780301613FE0CCA12729AFB801623FE1983D7795F41401633FE261D545E46A8B"},"result":{"expect":"0x010101780301613FF04A292B02A07501623FEFA2DD25F534F101633FEEAF1748E5C5A3"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x010201780179060161036261723FE1983D7795F414016103666F6F3FE0CCA12729AFB80162036261723FE32873061674B2016203666F6F3FE261D545E46A8B0163036261723FE4A93769F6453E016303666F6F3FE3EB2FD4D34391"},"result":{"expect":"0x010201780179060161036261723FEFA2DD25F534F1016103666F6F3FF04A292B02A0750162036261723FEDB9D521101D5B016203666F6F3FEEAF1748E5C5A30163036261723FEBCE2484AAE47C016303666F6F3FECC3E9DFD27568"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE3EB2FD4D34391016103626172016A3FE4A93769F6453E016103626172016B3FE561CB52A19476016103626172016C3FE614455CF090B6016103666F6F01693FE0CCA12729AFB8016103666F6F016A3FE1983D7795F414016103666F6F016B3FE261D545E46A8B016103666F6F016C3FE32873061674B201620362617201693FE9258F68070E5E016203626172016A3FE9AB7D8BD79748016203626172016B3FEA2991F2A97914016203626172016C3FEA9FE5053A4520016203666F6F01693FE6C0192BDC382E016203666F6F016A3FE764D4F5D5A2BD016203666F6F016B3FE802217B20C902016203666F6F016C3FE897C14969667D01630362617201693FEC8247621BC0C8016303626172016A3FECCED80FEF1202016303626172016B3FED15854CD0D92B016303626172016C3FED56A636946E58016303666F6F01693FEB0E9EDC4324D8016303666F6F016A3FEB75F4C16B302F016303666F6F016B3FEBD626C0B5B606016303666F6F016C3FEC2F7D5A8A79C9"},"result":{"expect":"0x010301780179017A1801610362617201693FECC3E9DFD27568016103626172016A3FEBCE2484AAE47C016103626172016B3FEAD94D1BC72901016103626172016C3FE9E6224E17FF15016103666F6F01693FF04A292B02A075016103666F6F016A3FEFA2DD25F534F1016103666F6F016B3FEEAF1748E5C5A3016103666F6F016C3FEDB9D521101D5B01620362617201693FE556069E9D4DC3016203626172016A3FE479ABC37FED28016203626172016B3FE3A2B1FFA9ACBD016203626172016C3FE2D1637843BBA6016203666F6F01693FE8F5574FE8BE1B016203666F6F016A3FE8079235D8AAA8016203666F6F016B3FE71D6AB318C1A4016203666F6F016C3FE637693F4D0FF801630362617201693FDE2C81C389C201016303626172016A3FDCD43D3F968502016303626172016B3FDB889B1118E1B4016303626172016C3FDA497E8A09BFC3016303666F6F01693FE205FBD106D6FF016303666F6F016A3FE140A901FC29FC016303666F6F016B3FE0818C4C49E600016303666F6F016C3FDF917686EAB745"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF03666F6F3FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A93"},"result":{"expect":"0x0301017902017803017A0702036261723FE9E6224E17FF153FE8F5574FE8BE1B3FE8079235D8AAA83FE71D6AB318C1A43FE637693F4D0FF83FE556069E9D4DC33FE479ABC37FED283FDCD43D3F9685023FDB889B1118E1B43FDA497E8A09BFC33FD916BE363A9F533FD7F025BA663A7B3FD6D57790AAB7303FD5C66EA04F51FB3FCD9667A24F622C3FCC2CA22A0EE4173FCAD37674967B893FC98A394C771A6F3FC850430F622CA13FC724F01E47BA963FC607A135043F4003666F6F3FF04A292B02A0753FEFA2DD25F534F13FEEAF1748E5C5A33FEDB9D521101D5B3FECC3E9DFD275683FEBCE2484AAE47C3FEAD94D1BC729013FE3A2B1FFA9ACBD3FE2D1637843BBA63FE205FBD106D6FF3FE140A901FC29FC3FE0818C4C49E6003FDF917686EAB7453FDE2C81C389C2013FD4C2BFB00C3DED3FD3CA1AB319300C3FD2DC2BF21514323FD1F89D1170130D3FD11F15F768EB5E3FD04F3D93EFE0D83FCF117519C78DC2"}} +{"expression":"map(a,f(a)(acos(a)))","inputs":{"a":"0x03020178017A010179050C016101693FE0CCA12729AFB83FE3EB2FD4D343913FE6C0192BDC382E3FE9258F68070E5E3FEB0E9EDC4324D80161016A3FE1983D7795F4143FE4A93769F6453E3FE764D4F5D5A2BD3FE9AB7D8BD797483FEB75F4C16B302F0161016B3FE261D545E46A8B3FE561CB52A194763FE802217B20C9023FEA2991F2A979143FEBD626C0B5B6060161016C3FE32873061674B23FE614455CF090B63FE897C14969667D3FEA9FE5053A45203FEC2F7D5A8A79C9016201693FEC8247621BC0C83FED9291DDB596F83FEE54C20D06AA953FEEDC99CF2C9D4D3FEF3A59F801F5820162016A3FECCED80FEF12023FEDC99E39374D9E3FEE7B7CBC36FABD3FEEF76F8069F3FA3FEF4CBFA61DE6A30162016B3FED15854CD0D92B3FEDFC1F4CE6E8223FEE9EDD88B9D8AF3FEF0FDFCBF19A933FEF5D77DCF758080162016C3FED56A636946E583FEE2A667D67D08C3FEEBF2786AED6983FEF261E0FCD4B463FEF6CA82F0DE1EA016301693FEF7A732E4B69463FEFA5FEB616FE8F3FEFC372D07518CD3FEFD74FDCAB1CF83FEFE4AE66F5A36A0163016A3FEF86F89C2183AF3FEFAE798F0E40823FEFC92C130538E23FEFDB2AA1BA3C6B3FEFE745EC1330750163016B3FEF925599378CD23FEFB629BE21D26E3FEFCE5BACD8BFA43FEFDEA84D73D7203FEFE99EA9BBCE220163016C3FEF9CA4D40C82163FEFBD21D8FB11A83FEFD30E65B4D32F3FEFE1D196C3E1BA3FEFEBBE888D0581"},"result":{"expect":"0x03020178017A010179050C016101693FF04A292B02A0753FECC3E9DFD275683FE8F5574FE8BE1B3FE556069E9D4DC33FE205FBD106D6FF0161016A3FEFA2DD25F534F13FEBCE2484AAE47C3FE8079235D8AAA83FE479ABC37FED283FE140A901FC29FC0161016B3FEEAF1748E5C5A33FEAD94D1BC729013FE71D6AB318C1A43FE3A2B1FFA9ACBD3FE0818C4C49E6000161016C3FEDB9D521101D5B3FE9E6224E17FF153FE637693F4D0FF83FE2D1637843BBA63FDF917686EAB745016201693FDE2C81C389C2013FD916BE363A9F533FD4C2BFB00C3DED3FD11F15F768EB5E3FCC2CA22A0EE4170162016A3FDCD43D3F9685023FD7F025BA663A7B3FD3CA1AB319300C3FD04F3D93EFE0D83FCAD37674967B890162016B3FDB889B1118E1B43FD6D57790AAB7303FD2DC2BF21514323FCF117519C78DC23FC98A394C771A6F0162016C3FDA497E8A09BFC33FD5C66EA04F51FB3FD1F89D1170130D3FCD9667A24F622C3FC850430F622CA1016301693FC724F01E47BA963FC2FDDA4965FAE03FBF252824EA1FB13FB986837088B6803FB4E9A9D6E60AEF0163016A3FC607A135043F403FC212C19955C5183FBDA286FC8144963FB8490BF70598723FB3E53C6A1D177C0163016B3FC4F7BBACDB21753FC132D8BBDFCDD73FBC32720D67200C3FB71AE49C9BAF6C3FB2ED6A86D26E420163016C3FC3F4A9ACA8726D3FC05D9DD7F195CC3FBAD40CAC114FED3FB5FB543913F3723FB2019A17CC06C7"}} +{"expression":"asin(a)","inputs":{"a":"0x02003FE0CCA12729AFB8"},"result":{"expect":"0x02003FE1AFA452831947"}} +{"expression":"asin(a)","inputs":{"a":"0x02010178033FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B"},"result":{"expect":"0x02010178033FE1AFA4528319473FE2A119829325403FE394DF5FA2948D"}} +{"expression":"asin(a)","inputs":{"a":"0x02020178030179053FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A97914"},"result":{"expect":"0x02020178030179053FE1AFA4528319473FE2A119829325403FE394DF5FA2948D3FE48A2187783CD63FE5800CC8B5E4C93FE675D223DD75B43FE76AA98CC1312F3FE85DD45A705B1B3FE94E9F589F9C163FEA3C6472AFAF883FEB268BF56F988D3FEC0C8D693B4A383FECEDF009EB0C6D3FEDCA4AE5086D093FEEA144A8DEAD73"}} +{"expression":"asin(a)","inputs":{"a":"0x0203017803017905017A073FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A933FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF3FEF925599378CD23FEF9CA4D40C82163FEFA5FEB616FE8F3FEFAE798F0E40823FEFB629BE21D26E3FEFBD21D8FB11A83FEFC372D07518CD3FEFC92C130538E23FEFCE5BACD8BFA43FEFD30E65B4D32F3FEFD74FDCAB1CF83FEFDB2AA1BA3C6B3FEFDEA84D73D7203FEFE1D196C3E1BA3FEFE4AE66F5A36A3FEFE745EC1330753FEFE99EA9BBCE223FEFEBBE888D05813FEFEDAAE43934F83FEFEF68986548923FEFF0FC0C65F7393FEFF2693DF385C93FEFF3B3CAE9A9D03FEFF4DEFA27BE023FEFF5EDC3A4177B3FEFF6E2D7C3F19D3FEFF7C0A60819EE3FEFF889631D483C3FEFF93F0E5DE28B3FEFF9E376D1D14B3FEFFA783FB7FEAC3FEFFAFEE4A424463FEFFB78BD3AA3B93FEFFBE7009351453FEFFC4AC84B51D53FEFFCA5134D77C33FEFFCF6C857E1CB3FEFFD40B84505A23FEFFD83A01DC2373FEFFDC02AF994433FEFFDF6F3B191333FEFFE28866A604D3FEFFE5561F907333FEFFE7DF92604AB3FEFFEA2B3D1E27B3FEFFEC3EFFE1C633FEFFEE202BCF6283FEFFEFD390A9CC13FEFFF15D891B6543FEFFF2C205D51B73FEFFF404979F78F3FEFFF52878775093FEFFF63093CD1D33FEFFF71F8DFC0623FEFFF7F7CB0B7D23FEFFF8BB74CCA603FEFFF96C80631433FEFFFA0CB346F893FEFFFA9DA7CD7F33FEFFFB20D142ED33FEFFFB977FA0F2F3FEFFFC02E2EAAC43FEFFFC640E36E19"},"result":{"expect":"0x0203017803017905017A073FE1AFA4528319473FE2A119829325403FE394DF5FA2948D3FE48A2187783CD63FE5800CC8B5E4C93FE675D223DD75B43FE76AA98CC1312F3FE85DD45A705B1B3FE94E9F589F9C163FEA3C6472AFAF883FEB268BF56F988D3FEC0C8D693B4A383FECEDF009EB0C6D3FEDCA4AE5086D093FEEA144A8DEAD733FEF729330449E8A3FF01EFD6BC0C1993FF081A6D346181A3FF0E1352E1F3A183FF13D9DB2897F473FF196DAE361BC983FF1ECEC045E8BD83FF23FD48FFDF4AB3FF28F9BB1C1BD283FF2DC4BC6B585443FF325F1E5AA9E7A3FF36C9D70197F4C3FF3B05FAC3058993FF3F14B68411D9D3FF42F74A77DE1153FF46AF057BEE80C3FF4A3D40FE828553FF4DA35D669F2413FF50E2BEF4834E23FF53FCCB10B3B603FF56F2E5FFA40D33FF59C670F0250953FF5C78C85B15DA73FF5F0B42AB549CA3FF617F2F257E7843FF63D5D507B35C63FF661072DA3A5303FF68303DEA8C8EA3FF6A3661EAF1ECB3FF6C2400B176DBC3FF6DFA3211974753FF6FBA03CC8335D3FF716479945FA5F3FF72FA8D1F58B1D3FF747D2E47C18CF3FF75ED4336DBB173FF774BA898318193FF789931D3BA1B03FF79D6A94D3D3913FF7B04D0A7A72223FF7C24610B2EDE13FF7D360B6D5CC693FF7E3A78DA25BA13FF7F324ABD706343FF801E1B2C76CAC3FF80FE7D2E8F2583FF81D3FD04FC3FF3FF829F2071781DF3FF836066FB3B38E3FF84184A32500613FF84C73DF10DE043FF856DB09BA010D3FF860C0B5D85D5B3FF86A2B264FF11C3FF8732051C5F1A43FF87BA5E6143BD33FF883C14B9B2A713FF88B77A87226443FF892CDE3776F443FF899C8A73FBEA83FF8A06C64E67C0A3FF8A6BD56BF54D03FF8ACBF82EA14C93FF8B276BDC9A8B83FF8B7E6AC5F3CAC3FF8BD12C68A6B7E3FF8C1FE592F78D23FF8C6AC88448C6B3FF8CB2050C6E5343FF8CF5C8A98F9163FF8D363EA4A705B3FF8D73902CAE6F13FF8DADE470858E83FF8DE560B7A18E03FF8E1A2879929653FF8E4C5D746C8803FF8E7C1FC21FA833FF8EA98DECCD6033FF8ED4C50224D743FF8EFDE0A5D29D53FF8F24FB230E8373FF8F4A2D7D51C003FF8F6D8F803FBCD3FF8F8F37CECAB173FF8FAF3BF19DBFC3FF8FCDB064D4DC73FF8FEAA8A50B5B23FF9006373BC8C953FF90206DCB53F5B3FF90395D19F3772"}} +{"expression":"asin(a)","inputs":{"a":"0x010101780301613FE0CCA12729AFB801623FE1983D7795F41401633FE261D545E46A8B"},"result":{"expect":"0x010101780301613FE1AFA45283194701623FE2A1198293254001633FE394DF5FA2948D"}} +{"expression":"asin(a)","inputs":{"a":"0x010201780179060161036261723FE1983D7795F414016103666F6F3FE0CCA12729AFB80162036261723FE32873061674B2016203666F6F3FE261D545E46A8B0163036261723FE4A93769F6453E016303666F6F3FE3EB2FD4D34391"},"result":{"expect":"0x010201780179060161036261723FE2A11982932540016103666F6F3FE1AFA4528319470162036261723FE48A2187783CD6016203666F6F3FE394DF5FA2948D0163036261723FE675D223DD75B4016303666F6F3FE5800CC8B5E4C9"}} +{"expression":"asin(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE3EB2FD4D34391016103626172016A3FE4A93769F6453E016103626172016B3FE561CB52A19476016103626172016C3FE614455CF090B6016103666F6F01693FE0CCA12729AFB8016103666F6F016A3FE1983D7795F414016103666F6F016B3FE261D545E46A8B016103666F6F016C3FE32873061674B201620362617201693FE9258F68070E5E016203626172016A3FE9AB7D8BD79748016203626172016B3FEA2991F2A97914016203626172016C3FEA9FE5053A4520016203666F6F01693FE6C0192BDC382E016203666F6F016A3FE764D4F5D5A2BD016203666F6F016B3FE802217B20C902016203666F6F016C3FE897C14969667D01630362617201693FEC8247621BC0C8016303626172016A3FECCED80FEF1202016303626172016B3FED15854CD0D92B016303626172016C3FED56A636946E58016303666F6F01693FEB0E9EDC4324D8016303666F6F016A3FEB75F4C16B302F016303666F6F016B3FEBD626C0B5B606016303666F6F016C3FEC2F7D5A8A79C9"},"result":{"expect":"0x010301780179017A1801610362617201693FE5800CC8B5E4C9016103626172016A3FE675D223DD75B4016103626172016B3FE76AA98CC1312F016103626172016C3FE85DD45A705B1B016103666F6F01693FE1AFA452831947016103666F6F016A3FE2A11982932540016103666F6F016B3FE394DF5FA2948D016103666F6F016C3FE48A2187783CD601620362617201693FECEDF009EB0C6D016203626172016A3FEDCA4AE5086D09016203626172016B3FEEA144A8DEAD73016203626172016C3FEF729330449E8A016203666F6F01693FE94E9F589F9C16016203666F6F016A3FEA3C6472AFAF88016203666F6F016B3FEB268BF56F988D016203666F6F016C3FEC0C8D693B4A3801630362617201693FF196DAE361BC98016303626172016A3FF1ECEC045E8BD8016303626172016B3FF23FD48FFDF4AB016303626172016C3FF28F9BB1C1BD28016303666F6F01693FF01EFD6BC0C199016303666F6F016A3FF081A6D346181A016303666F6F016B3FF0E1352E1F3A18016303666F6F016C3FF13D9DB2897F47"}} +{"expression":"asin(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF03666F6F3FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A93"},"result":{"expect":"0x0301017902017803017A0702036261723FE85DD45A705B1B3FE94E9F589F9C163FEA3C6472AFAF883FEB268BF56F988D3FEC0C8D693B4A383FECEDF009EB0C6D3FEDCA4AE5086D093FF1ECEC045E8BD83FF23FD48FFDF4AB3FF28F9BB1C1BD283FF2DC4BC6B585443FF325F1E5AA9E7A3FF36C9D70197F4C3FF3B05FAC3058993FF56F2E5FFA40D33FF59C670F0250953FF5C78C85B15DA73FF5F0B42AB549CA3FF617F2F257E7843FF63D5D507B35C63FF661072DA3A53003666F6F3FE1AFA4528319473FE2A119829325403FE394DF5FA2948D3FE48A2187783CD63FE5800CC8B5E4C93FE675D223DD75B43FE76AA98CC1312F3FEEA144A8DEAD733FEF729330449E8A3FF01EFD6BC0C1993FF081A6D346181A3FF0E1352E1F3A183FF13D9DB2897F473FF196DAE361BC983FF3F14B68411D9D3FF42F74A77DE1153FF46AF057BEE80C3FF4A3D40FE828553FF4DA35D669F2413FF50E2BEF4834E23FF53FCCB10B3B60"}} +{"expression":"asin(a)","inputs":{"a":"0x03020178017A010179050C016101693FE0CCA12729AFB83FE3EB2FD4D343913FE6C0192BDC382E3FE9258F68070E5E3FEB0E9EDC4324D80161016A3FE1983D7795F4143FE4A93769F6453E3FE764D4F5D5A2BD3FE9AB7D8BD797483FEB75F4C16B302F0161016B3FE261D545E46A8B3FE561CB52A194763FE802217B20C9023FEA2991F2A979143FEBD626C0B5B6060161016C3FE32873061674B23FE614455CF090B63FE897C14969667D3FEA9FE5053A45203FEC2F7D5A8A79C9016201693FEC8247621BC0C83FED9291DDB596F83FEE54C20D06AA953FEEDC99CF2C9D4D3FEF3A59F801F5820162016A3FECCED80FEF12023FEDC99E39374D9E3FEE7B7CBC36FABD3FEEF76F8069F3FA3FEF4CBFA61DE6A30162016B3FED15854CD0D92B3FEDFC1F4CE6E8223FEE9EDD88B9D8AF3FEF0FDFCBF19A933FEF5D77DCF758080162016C3FED56A636946E583FEE2A667D67D08C3FEEBF2786AED6983FEF261E0FCD4B463FEF6CA82F0DE1EA016301693FEF7A732E4B69463FEFA5FEB616FE8F3FEFC372D07518CD3FEFD74FDCAB1CF83FEFE4AE66F5A36A0163016A3FEF86F89C2183AF3FEFAE798F0E40823FEFC92C130538E23FEFDB2AA1BA3C6B3FEFE745EC1330750163016B3FEF925599378CD23FEFB629BE21D26E3FEFCE5BACD8BFA43FEFDEA84D73D7203FEFE99EA9BBCE220163016C3FEF9CA4D40C82163FEFBD21D8FB11A83FEFD30E65B4D32F3FEFE1D196C3E1BA3FEFEBBE888D0581"},"result":{"expect":"0x03020178017A010179050C016101693FE1AFA4528319473FE5800CC8B5E4C93FE94E9F589F9C163FECEDF009EB0C6D3FF01EFD6BC0C1990161016A3FE2A119829325403FE675D223DD75B43FEA3C6472AFAF883FEDCA4AE5086D093FF081A6D346181A0161016B3FE394DF5FA2948D3FE76AA98CC1312F3FEB268BF56F988D3FEEA144A8DEAD733FF0E1352E1F3A180161016C3FE48A2187783CD63FE85DD45A705B1B3FEC0C8D693B4A383FEF729330449E8A3FF13D9DB2897F47016201693FF196DAE361BC983FF2DC4BC6B585443FF3F14B68411D9D3FF4DA35D669F2413FF59C670F0250950162016A3FF1ECEC045E8BD83FF325F1E5AA9E7A3FF42F74A77DE1153FF50E2BEF4834E23FF5C78C85B15DA70162016B3FF23FD48FFDF4AB3FF36C9D70197F4C3FF46AF057BEE80C3FF53FCCB10B3B603FF5F0B42AB549CA0162016C3FF28F9BB1C1BD283FF3B05FAC3058993FF4A3D40FE828553FF56F2E5FFA40D33FF617F2F257E784016301693FF63D5D507B35C63FF6C2400B176DBC3FF72FA8D1F58B1D3FF789931D3BA1B03FF7D360B6D5CC690163016A3FF661072DA3A5303FF6DFA3211974753FF747D2E47C18CF3FF79D6A94D3D3913FF7E3A78DA25BA10163016B3FF68303DEA8C8EA3FF6FBA03CC8335D3FF75ED4336DBB173FF7B04D0A7A72223FF7F324ABD706340163016C3FF6A3661EAF1ECB3FF716479945FA5F3FF774BA898318193FF7C24610B2EDE13FF801E1B2C76CAC"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x02003FE0CCA12729AFB8"},"result":{"expect":"0x02003FE1AFA452831947"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x02010178033FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B"},"result":{"expect":"0x02010178033FE1AFA4528319473FE2A119829325403FE394DF5FA2948D"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x02020178030179053FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A97914"},"result":{"expect":"0x02020178030179053FE1AFA4528319473FE2A119829325403FE394DF5FA2948D3FE48A2187783CD63FE5800CC8B5E4C93FE675D223DD75B43FE76AA98CC1312F3FE85DD45A705B1B3FE94E9F589F9C163FEA3C6472AFAF883FEB268BF56F988D3FEC0C8D693B4A383FECEDF009EB0C6D3FEDCA4AE5086D093FEEA144A8DEAD73"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x0203017803017905017A073FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A933FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF3FEF925599378CD23FEF9CA4D40C82163FEFA5FEB616FE8F3FEFAE798F0E40823FEFB629BE21D26E3FEFBD21D8FB11A83FEFC372D07518CD3FEFC92C130538E23FEFCE5BACD8BFA43FEFD30E65B4D32F3FEFD74FDCAB1CF83FEFDB2AA1BA3C6B3FEFDEA84D73D7203FEFE1D196C3E1BA3FEFE4AE66F5A36A3FEFE745EC1330753FEFE99EA9BBCE223FEFEBBE888D05813FEFEDAAE43934F83FEFEF68986548923FEFF0FC0C65F7393FEFF2693DF385C93FEFF3B3CAE9A9D03FEFF4DEFA27BE023FEFF5EDC3A4177B3FEFF6E2D7C3F19D3FEFF7C0A60819EE3FEFF889631D483C3FEFF93F0E5DE28B3FEFF9E376D1D14B3FEFFA783FB7FEAC3FEFFAFEE4A424463FEFFB78BD3AA3B93FEFFBE7009351453FEFFC4AC84B51D53FEFFCA5134D77C33FEFFCF6C857E1CB3FEFFD40B84505A23FEFFD83A01DC2373FEFFDC02AF994433FEFFDF6F3B191333FEFFE28866A604D3FEFFE5561F907333FEFFE7DF92604AB3FEFFEA2B3D1E27B3FEFFEC3EFFE1C633FEFFEE202BCF6283FEFFEFD390A9CC13FEFFF15D891B6543FEFFF2C205D51B73FEFFF404979F78F3FEFFF52878775093FEFFF63093CD1D33FEFFF71F8DFC0623FEFFF7F7CB0B7D23FEFFF8BB74CCA603FEFFF96C80631433FEFFFA0CB346F893FEFFFA9DA7CD7F33FEFFFB20D142ED33FEFFFB977FA0F2F3FEFFFC02E2EAAC43FEFFFC640E36E19"},"result":{"expect":"0x0203017803017905017A073FE1AFA4528319473FE2A119829325403FE394DF5FA2948D3FE48A2187783CD63FE5800CC8B5E4C93FE675D223DD75B43FE76AA98CC1312F3FE85DD45A705B1B3FE94E9F589F9C163FEA3C6472AFAF883FEB268BF56F988D3FEC0C8D693B4A383FECEDF009EB0C6D3FEDCA4AE5086D093FEEA144A8DEAD733FEF729330449E8A3FF01EFD6BC0C1993FF081A6D346181A3FF0E1352E1F3A183FF13D9DB2897F473FF196DAE361BC983FF1ECEC045E8BD83FF23FD48FFDF4AB3FF28F9BB1C1BD283FF2DC4BC6B585443FF325F1E5AA9E7A3FF36C9D70197F4C3FF3B05FAC3058993FF3F14B68411D9D3FF42F74A77DE1153FF46AF057BEE80C3FF4A3D40FE828553FF4DA35D669F2413FF50E2BEF4834E23FF53FCCB10B3B603FF56F2E5FFA40D33FF59C670F0250953FF5C78C85B15DA73FF5F0B42AB549CA3FF617F2F257E7843FF63D5D507B35C63FF661072DA3A5303FF68303DEA8C8EA3FF6A3661EAF1ECB3FF6C2400B176DBC3FF6DFA3211974753FF6FBA03CC8335D3FF716479945FA5F3FF72FA8D1F58B1D3FF747D2E47C18CF3FF75ED4336DBB173FF774BA898318193FF789931D3BA1B03FF79D6A94D3D3913FF7B04D0A7A72223FF7C24610B2EDE13FF7D360B6D5CC693FF7E3A78DA25BA13FF7F324ABD706343FF801E1B2C76CAC3FF80FE7D2E8F2583FF81D3FD04FC3FF3FF829F2071781DF3FF836066FB3B38E3FF84184A32500613FF84C73DF10DE043FF856DB09BA010D3FF860C0B5D85D5B3FF86A2B264FF11C3FF8732051C5F1A43FF87BA5E6143BD33FF883C14B9B2A713FF88B77A87226443FF892CDE3776F443FF899C8A73FBEA83FF8A06C64E67C0A3FF8A6BD56BF54D03FF8ACBF82EA14C93FF8B276BDC9A8B83FF8B7E6AC5F3CAC3FF8BD12C68A6B7E3FF8C1FE592F78D23FF8C6AC88448C6B3FF8CB2050C6E5343FF8CF5C8A98F9163FF8D363EA4A705B3FF8D73902CAE6F13FF8DADE470858E83FF8DE560B7A18E03FF8E1A2879929653FF8E4C5D746C8803FF8E7C1FC21FA833FF8EA98DECCD6033FF8ED4C50224D743FF8EFDE0A5D29D53FF8F24FB230E8373FF8F4A2D7D51C003FF8F6D8F803FBCD3FF8F8F37CECAB173FF8FAF3BF19DBFC3FF8FCDB064D4DC73FF8FEAA8A50B5B23FF9006373BC8C953FF90206DCB53F5B3FF90395D19F3772"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x010101780301613FE0CCA12729AFB801623FE1983D7795F41401633FE261D545E46A8B"},"result":{"expect":"0x010101780301613FE1AFA45283194701623FE2A1198293254001633FE394DF5FA2948D"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x010201780179060161036261723FE1983D7795F414016103666F6F3FE0CCA12729AFB80162036261723FE32873061674B2016203666F6F3FE261D545E46A8B0163036261723FE4A93769F6453E016303666F6F3FE3EB2FD4D34391"},"result":{"expect":"0x010201780179060161036261723FE2A11982932540016103666F6F3FE1AFA4528319470162036261723FE48A2187783CD6016203666F6F3FE394DF5FA2948D0163036261723FE675D223DD75B4016303666F6F3FE5800CC8B5E4C9"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE3EB2FD4D34391016103626172016A3FE4A93769F6453E016103626172016B3FE561CB52A19476016103626172016C3FE614455CF090B6016103666F6F01693FE0CCA12729AFB8016103666F6F016A3FE1983D7795F414016103666F6F016B3FE261D545E46A8B016103666F6F016C3FE32873061674B201620362617201693FE9258F68070E5E016203626172016A3FE9AB7D8BD79748016203626172016B3FEA2991F2A97914016203626172016C3FEA9FE5053A4520016203666F6F01693FE6C0192BDC382E016203666F6F016A3FE764D4F5D5A2BD016203666F6F016B3FE802217B20C902016203666F6F016C3FE897C14969667D01630362617201693FEC8247621BC0C8016303626172016A3FECCED80FEF1202016303626172016B3FED15854CD0D92B016303626172016C3FED56A636946E58016303666F6F01693FEB0E9EDC4324D8016303666F6F016A3FEB75F4C16B302F016303666F6F016B3FEBD626C0B5B606016303666F6F016C3FEC2F7D5A8A79C9"},"result":{"expect":"0x010301780179017A1801610362617201693FE5800CC8B5E4C9016103626172016A3FE675D223DD75B4016103626172016B3FE76AA98CC1312F016103626172016C3FE85DD45A705B1B016103666F6F01693FE1AFA452831947016103666F6F016A3FE2A11982932540016103666F6F016B3FE394DF5FA2948D016103666F6F016C3FE48A2187783CD601620362617201693FECEDF009EB0C6D016203626172016A3FEDCA4AE5086D09016203626172016B3FEEA144A8DEAD73016203626172016C3FEF729330449E8A016203666F6F01693FE94E9F589F9C16016203666F6F016A3FEA3C6472AFAF88016203666F6F016B3FEB268BF56F988D016203666F6F016C3FEC0C8D693B4A3801630362617201693FF196DAE361BC98016303626172016A3FF1ECEC045E8BD8016303626172016B3FF23FD48FFDF4AB016303626172016C3FF28F9BB1C1BD28016303666F6F01693FF01EFD6BC0C199016303666F6F016A3FF081A6D346181A016303666F6F016B3FF0E1352E1F3A18016303666F6F016C3FF13D9DB2897F47"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667D3FE9258F68070E5E3FE9AB7D8BD797483FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9E3FEDFC1F4CE6E8223FEE2A667D67D08C3FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF03666F6F3FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8B3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FA3FEF0FDFCBF19A93"},"result":{"expect":"0x0301017902017803017A0702036261723FE85DD45A705B1B3FE94E9F589F9C163FEA3C6472AFAF883FEB268BF56F988D3FEC0C8D693B4A383FECEDF009EB0C6D3FEDCA4AE5086D093FF1ECEC045E8BD83FF23FD48FFDF4AB3FF28F9BB1C1BD283FF2DC4BC6B585443FF325F1E5AA9E7A3FF36C9D70197F4C3FF3B05FAC3058993FF56F2E5FFA40D33FF59C670F0250953FF5C78C85B15DA73FF5F0B42AB549CA3FF617F2F257E7843FF63D5D507B35C63FF661072DA3A53003666F6F3FE1AFA4528319473FE2A119829325403FE394DF5FA2948D3FE48A2187783CD63FE5800CC8B5E4C93FE675D223DD75B43FE76AA98CC1312F3FEEA144A8DEAD733FEF729330449E8A3FF01EFD6BC0C1993FF081A6D346181A3FF0E1352E1F3A183FF13D9DB2897F473FF196DAE361BC983FF3F14B68411D9D3FF42F74A77DE1153FF46AF057BEE80C3FF4A3D40FE828553FF4DA35D669F2413FF50E2BEF4834E23FF53FCCB10B3B60"}} +{"expression":"map(a,f(a)(asin(a)))","inputs":{"a":"0x03020178017A010179050C016101693FE0CCA12729AFB83FE3EB2FD4D343913FE6C0192BDC382E3FE9258F68070E5E3FEB0E9EDC4324D80161016A3FE1983D7795F4143FE4A93769F6453E3FE764D4F5D5A2BD3FE9AB7D8BD797483FEB75F4C16B302F0161016B3FE261D545E46A8B3FE561CB52A194763FE802217B20C9023FEA2991F2A979143FEBD626C0B5B6060161016C3FE32873061674B23FE614455CF090B63FE897C14969667D3FEA9FE5053A45203FEC2F7D5A8A79C9016201693FEC8247621BC0C83FED9291DDB596F83FEE54C20D06AA953FEEDC99CF2C9D4D3FEF3A59F801F5820162016A3FECCED80FEF12023FEDC99E39374D9E3FEE7B7CBC36FABD3FEEF76F8069F3FA3FEF4CBFA61DE6A30162016B3FED15854CD0D92B3FEDFC1F4CE6E8223FEE9EDD88B9D8AF3FEF0FDFCBF19A933FEF5D77DCF758080162016C3FED56A636946E583FEE2A667D67D08C3FEEBF2786AED6983FEF261E0FCD4B463FEF6CA82F0DE1EA016301693FEF7A732E4B69463FEFA5FEB616FE8F3FEFC372D07518CD3FEFD74FDCAB1CF83FEFE4AE66F5A36A0163016A3FEF86F89C2183AF3FEFAE798F0E40823FEFC92C130538E23FEFDB2AA1BA3C6B3FEFE745EC1330750163016B3FEF925599378CD23FEFB629BE21D26E3FEFCE5BACD8BFA43FEFDEA84D73D7203FEFE99EA9BBCE220163016C3FEF9CA4D40C82163FEFBD21D8FB11A83FEFD30E65B4D32F3FEFE1D196C3E1BA3FEFEBBE888D0581"},"result":{"expect":"0x03020178017A010179050C016101693FE1AFA4528319473FE5800CC8B5E4C93FE94E9F589F9C163FECEDF009EB0C6D3FF01EFD6BC0C1990161016A3FE2A119829325403FE675D223DD75B43FEA3C6472AFAF883FEDCA4AE5086D093FF081A6D346181A0161016B3FE394DF5FA2948D3FE76AA98CC1312F3FEB268BF56F988D3FEEA144A8DEAD733FF0E1352E1F3A180161016C3FE48A2187783CD63FE85DD45A705B1B3FEC0C8D693B4A383FEF729330449E8A3FF13D9DB2897F47016201693FF196DAE361BC983FF2DC4BC6B585443FF3F14B68411D9D3FF4DA35D669F2413FF59C670F0250950162016A3FF1ECEC045E8BD83FF325F1E5AA9E7A3FF42F74A77DE1153FF50E2BEF4834E23FF5C78C85B15DA70162016B3FF23FD48FFDF4AB3FF36C9D70197F4C3FF46AF057BEE80C3FF53FCCB10B3B603FF5F0B42AB549CA0162016C3FF28F9BB1C1BD283FF3B05FAC3058993FF4A3D40FE828553FF56F2E5FFA40D33FF617F2F257E784016301693FF63D5D507B35C63FF6C2400B176DBC3FF72FA8D1F58B1D3FF789931D3BA1B03FF7D360B6D5CC690163016A3FF661072DA3A5303FF6DFA3211974753FF747D2E47C18CF3FF79D6A94D3D3913FF7E3A78DA25BA10163016B3FF68303DEA8C8EA3FF6FBA03CC8335D3FF75ED4336DBB173FF7B04D0A7A72223FF7F324ABD706340163016C3FF6A3661EAF1ECB3FF716479945FA5F3FF774BA898318193FF7C24610B2EDE13FF801E1B2C76CAC"}} +{"expression":"atan(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB983E282E2CC4D"}} +{"expression":"atan(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF06"}} +{"expression":"atan(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF063FD85A376B677DC03FDDAC670561BB4F3FE14B1DD5F90CE13FE38B112D7BD4AD3FE5977A5103EA933FE77338A80603BE3FE921FB54442D183FEAA7C8545183CD3FEC08AAE496EFA63FED488143AD8C443FEE6AE1355353CF3FEF730BD281F69B"}} +{"expression":"atan(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF063FD85A376B677DC03FDDAC670561BB4F3FE14B1DD5F90CE13FE38B112D7BD4AD3FE5977A5103EA933FE77338A80603BE3FE921FB54442D183FEAA7C8545183CD3FEC08AAE496EFA63FED488143AD8C443FEE6AE1355353CF3FEF730BD281F69B3FF031F57E54ADBE3FF0A00A3BCE369F3FF104E80200BA003FF1618F66769C693FF1B6E192EBBE443FF205A4030058993FF24E83FA9B4E483FF29219A49709A13FF2D0EAD60663953FF30B6D796A4DA83FF34209A8C109803FF3751B7ED2AEC13FF3A4F4A8668B693FF3D1DDBDAD64F03FF3FC176B7A85603FF423DB7312CEBC3FF4495D868232253FF46CCC069C173F3FF48E50A711C89D3FF4AE10FC6589A53FF4CC2EF6F1A7103FF4E8C94DBF54E53FF503FBDB7F996E3FF51DDFEF9EBC943FF5368C951E9CFD3FF54E16D0A3F5133FF56491D6EC41CD3FF57A0F3CB41AD73FF58E9F20EF0D553FF5A25052114E603FF5B5306F0FEB7C3FF5C74C04A4AF413FF5D8AEA74F117A3FF5E9630A7AAA8E3FF5F973152548573FF608E7F45288B83FF617CA2B906EFA3FF62621A3C77CB43FF633F5B889326A3FF6414D44094C7C3FF64E2EA9E86D153FF65A9FE0F207753FF666A67BEB2F363FF67247B18C4D843FF67D8863BC99BD3FF6886D2623789F3FF692FA442186183FF69D33C640FCC23FF6A71D772B60CB3FF6B0BAE830C0703FF6BA0F756B7B143FF6C31E498A4A303FF6CBEA614937203FF6D4768EA1396A3FF6DCC57BB565FD3FF6E4D9AD83DD983FF6ECB5866003F03FF6F45B483AF72D3FF6FBCD16BEBE403FF7030CF94031973FF70A1CDC8B3BC93FF710FE948CB4CC3FF717B3DDDCC9553FF71E3E5F2C979F3FF7249FAA996A213FF72AD93EE7BEE23FF730EC88A816253FF736DAE34754A93FF73CA59A0C5BE23FF7424DE90454D43FF747D4FDDF08893FF74D3BF8BC82613FF75283ECED1D003FF757ADE1A501BE3FF75CBAD2A40BD53FF761ABB0D2EC513FF7668162D6591B3FF76B3CC59900DB3FF76FDEACCCEE113FF77467E364F6013FF778D92C06C36F3FF77D33417601AC3FF78176D6F922013FF785A498B82BF83FF789BD2C1600543FF78DC130046E823FF791B13D53751C3FF7958DE6FBFF433FF79957BA666AB33FF79D0F3FAD1C92"}} +{"expression":"atan(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB983E282E2CC4D01623FC94441F8F7260C01633FD2A73A661EAF06"}} +{"expression":"atan(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC94441F8F7260C016103666F6F3FB983E282E2CC4D0162036261723FD85A376B677DC0016203666F6F3FD2A73A661EAF060163036261723FE14B1DD5F90CE1016303666F6F3FDDAC670561BB4F"}} +{"expression":"atan(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FDDAC670561BB4F016103626172016A3FE14B1DD5F90CE1016103626172016B3FE38B112D7BD4AD016103626172016C3FE5977A5103EA93016103666F6F01693FB983E282E2CC4D016103666F6F016A3FC94441F8F7260C016103666F6F016B3FD2A73A661EAF06016103666F6F016C3FD85A376B677DC001620362617201693FED488143AD8C44016203626172016A3FEE6AE1355353CF016203626172016B3FEF730BD281F69B016203626172016C3FF031F57E54ADBE016203666F6F01693FE77338A80603BE016203666F6F016A3FE921FB54442D18016203666F6F016B3FEAA7C8545183CD016203666F6F016C3FEC08AAE496EFA601630362617201693FF205A403005899016303626172016A3FF24E83FA9B4E48016303626172016B3FF29219A49709A1016303626172016C3FF2D0EAD6066395016303666F6F01693FF0A00A3BCE369F016303666F6F016A3FF104E80200BA00016303666F6F016B3FF1618F66769C69016303666F6F016C3FF1B6E192EBBE44"}} +{"expression":"atan(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE5977A5103EA933FE77338A80603BE3FE921FB54442D183FEAA7C8545183CD3FEC08AAE496EFA63FED488143AD8C443FEE6AE1355353CF3FF24E83FA9B4E483FF29219A49709A13FF2D0EAD60663953FF30B6D796A4DA83FF34209A8C109803FF3751B7ED2AEC13FF3A4F4A8668B693FF4CC2EF6F1A7103FF4E8C94DBF54E53FF503FBDB7F996E3FF51DDFEF9EBC943FF5368C951E9CFD3FF54E16D0A3F5133FF56491D6EC41CD03666F6F3FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF063FD85A376B677DC03FDDAC670561BB4F3FE14B1DD5F90CE13FE38B112D7BD4AD3FEF730BD281F69B3FF031F57E54ADBE3FF0A00A3BCE369F3FF104E80200BA003FF1618F66769C693FF1B6E192EBBE443FF205A4030058993FF3D1DDBDAD64F03FF3FC176B7A85603FF423DB7312CEBC3FF4495D868232253FF46CCC069C173F3FF48E50A711C89D3FF4AE10FC6589A5"}} +{"expression":"atan(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB983E282E2CC4D3FDDAC670561BB4F3FE77338A80603BE3FED488143AD8C443FF0A00A3BCE369F0161016A3FC94441F8F7260C3FE14B1DD5F90CE13FE921FB54442D183FEE6AE1355353CF3FF104E80200BA000161016B3FD2A73A661EAF063FE38B112D7BD4AD3FEAA7C8545183CD3FEF730BD281F69B3FF1618F66769C690161016C3FD85A376B677DC03FE5977A5103EA933FEC08AAE496EFA63FF031F57E54ADBE3FF1B6E192EBBE44016201693FF205A4030058993FF30B6D796A4DA83FF3D1DDBDAD64F03FF46CCC069C173F3FF4E8C94DBF54E50162016A3FF24E83FA9B4E483FF34209A8C109803FF3FC176B7A85603FF48E50A711C89D3FF503FBDB7F996E0162016B3FF29219A49709A13FF3751B7ED2AEC13FF423DB7312CEBC3FF4AE10FC6589A53FF51DDFEF9EBC940162016C3FF2D0EAD60663953FF3A4F4A8668B693FF4495D868232253FF4CC2EF6F1A7103FF5368C951E9CFD016301693FF54E16D0A3F5133FF5A25052114E603FF5E9630A7AAA8E3FF62621A3C77CB43FF65A9FE0F207750163016A3FF56491D6EC41CD3FF5B5306F0FEB7C3FF5F973152548573FF633F5B889326A3FF666A67BEB2F360163016B3FF57A0F3CB41AD73FF5C74C04A4AF413FF608E7F45288B83FF6414D44094C7C3FF67247B18C4D840163016C3FF58E9F20EF0D553FF5D8AEA74F117A3FF617CA2B906EFA3FF64E2EA9E86D153FF67D8863BC99BD"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB983E282E2CC4D"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF06"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF063FD85A376B677DC03FDDAC670561BB4F3FE14B1DD5F90CE13FE38B112D7BD4AD3FE5977A5103EA933FE77338A80603BE3FE921FB54442D183FEAA7C8545183CD3FEC08AAE496EFA63FED488143AD8C443FEE6AE1355353CF3FEF730BD281F69B"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF063FD85A376B677DC03FDDAC670561BB4F3FE14B1DD5F90CE13FE38B112D7BD4AD3FE5977A5103EA933FE77338A80603BE3FE921FB54442D183FEAA7C8545183CD3FEC08AAE496EFA63FED488143AD8C443FEE6AE1355353CF3FEF730BD281F69B3FF031F57E54ADBE3FF0A00A3BCE369F3FF104E80200BA003FF1618F66769C693FF1B6E192EBBE443FF205A4030058993FF24E83FA9B4E483FF29219A49709A13FF2D0EAD60663953FF30B6D796A4DA83FF34209A8C109803FF3751B7ED2AEC13FF3A4F4A8668B693FF3D1DDBDAD64F03FF3FC176B7A85603FF423DB7312CEBC3FF4495D868232253FF46CCC069C173F3FF48E50A711C89D3FF4AE10FC6589A53FF4CC2EF6F1A7103FF4E8C94DBF54E53FF503FBDB7F996E3FF51DDFEF9EBC943FF5368C951E9CFD3FF54E16D0A3F5133FF56491D6EC41CD3FF57A0F3CB41AD73FF58E9F20EF0D553FF5A25052114E603FF5B5306F0FEB7C3FF5C74C04A4AF413FF5D8AEA74F117A3FF5E9630A7AAA8E3FF5F973152548573FF608E7F45288B83FF617CA2B906EFA3FF62621A3C77CB43FF633F5B889326A3FF6414D44094C7C3FF64E2EA9E86D153FF65A9FE0F207753FF666A67BEB2F363FF67247B18C4D843FF67D8863BC99BD3FF6886D2623789F3FF692FA442186183FF69D33C640FCC23FF6A71D772B60CB3FF6B0BAE830C0703FF6BA0F756B7B143FF6C31E498A4A303FF6CBEA614937203FF6D4768EA1396A3FF6DCC57BB565FD3FF6E4D9AD83DD983FF6ECB5866003F03FF6F45B483AF72D3FF6FBCD16BEBE403FF7030CF94031973FF70A1CDC8B3BC93FF710FE948CB4CC3FF717B3DDDCC9553FF71E3E5F2C979F3FF7249FAA996A213FF72AD93EE7BEE23FF730EC88A816253FF736DAE34754A93FF73CA59A0C5BE23FF7424DE90454D43FF747D4FDDF08893FF74D3BF8BC82613FF75283ECED1D003FF757ADE1A501BE3FF75CBAD2A40BD53FF761ABB0D2EC513FF7668162D6591B3FF76B3CC59900DB3FF76FDEACCCEE113FF77467E364F6013FF778D92C06C36F3FF77D33417601AC3FF78176D6F922013FF785A498B82BF83FF789BD2C1600543FF78DC130046E823FF791B13D53751C3FF7958DE6FBFF433FF79957BA666AB33FF79D0F3FAD1C92"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB983E282E2CC4D01623FC94441F8F7260C01633FD2A73A661EAF06"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC94441F8F7260C016103666F6F3FB983E282E2CC4D0162036261723FD85A376B677DC0016203666F6F3FD2A73A661EAF060163036261723FE14B1DD5F90CE1016303666F6F3FDDAC670561BB4F"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FDDAC670561BB4F016103626172016A3FE14B1DD5F90CE1016103626172016B3FE38B112D7BD4AD016103626172016C3FE5977A5103EA93016103666F6F01693FB983E282E2CC4D016103666F6F016A3FC94441F8F7260C016103666F6F016B3FD2A73A661EAF06016103666F6F016C3FD85A376B677DC001620362617201693FED488143AD8C44016203626172016A3FEE6AE1355353CF016203626172016B3FEF730BD281F69B016203626172016C3FF031F57E54ADBE016203666F6F01693FE77338A80603BE016203666F6F016A3FE921FB54442D18016203666F6F016B3FEAA7C8545183CD016203666F6F016C3FEC08AAE496EFA601630362617201693FF205A403005899016303626172016A3FF24E83FA9B4E48016303626172016B3FF29219A49709A1016303626172016C3FF2D0EAD6066395016303666F6F01693FF0A00A3BCE369F016303666F6F016A3FF104E80200BA00016303666F6F016B3FF1618F66769C69016303666F6F016C3FF1B6E192EBBE44"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE5977A5103EA933FE77338A80603BE3FE921FB54442D183FEAA7C8545183CD3FEC08AAE496EFA63FED488143AD8C443FEE6AE1355353CF3FF24E83FA9B4E483FF29219A49709A13FF2D0EAD60663953FF30B6D796A4DA83FF34209A8C109803FF3751B7ED2AEC13FF3A4F4A8668B693FF4CC2EF6F1A7103FF4E8C94DBF54E53FF503FBDB7F996E3FF51DDFEF9EBC943FF5368C951E9CFD3FF54E16D0A3F5133FF56491D6EC41CD03666F6F3FB983E282E2CC4D3FC94441F8F7260C3FD2A73A661EAF063FD85A376B677DC03FDDAC670561BB4F3FE14B1DD5F90CE13FE38B112D7BD4AD3FEF730BD281F69B3FF031F57E54ADBE3FF0A00A3BCE369F3FF104E80200BA003FF1618F66769C693FF1B6E192EBBE443FF205A4030058993FF3D1DDBDAD64F03FF3FC176B7A85603FF423DB7312CEBC3FF4495D868232253FF46CCC069C173F3FF48E50A711C89D3FF4AE10FC6589A5"}} +{"expression":"map(a,f(a)(atan(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB983E282E2CC4D3FDDAC670561BB4F3FE77338A80603BE3FED488143AD8C443FF0A00A3BCE369F0161016A3FC94441F8F7260C3FE14B1DD5F90CE13FE921FB54442D183FEE6AE1355353CF3FF104E80200BA000161016B3FD2A73A661EAF063FE38B112D7BD4AD3FEAA7C8545183CD3FEF730BD281F69B3FF1618F66769C690161016C3FD85A376B677DC03FE5977A5103EA933FEC08AAE496EFA63FF031F57E54ADBE3FF1B6E192EBBE44016201693FF205A4030058993FF30B6D796A4DA83FF3D1DDBDAD64F03FF46CCC069C173F3FF4E8C94DBF54E50162016A3FF24E83FA9B4E483FF34209A8C109803FF3FC176B7A85603FF48E50A711C89D3FF503FBDB7F996E0162016B3FF29219A49709A13FF3751B7ED2AEC13FF423DB7312CEBC3FF4AE10FC6589A53FF51DDFEF9EBC940162016C3FF2D0EAD60663953FF3A4F4A8668B693FF4495D868232253FF4CC2EF6F1A7103FF5368C951E9CFD016301693FF54E16D0A3F5133FF5A25052114E603FF5E9630A7AAA8E3FF62621A3C77CB43FF65A9FE0F207750163016A3FF56491D6EC41CD3FF5B5306F0FEB7C3FF5F973152548573FF633F5B889326A3FF666A67BEB2F360163016B3FF57A0F3CB41AD73FF5C74C04A4AF413FF608E7F45288B83FF6414D44094C7C3FF67247B18C4D840163016C3FF58E9F20EF0D553FF5D8AEA74F117A3FF617CA2B906EFA3FF64E2EA9E86D153FF67D8863BC99BD"}} +{"expression":"exp(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF1AEC7B35A00D4"}} +{"expression":"exp(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A96"}} +{"expression":"exp(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A963FF7DE8392FBBFE03FFA61298E1E069C3FFD27660B11A9EF40001C2A612689874001CDE866FE46E94003AD44655C78BC4005BF0A8B145769400808883244D593400A8F99761065A4400D5AB83615F8B44010388657115A474011ED3FE64FC541"}} +{"expression":"exp(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A963FF7DE8392FBBFE03FFA61298E1E069C3FFD27660B11A9EF40001C2A612689874001CDE866FE46E94003AD44655C78BC4005BF0A8B145769400808883244D593400A8F99761065A4400D5AB83615F8B44010388657115A474011ED3FE64FC5414013CFE7BB5B37EC4015E552770DF8A7401832D6C8EFEE85401ABE5B1CD863F6401D8E64B8D4DDAE4020551439081D4F40220CCE91C40E5F4023F2C80AEF884D40260BDDC649CA6840285D6FD931E0BB402AED6F125C7CB5402DC26C32572A3E403071D45EEC224240322C94CA7A81FE403415E5BF6FB106403632ACEF67FE3D40388853E624B794403B1CD5E7807B7B403DF6CF42BDA46840408EC721396BDB40424C92F23D78074044394144EEEC81404659C069D9983C4048B38373C9473C404B4C902E273A58404E2B8E8B42F3B64050ABECD907C03440526CC96B836D7D40545CDB083EB51440568118ADE1DEAA4058DEFF0708C2FF405B7C9E793462BB405E60AAAE3D91634060C945E00BBAFC40628D389970338F406480B376F013E34066A8B63497CC0A40690AC725B6564C406BAD015C8E318C406E96244F21BBF64070E6D29097E18C4072ADE0DFD620AF4074A4CAFF54F2234076D09977E783D1407936DC5690C08F407BDDB96D1F3E59407ECBFC12836E5640810493459DB8EE4082CEC2A33743CC4084C92210816C894086F8C2F293C9A14089633F2143F3F0408C0EC740D845BD408F02329E185A4F409122885AAEDDAA4092EFDE48C699A54094EDB91A4D293A4097213320377B2840998FF00E6AB6D5409C402B6EB1F6AD409F38C898B9E68540A140B22BFE1DAC40A311343669444A40A512908D54AFF940A749EA7D470C6E40A9BCEFA790485240AC71E68EAEC33440AF6FBEAA67302240B15F11166093F940B332C4D2B7C4A140B537A8DAFAC4B740B772E9871206EB40B9EA3E7732078E40BCA3F939DCB46040BFA7157C470F8240C17DA5774EC66640C3549084FF362D40C55D027569C4A840C79C30BBC48B4840CA17DD08C11DC140CCD6640A57410540CFDECDB8AA213740D19C6FACE5C55940D37697B5428D1440D5829DCF95056040D7C5C09A68D57240DA45CBE8A42BA440DD09279B49287040E00B740586690140E1BB7015E84D3B"}} +{"expression":"exp(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF1AEC7B35A00D401623FF38ADD9E58AC8D01633FF599058C8C1A96"}} +{"expression":"exp(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FF38ADD9E58AC8D016103666F6F3FF1AEC7B35A00D40162036261723FF7DE8392FBBFE0016203666F6F3FF599058C8C1A960163036261723FFD27660B11A9EF016303666F6F3FFA61298E1E069C"}} +{"expression":"exp(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FFA61298E1E069C016103626172016A3FFD27660B11A9EF016103626172016B40001C2A61268987016103626172016C4001CDE866FE46E9016103666F6F01693FF1AEC7B35A00D4016103666F6F016A3FF38ADD9E58AC8D016103666F6F016B3FF599058C8C1A96016103666F6F016C3FF7DE8392FBBFE00162036261720169400D5AB83615F8B4016203626172016A4010388657115A47016203626172016B4011ED3FE64FC541016203626172016C4013CFE7BB5B37EC016203666F6F01694003AD44655C78BC016203666F6F016A4005BF0A8B145769016203666F6F016B400808883244D593016203666F6F016C400A8F99761065A401630362617201694020551439081D4F016303626172016A40220CCE91C40E5F016303626172016B4023F2C80AEF884D016303626172016C40260BDDC649CA68016303666F6F01694015E552770DF8A7016303666F6F016A401832D6C8EFEE85016303666F6F016B401ABE5B1CD863F6016303666F6F016C401D8E64B8D4DDAE"}} +{"expression":"exp(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261724001CDE866FE46E94003AD44655C78BC4005BF0A8B145769400808883244D593400A8F99761065A4400D5AB83615F8B44010388657115A4740220CCE91C40E5F4023F2C80AEF884D40260BDDC649CA6840285D6FD931E0BB402AED6F125C7CB5402DC26C32572A3E403071D45EEC224240424C92F23D78074044394144EEEC81404659C069D9983C4048B38373C9473C404B4C902E273A58404E2B8E8B42F3B64050ABECD907C03403666F6F3FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A963FF7DE8392FBBFE03FFA61298E1E069C3FFD27660B11A9EF40001C2A612689874011ED3FE64FC5414013CFE7BB5B37EC4015E552770DF8A7401832D6C8EFEE85401ABE5B1CD863F6401D8E64B8D4DDAE4020551439081D4F40322C94CA7A81FE403415E5BF6FB106403632ACEF67FE3D40388853E624B794403B1CD5E7807B7B403DF6CF42BDA46840408EC721396BDB"}} +{"expression":"exp(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF1AEC7B35A00D43FFA61298E1E069C4003AD44655C78BC400D5AB83615F8B44015E552770DF8A70161016A3FF38ADD9E58AC8D3FFD27660B11A9EF4005BF0A8B1457694010388657115A47401832D6C8EFEE850161016B3FF599058C8C1A9640001C2A61268987400808883244D5934011ED3FE64FC541401ABE5B1CD863F60161016C3FF7DE8392FBBFE04001CDE866FE46E9400A8F99761065A44013CFE7BB5B37EC401D8E64B8D4DDAE016201694020551439081D4F40285D6FD931E0BB40322C94CA7A81FE403B1CD5E7807B7B4044394144EEEC810162016A40220CCE91C40E5F402AED6F125C7CB5403415E5BF6FB106403DF6CF42BDA468404659C069D9983C0162016B4023F2C80AEF884D402DC26C32572A3E403632ACEF67FE3D40408EC721396BDB4048B38373C9473C0162016C40260BDDC649CA68403071D45EEC224240388853E624B79440424C92F23D7807404B4C902E273A5801630169404E2B8E8B42F3B640568118ADE1DEAA4060C945E00BBAFC40690AC725B6564C4072ADE0DFD620AF0163016A4050ABECD907C0344058DEFF0708C2FF40628D389970338F406BAD015C8E318C4074A4CAFF54F2230163016B40526CC96B836D7D405B7C9E793462BB406480B376F013E3406E96244F21BBF64076D09977E783D10163016C40545CDB083EB514405E60AAAE3D91634066A8B63497CC0A4070E6D29097E18C407936DC5690C08F"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF1AEC7B35A00D4"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A96"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A963FF7DE8392FBBFE03FFA61298E1E069C3FFD27660B11A9EF40001C2A612689874001CDE866FE46E94003AD44655C78BC4005BF0A8B145769400808883244D593400A8F99761065A4400D5AB83615F8B44010388657115A474011ED3FE64FC541"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A963FF7DE8392FBBFE03FFA61298E1E069C3FFD27660B11A9EF40001C2A612689874001CDE866FE46E94003AD44655C78BC4005BF0A8B145769400808883244D593400A8F99761065A4400D5AB83615F8B44010388657115A474011ED3FE64FC5414013CFE7BB5B37EC4015E552770DF8A7401832D6C8EFEE85401ABE5B1CD863F6401D8E64B8D4DDAE4020551439081D4F40220CCE91C40E5F4023F2C80AEF884D40260BDDC649CA6840285D6FD931E0BB402AED6F125C7CB5402DC26C32572A3E403071D45EEC224240322C94CA7A81FE403415E5BF6FB106403632ACEF67FE3D40388853E624B794403B1CD5E7807B7B403DF6CF42BDA46840408EC721396BDB40424C92F23D78074044394144EEEC81404659C069D9983C4048B38373C9473C404B4C902E273A58404E2B8E8B42F3B64050ABECD907C03440526CC96B836D7D40545CDB083EB51440568118ADE1DEAA4058DEFF0708C2FF405B7C9E793462BB405E60AAAE3D91634060C945E00BBAFC40628D389970338F406480B376F013E34066A8B63497CC0A40690AC725B6564C406BAD015C8E318C406E96244F21BBF64070E6D29097E18C4072ADE0DFD620AF4074A4CAFF54F2234076D09977E783D1407936DC5690C08F407BDDB96D1F3E59407ECBFC12836E5640810493459DB8EE4082CEC2A33743CC4084C92210816C894086F8C2F293C9A14089633F2143F3F0408C0EC740D845BD408F02329E185A4F409122885AAEDDAA4092EFDE48C699A54094EDB91A4D293A4097213320377B2840998FF00E6AB6D5409C402B6EB1F6AD409F38C898B9E68540A140B22BFE1DAC40A311343669444A40A512908D54AFF940A749EA7D470C6E40A9BCEFA790485240AC71E68EAEC33440AF6FBEAA67302240B15F11166093F940B332C4D2B7C4A140B537A8DAFAC4B740B772E9871206EB40B9EA3E7732078E40BCA3F939DCB46040BFA7157C470F8240C17DA5774EC66640C3549084FF362D40C55D027569C4A840C79C30BBC48B4840CA17DD08C11DC140CCD6640A57410540CFDECDB8AA213740D19C6FACE5C55940D37697B5428D1440D5829DCF95056040D7C5C09A68D57240DA45CBE8A42BA440DD09279B49287040E00B740586690140E1BB7015E84D3B"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF1AEC7B35A00D401623FF38ADD9E58AC8D01633FF599058C8C1A96"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FF38ADD9E58AC8D016103666F6F3FF1AEC7B35A00D40162036261723FF7DE8392FBBFE0016203666F6F3FF599058C8C1A960163036261723FFD27660B11A9EF016303666F6F3FFA61298E1E069C"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FFA61298E1E069C016103626172016A3FFD27660B11A9EF016103626172016B40001C2A61268987016103626172016C4001CDE866FE46E9016103666F6F01693FF1AEC7B35A00D4016103666F6F016A3FF38ADD9E58AC8D016103666F6F016B3FF599058C8C1A96016103666F6F016C3FF7DE8392FBBFE00162036261720169400D5AB83615F8B4016203626172016A4010388657115A47016203626172016B4011ED3FE64FC541016203626172016C4013CFE7BB5B37EC016203666F6F01694003AD44655C78BC016203666F6F016A4005BF0A8B145769016203666F6F016B400808883244D593016203666F6F016C400A8F99761065A401630362617201694020551439081D4F016303626172016A40220CCE91C40E5F016303626172016B4023F2C80AEF884D016303626172016C40260BDDC649CA68016303666F6F01694015E552770DF8A7016303666F6F016A401832D6C8EFEE85016303666F6F016B401ABE5B1CD863F6016303666F6F016C401D8E64B8D4DDAE"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261724001CDE866FE46E94003AD44655C78BC4005BF0A8B145769400808883244D593400A8F99761065A4400D5AB83615F8B44010388657115A4740220CCE91C40E5F4023F2C80AEF884D40260BDDC649CA6840285D6FD931E0BB402AED6F125C7CB5402DC26C32572A3E403071D45EEC224240424C92F23D78074044394144EEEC81404659C069D9983C4048B38373C9473C404B4C902E273A58404E2B8E8B42F3B64050ABECD907C03403666F6F3FF1AEC7B35A00D43FF38ADD9E58AC8D3FF599058C8C1A963FF7DE8392FBBFE03FFA61298E1E069C3FFD27660B11A9EF40001C2A612689874011ED3FE64FC5414013CFE7BB5B37EC4015E552770DF8A7401832D6C8EFEE85401ABE5B1CD863F6401D8E64B8D4DDAE4020551439081D4F40322C94CA7A81FE403415E5BF6FB106403632ACEF67FE3D40388853E624B794403B1CD5E7807B7B403DF6CF42BDA46840408EC721396BDB"}} +{"expression":"map(a,f(a)(exp(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF1AEC7B35A00D43FFA61298E1E069C4003AD44655C78BC400D5AB83615F8B44015E552770DF8A70161016A3FF38ADD9E58AC8D3FFD27660B11A9EF4005BF0A8B1457694010388657115A47401832D6C8EFEE850161016B3FF599058C8C1A9640001C2A61268987400808883244D5934011ED3FE64FC541401ABE5B1CD863F60161016C3FF7DE8392FBBFE04001CDE866FE46E9400A8F99761065A44013CFE7BB5B37EC401D8E64B8D4DDAE016201694020551439081D4F40285D6FD931E0BB40322C94CA7A81FE403B1CD5E7807B7B4044394144EEEC810162016A40220CCE91C40E5F402AED6F125C7CB5403415E5BF6FB106403DF6CF42BDA468404659C069D9983C0162016B4023F2C80AEF884D402DC26C32572A3E403632ACEF67FE3D40408EC721396BDB4048B38373C9473C0162016C40260BDDC649CA68403071D45EEC224240388853E624B79440424C92F23D7807404B4C902E273A5801630169404E2B8E8B42F3B640568118ADE1DEAA4060C945E00BBAFC40690AC725B6564C4072ADE0DFD620AF0163016A4050ABECD907C0344058DEFF0708C2FF40628D389970338F406BAD015C8E318C4074A4CAFF54F2230163016B40526CC96B836D7D405B7C9E793462BB406480B376F013E3406E96244F21BBF64076D09977E783D10163016C40545CDB083EB514405E60AAAE3D91634066A8B63497CC0A4070E6D29097E18C407936DC5690C08F"}} +{"expression":"log10(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x0200BFF0000000000000"}} +{"expression":"log10(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803BFF0000000000000BFE65DF657B04300BFE0BB6C34D81502"}} +{"expression":"log10(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x0202017803017905BFF0000000000000BFE65DF657B04300BFE0BB6C34D81502BFD977D95EC10C02BFD34413509F79FFBFCC658A32216008BFC3D3D3D21CCF04BFB8CF183886480BBFA76D869B02A02E00000000000000003FA5316C0A18ADD63FB44538DE3B27EB3FBD2B643BC124F43FC2B452CF2224FA3FC68A288B60B7FC"}} +{"expression":"log10(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A07BFF0000000000000BFE65DF657B04300BFE0BB6C34D81502BFD977D95EC10C02BFD34413509F79FFBFCC658A32216008BFC3D3D3D21CCF04BFB8CF183886480BBFA76D869B02A02E00000000000000003FA5316C0A18ADD63FB44538DE3B27EB3FBD2B643BC124F43FC2B452CF2224FA3FC68A288B60B7FC3FCA209A84FBCFF93FCD7F59AA5BECB93FD056627D3F25F93FD1D71957EF04413FD34413509F79FF3FD49F3DAD416E7C3FD5EA40D1E28FBA3FD7268C826FE5FC3FD85561882E43FA3FD977D95EC10C023FDA8EEC5F8FC33C3FDB9B76C2EF81F83FDC9E3CB8308C7C3FDD97EDC5AD8FA83FDE8927964FD5FD3FDF727851619F993FE02A30498EB0FE3FE097AA8BC975DB3FE101E012E6B82E3FE1690163290F403FE1CD3AE6EF4FFC3FE22EB561CCC1003FE28D9654473F203FE2EA0052A00F9D3FE34413509F79FF3FE39BECE40418B03FE3F1A87EF0743D3FE4455FA37861EB3FE4972A114104DC3FE4E71DEE0018FE3FE5354FE987AFFE3FE581D35DF1753C3FE5CCBA6C66DEFC3FE6161616F1987F3FE65DF657B043013FE6A46A35BEE62D3FE6E97FD8179E9E3FE72D4496A6F4873FE76FC509C77DFB3FE7B10D1851CDDE3FE7F1280468033E3FE83020771F6D203FE86E008B2684D43FE8AAD1D681E1DC3FE8E69D7377A7FE3FE9216C08BE37DF3FE95B45D1008CCC3FE99432A1C8A23C3FE9CC39F1DE6DFD3FEA0362DF28679F3FEA39B4341932DB3FEA6F346CB4CA5C3FEAA3E9BB36752D3FEAD7DA0C5FDDFD3FEB0B0B0B78CC3F3FEB3D82260640A63FEB6F448F3F0CFC3FEBA057434368C83FEBD0BF0A1C7E003FEC00807A8871003FEC2F9FFC96FC203FEC5E21CC1A571C3FEC8C09FAEFCC9C3FECB95C732312DC3FECE61CF8EF36FE3FED124F2C9FABFA3FED3DF68C53D5B03FED691675A735B23FED93B22740313D3FEDBDCCC2473E2F3FEDE7694BC81EEA3FEE108AADFEB2D23FEE3933B990C1DC3FEE616726B60D4C3FEE8927964FD5FD3FEEB07792F0F0DD3FEED75991D76CFD3FEEFDCFF3D8BACB3FEF23DD0641323B3FEF498303A7C5213FEF6EC414B69BFC3FEF93A250E94D9C3FEFB81FBF41557E3FEFDC3E56F160DA3FF00000000000003FF011B349F11FB63FF02339EF0751963FF03494CE447B5D3FF045C4C033ADCE3FF056CA97287D1F"}} +{"expression":"log10(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x01010178030161BFF00000000000000162BFE65DF657B043000163BFE0BB6C34D81502"}} +{"expression":"log10(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x01020178017906016103626172BFE65DF657B04300016103666F6FBFF0000000000000016203626172BFD977D95EC10C02016203666F6FBFE0BB6C34D81502016303626172BFCC658A32216008016303666F6FBFD34413509F79FF"}} +{"expression":"log10(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A180161036261720169BFD34413509F79FF016103626172016ABFCC658A32216008016103626172016BBFC3D3D3D21CCF04016103626172016CBFB8CF183886480B016103666F6F0169BFF0000000000000016103666F6F016ABFE65DF657B04300016103666F6F016BBFE0BB6C34D81502016103666F6F016CBFD977D95EC10C0201620362617201693FBD2B643BC124F4016203626172016A3FC2B452CF2224FA016203626172016B3FC68A288B60B7FC016203626172016C3FCA209A84FBCFF9016203666F6F0169BFA76D869B02A02E016203666F6F016A0000000000000000016203666F6F016B3FA5316C0A18ADD6016203666F6F016C3FB44538DE3B27EB01630362617201693FD49F3DAD416E7C016303626172016A3FD5EA40D1E28FBA016303626172016B3FD7268C826FE5FC016303626172016C3FD85561882E43FA016303666F6F01693FCD7F59AA5BECB9016303666F6F016A3FD056627D3F25F9016303666F6F016B3FD1D71957EF0441016303666F6F016C3FD34413509F79FF"}} +{"expression":"log10(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172BFB8CF183886480BBFA76D869B02A02E00000000000000003FA5316C0A18ADD63FB44538DE3B27EB3FBD2B643BC124F43FC2B452CF2224FA3FD5EA40D1E28FBA3FD7268C826FE5FC3FD85561882E43FA3FD977D95EC10C023FDA8EEC5F8FC33C3FDB9B76C2EF81F83FDC9E3CB8308C7C3FE1CD3AE6EF4FFC3FE22EB561CCC1003FE28D9654473F203FE2EA0052A00F9D3FE34413509F79FF3FE39BECE40418B03FE3F1A87EF0743D03666F6FBFF0000000000000BFE65DF657B04300BFE0BB6C34D81502BFD977D95EC10C02BFD34413509F79FFBFCC658A32216008BFC3D3D3D21CCF043FC68A288B60B7FC3FCA209A84FBCFF93FCD7F59AA5BECB93FD056627D3F25F93FD1D71957EF04413FD34413509F79FF3FD49F3DAD416E7C3FDD97EDC5AD8FA83FDE8927964FD5FD3FDF727851619F993FE02A30498EB0FE3FE097AA8BC975DB3FE101E012E6B82E3FE1690163290F40"}} +{"expression":"log10(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C01610169BFF0000000000000BFD34413509F79FFBFA76D869B02A02E3FBD2B643BC124F43FCD7F59AA5BECB90161016ABFE65DF657B04300BFCC658A3221600800000000000000003FC2B452CF2224FA3FD056627D3F25F90161016BBFE0BB6C34D81502BFC3D3D3D21CCF043FA5316C0A18ADD63FC68A288B60B7FC3FD1D71957EF04410161016CBFD977D95EC10C02BFB8CF183886480B3FB44538DE3B27EB3FCA209A84FBCFF93FD34413509F79FF016201693FD49F3DAD416E7C3FD977D95EC10C023FDD97EDC5AD8FA83FE097AA8BC975DB3FE22EB561CCC1000162016A3FD5EA40D1E28FBA3FDA8EEC5F8FC33C3FDE8927964FD5FD3FE101E012E6B82E3FE28D9654473F200162016B3FD7268C826FE5FC3FDB9B76C2EF81F83FDF727851619F993FE1690163290F403FE2EA0052A00F9D0162016C3FD85561882E43FA3FDC9E3CB8308C7C3FE02A30498EB0FE3FE1CD3AE6EF4FFC3FE34413509F79FF016301693FE39BECE40418B03FE4E71DEE0018FE3FE6161616F1987F3FE72D4496A6F4873FE83020771F6D200163016A3FE3F1A87EF0743D3FE5354FE987AFFE3FE65DF657B043013FE76FC509C77DFB3FE86E008B2684D40163016B3FE4455FA37861EB3FE581D35DF1753C3FE6A46A35BEE62D3FE7B10D1851CDDE3FE8AAD1D681E1DC0163016C3FE4972A114104DC3FE5CCBA6C66DEFC3FE6E97FD8179E9E3FE7F1280468033E3FE8E69D7377A7FE"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x0200BFF0000000000000"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803BFF0000000000000BFE65DF657B04300BFE0BB6C34D81502"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x0202017803017905BFF0000000000000BFE65DF657B04300BFE0BB6C34D81502BFD977D95EC10C02BFD34413509F79FFBFCC658A32216008BFC3D3D3D21CCF04BFB8CF183886480BBFA76D869B02A02E00000000000000003FA5316C0A18ADD63FB44538DE3B27EB3FBD2B643BC124F43FC2B452CF2224FA3FC68A288B60B7FC"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A07BFF0000000000000BFE65DF657B04300BFE0BB6C34D81502BFD977D95EC10C02BFD34413509F79FFBFCC658A32216008BFC3D3D3D21CCF04BFB8CF183886480BBFA76D869B02A02E00000000000000003FA5316C0A18ADD63FB44538DE3B27EB3FBD2B643BC124F43FC2B452CF2224FA3FC68A288B60B7FC3FCA209A84FBCFF93FCD7F59AA5BECB93FD056627D3F25F93FD1D71957EF04413FD34413509F79FF3FD49F3DAD416E7C3FD5EA40D1E28FBA3FD7268C826FE5FC3FD85561882E43FA3FD977D95EC10C023FDA8EEC5F8FC33C3FDB9B76C2EF81F83FDC9E3CB8308C7C3FDD97EDC5AD8FA83FDE8927964FD5FD3FDF727851619F993FE02A30498EB0FE3FE097AA8BC975DB3FE101E012E6B82E3FE1690163290F403FE1CD3AE6EF4FFC3FE22EB561CCC1003FE28D9654473F203FE2EA0052A00F9D3FE34413509F79FF3FE39BECE40418B03FE3F1A87EF0743D3FE4455FA37861EB3FE4972A114104DC3FE4E71DEE0018FE3FE5354FE987AFFE3FE581D35DF1753C3FE5CCBA6C66DEFC3FE6161616F1987F3FE65DF657B043013FE6A46A35BEE62D3FE6E97FD8179E9E3FE72D4496A6F4873FE76FC509C77DFB3FE7B10D1851CDDE3FE7F1280468033E3FE83020771F6D203FE86E008B2684D43FE8AAD1D681E1DC3FE8E69D7377A7FE3FE9216C08BE37DF3FE95B45D1008CCC3FE99432A1C8A23C3FE9CC39F1DE6DFD3FEA0362DF28679F3FEA39B4341932DB3FEA6F346CB4CA5C3FEAA3E9BB36752D3FEAD7DA0C5FDDFD3FEB0B0B0B78CC3F3FEB3D82260640A63FEB6F448F3F0CFC3FEBA057434368C83FEBD0BF0A1C7E003FEC00807A8871003FEC2F9FFC96FC203FEC5E21CC1A571C3FEC8C09FAEFCC9C3FECB95C732312DC3FECE61CF8EF36FE3FED124F2C9FABFA3FED3DF68C53D5B03FED691675A735B23FED93B22740313D3FEDBDCCC2473E2F3FEDE7694BC81EEA3FEE108AADFEB2D23FEE3933B990C1DC3FEE616726B60D4C3FEE8927964FD5FD3FEEB07792F0F0DD3FEED75991D76CFD3FEEFDCFF3D8BACB3FEF23DD0641323B3FEF498303A7C5213FEF6EC414B69BFC3FEF93A250E94D9C3FEFB81FBF41557E3FEFDC3E56F160DA3FF00000000000003FF011B349F11FB63FF02339EF0751963FF03494CE447B5D3FF045C4C033ADCE3FF056CA97287D1F"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x01010178030161BFF00000000000000162BFE65DF657B043000163BFE0BB6C34D81502"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x01020178017906016103626172BFE65DF657B04300016103666F6FBFF0000000000000016203626172BFD977D95EC10C02016203666F6FBFE0BB6C34D81502016303626172BFCC658A32216008016303666F6FBFD34413509F79FF"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A180161036261720169BFD34413509F79FF016103626172016ABFCC658A32216008016103626172016BBFC3D3D3D21CCF04016103626172016CBFB8CF183886480B016103666F6F0169BFF0000000000000016103666F6F016ABFE65DF657B04300016103666F6F016BBFE0BB6C34D81502016103666F6F016CBFD977D95EC10C0201620362617201693FBD2B643BC124F4016203626172016A3FC2B452CF2224FA016203626172016B3FC68A288B60B7FC016203626172016C3FCA209A84FBCFF9016203666F6F0169BFA76D869B02A02E016203666F6F016A0000000000000000016203666F6F016B3FA5316C0A18ADD6016203666F6F016C3FB44538DE3B27EB01630362617201693FD49F3DAD416E7C016303626172016A3FD5EA40D1E28FBA016303626172016B3FD7268C826FE5FC016303626172016C3FD85561882E43FA016303666F6F01693FCD7F59AA5BECB9016303666F6F016A3FD056627D3F25F9016303666F6F016B3FD1D71957EF0441016303666F6F016C3FD34413509F79FF"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172BFB8CF183886480BBFA76D869B02A02E00000000000000003FA5316C0A18ADD63FB44538DE3B27EB3FBD2B643BC124F43FC2B452CF2224FA3FD5EA40D1E28FBA3FD7268C826FE5FC3FD85561882E43FA3FD977D95EC10C023FDA8EEC5F8FC33C3FDB9B76C2EF81F83FDC9E3CB8308C7C3FE1CD3AE6EF4FFC3FE22EB561CCC1003FE28D9654473F203FE2EA0052A00F9D3FE34413509F79FF3FE39BECE40418B03FE3F1A87EF0743D03666F6FBFF0000000000000BFE65DF657B04300BFE0BB6C34D81502BFD977D95EC10C02BFD34413509F79FFBFCC658A32216008BFC3D3D3D21CCF043FC68A288B60B7FC3FCA209A84FBCFF93FCD7F59AA5BECB93FD056627D3F25F93FD1D71957EF04413FD34413509F79FF3FD49F3DAD416E7C3FDD97EDC5AD8FA83FDE8927964FD5FD3FDF727851619F993FE02A30498EB0FE3FE097AA8BC975DB3FE101E012E6B82E3FE1690163290F40"}} +{"expression":"map(a,f(a)(log10(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C01610169BFF0000000000000BFD34413509F79FFBFA76D869B02A02E3FBD2B643BC124F43FCD7F59AA5BECB90161016ABFE65DF657B04300BFCC658A3221600800000000000000003FC2B452CF2224FA3FD056627D3F25F90161016BBFE0BB6C34D81502BFC3D3D3D21CCF043FA5316C0A18ADD63FC68A288B60B7FC3FD1D71957EF04410161016CBFD977D95EC10C02BFB8CF183886480B3FB44538DE3B27EB3FCA209A84FBCFF93FD34413509F79FF016201693FD49F3DAD416E7C3FD977D95EC10C023FDD97EDC5AD8FA83FE097AA8BC975DB3FE22EB561CCC1000162016A3FD5EA40D1E28FBA3FDA8EEC5F8FC33C3FDE8927964FD5FD3FE101E012E6B82E3FE28D9654473F200162016B3FD7268C826FE5FC3FDB9B76C2EF81F83FDF727851619F993FE1690163290F403FE2EA0052A00F9D0162016C3FD85561882E43FA3FDC9E3CB8308C7C3FE02A30498EB0FE3FE1CD3AE6EF4FFC3FE34413509F79FF016301693FE39BECE40418B03FE4E71DEE0018FE3FE6161616F1987F3FE72D4496A6F4873FE83020771F6D200163016A3FE3F1A87EF0743D3FE5354FE987AFFE3FE65DF657B043013FE76FC509C77DFB3FE86E008B2684D40163016B3FE4455FA37861EB3FE581D35DF1753C3FE6A46A35BEE62D3FE7B10D1851CDDE3FE8AAD1D681E1DC0163016C3FE4972A114104DC3FE5CCBA6C66DEFC3FE6E97FD8179E9E3FE7F1280468033E3FE8E69D7377A7FE"}} +{"expression":"log(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x0200C0026BB1BBB55515"}} +{"expression":"log(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803C0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721"}} +{"expression":"log(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x0202017803017905C0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721BFED5240F0E0E077BFE62E42FEFA39EFBFE058AEFA811452BFD6D3C324E13F50BFCC8FF7C79A9A20BFBAF8E8210A415C00000000000000003FB8663F793C46CC3FC7565011E496753FD0CA937BE1B9DC3FD588C2D913348F3FD9F323ECBF984C"}} +{"expression":"log(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A07C0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721BFED5240F0E0E077BFE62E42FEFA39EFBFE058AEFA811452BFD6D3C324E13F50BFCC8FF7C79A9A20BFBAF8E8210A415C00000000000000003FB8663F793C46CC3FC7565011E496753FD0CA937BE1B9DC3FD588C2D913348F3FD9F323ECBF984C3FDE148A1A2726CF3FE0FAE81914A9913FE2CF25FAD8F1C43FE48A11293D785B3FE62E42FEFA39EF3FE7BDF362E9666E3FE93B0AEE21C2C93FEAA73108717B693FEC03D703735F8C3FED5240F0E0E0783FEE938CBCEB16DD3FEFC8B7F138BDEA3FF0795235C1EA1B3FF1090E203152123FF193EA7AAD030B3FF21A3919B7AC893FF29C440606E6AB3FF31A4E7240C7773FF394958C0771C03FF40B512EB53D603FF47EB47CE995D93FF4EEEE650AE5503FF55C2A141BD9253FF5C68F59A571813FF62E42FEFA39EF3FF6936713B2AE703FF6F61B30F1D02F3FF7567CB4BF2DF73FF7B4A6F68DFE5C3FF810B375DCE91E3FF86ABA03B5DAAC3FF8C2D0E7B737423FF9190D0136CCBE3FF96D81E4FA0A843FF9C041F7ED8D333FFA115E873757D33FFA60E7DDF2A8663FFAAEED58D9CF2A3FFAFB7D78197BED3FFB46A5EF8151A03FFB9073B53F07133FFBD8F30F4BBF393FFC202F9FAE6F0A3FFC66346FB1FBB83FFCAB0BFA2A20023FFCEEC034DF06083FFD315A9934C9813FFD72E42C21B6413FFDB365858403A33FFDF2E6D6E5FBAA3FFE316FF1BDE46E3FFE6F084D359A8B3FFEABB70B848EB83FFEE782FEE5C0C03FFF2272AE325A573FFF5C8C5928B0F93FFF95D5FC66B2D13FFFCE55551E156E40000307F244012440001E85798EB9A3400039A5C9CC7B0E4000546B52E30F6240006ED86C91473D400088EF57AA0DD14000A2B23F3BAB734000BC2339A4B1004000D5444997E5B44000EE175F1073EE4001069E5837769340011EDB023BF0FE400136CF1A1E257740014E7C4D6F2A8E400165E43B058DAA40017D0873A7C0D7400193EA7AAD030B4001AA8BC69564674001C0EDC1997BD24001D711CA3257CA4001ECF9339A2A1D400202A5464624B1400218174059F4DB40022D50561542DA40024251B23B93BE4002571C7676E54140026BB1BBB555164002801292821F4C40029440035A3A654002A83B0EFCD2C24002BC04AEB7E2AF4002CF9DD4B12035"}} +{"expression":"log(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x01010178030161C0026BB1BBB555150162BFF9C041F7ED8D330163BFF34378FCBDA721"}} +{"expression":"log(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x01020178017906016103626172BFF9C041F7ED8D33016103666F6FC0026BB1BBB55515016203626172BFED5240F0E0E077016203666F6FBFF34378FCBDA721016303626172BFE058AEFA811452016303666F6FBFE62E42FEFA39EF"}} +{"expression":"log(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A180161036261720169BFE62E42FEFA39EF016103626172016ABFE058AEFA811452016103626172016BBFD6D3C324E13F50016103626172016CBFCC8FF7C79A9A20016103666F6F0169C0026BB1BBB55515016103666F6F016ABFF9C041F7ED8D33016103666F6F016BBFF34378FCBDA721016103666F6F016CBFED5240F0E0E07701620362617201693FD0CA937BE1B9DC016203626172016A3FD588C2D913348F016203626172016B3FD9F323ECBF984C016203626172016C3FDE148A1A2726CF016203666F6F0169BFBAF8E8210A415C016203666F6F016A0000000000000000016203666F6F016B3FB8663F793C46CC016203666F6F016C3FC7565011E4967501630362617201693FE7BDF362E9666E016303626172016A3FE93B0AEE21C2C9016303626172016B3FEAA73108717B69016303626172016C3FEC03D703735F8C016303666F6F01693FE0FAE81914A991016303666F6F016A3FE2CF25FAD8F1C4016303666F6F016B3FE48A11293D785B016303666F6F016C3FE62E42FEFA39EF"}} +{"expression":"log(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172BFCC8FF7C79A9A20BFBAF8E8210A415C00000000000000003FB8663F793C46CC3FC7565011E496753FD0CA937BE1B9DC3FD588C2D913348F3FE93B0AEE21C2C93FEAA73108717B693FEC03D703735F8C3FED5240F0E0E0783FEE938CBCEB16DD3FEFC8B7F138BDEA3FF0795235C1EA1B3FF47EB47CE995D93FF4EEEE650AE5503FF55C2A141BD9253FF5C68F59A571813FF62E42FEFA39EF3FF6936713B2AE703FF6F61B30F1D02F03666F6FC0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721BFED5240F0E0E077BFE62E42FEFA39EFBFE058AEFA811452BFD6D3C324E13F503FD9F323ECBF984C3FDE148A1A2726CF3FE0FAE81914A9913FE2CF25FAD8F1C43FE48A11293D785B3FE62E42FEFA39EF3FE7BDF362E9666E3FF1090E203152123FF193EA7AAD030B3FF21A3919B7AC893FF29C440606E6AB3FF31A4E7240C7773FF394958C0771C03FF40B512EB53D60"}} +{"expression":"log(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C01610169C0026BB1BBB55515BFE62E42FEFA39EFBFBAF8E8210A415C3FD0CA937BE1B9DC3FE0FAE81914A9910161016ABFF9C041F7ED8D33BFE058AEFA81145200000000000000003FD588C2D913348F3FE2CF25FAD8F1C40161016BBFF34378FCBDA721BFD6D3C324E13F503FB8663F793C46CC3FD9F323ECBF984C3FE48A11293D785B0161016CBFED5240F0E0E077BFCC8FF7C79A9A203FC7565011E496753FDE148A1A2726CF3FE62E42FEFA39EF016201693FE7BDF362E9666E3FED5240F0E0E0783FF1090E203152123FF31A4E7240C7773FF4EEEE650AE5500162016A3FE93B0AEE21C2C93FEE938CBCEB16DD3FF193EA7AAD030B3FF394958C0771C03FF55C2A141BD9250162016B3FEAA73108717B693FEFC8B7F138BDEA3FF21A3919B7AC893FF40B512EB53D603FF5C68F59A571810162016C3FEC03D703735F8C3FF0795235C1EA1B3FF29C440606E6AB3FF47EB47CE995D93FF62E42FEFA39EF016301693FF6936713B2AE703FF810B375DCE91E3FF96D81E4FA0A843FFAAEED58D9CF2A3FFBD8F30F4BBF390163016A3FF6F61B30F1D02F3FF86ABA03B5DAAC3FF9C041F7ED8D333FFAFB7D78197BED3FFC202F9FAE6F0A0163016B3FF7567CB4BF2DF73FF8C2D0E7B737423FFA115E873757D33FFB46A5EF8151A03FFC66346FB1FBB80163016C3FF7B4A6F68DFE5C3FF9190D0136CCBE3FFA60E7DDF2A8663FFB9073B53F07133FFCAB0BFA2A2002"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x0200C0026BB1BBB55515"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803C0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x0202017803017905C0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721BFED5240F0E0E077BFE62E42FEFA39EFBFE058AEFA811452BFD6D3C324E13F50BFCC8FF7C79A9A20BFBAF8E8210A415C00000000000000003FB8663F793C46CC3FC7565011E496753FD0CA937BE1B9DC3FD588C2D913348F3FD9F323ECBF984C"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A07C0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721BFED5240F0E0E077BFE62E42FEFA39EFBFE058AEFA811452BFD6D3C324E13F50BFCC8FF7C79A9A20BFBAF8E8210A415C00000000000000003FB8663F793C46CC3FC7565011E496753FD0CA937BE1B9DC3FD588C2D913348F3FD9F323ECBF984C3FDE148A1A2726CF3FE0FAE81914A9913FE2CF25FAD8F1C43FE48A11293D785B3FE62E42FEFA39EF3FE7BDF362E9666E3FE93B0AEE21C2C93FEAA73108717B693FEC03D703735F8C3FED5240F0E0E0783FEE938CBCEB16DD3FEFC8B7F138BDEA3FF0795235C1EA1B3FF1090E203152123FF193EA7AAD030B3FF21A3919B7AC893FF29C440606E6AB3FF31A4E7240C7773FF394958C0771C03FF40B512EB53D603FF47EB47CE995D93FF4EEEE650AE5503FF55C2A141BD9253FF5C68F59A571813FF62E42FEFA39EF3FF6936713B2AE703FF6F61B30F1D02F3FF7567CB4BF2DF73FF7B4A6F68DFE5C3FF810B375DCE91E3FF86ABA03B5DAAC3FF8C2D0E7B737423FF9190D0136CCBE3FF96D81E4FA0A843FF9C041F7ED8D333FFA115E873757D33FFA60E7DDF2A8663FFAAEED58D9CF2A3FFAFB7D78197BED3FFB46A5EF8151A03FFB9073B53F07133FFBD8F30F4BBF393FFC202F9FAE6F0A3FFC66346FB1FBB83FFCAB0BFA2A20023FFCEEC034DF06083FFD315A9934C9813FFD72E42C21B6413FFDB365858403A33FFDF2E6D6E5FBAA3FFE316FF1BDE46E3FFE6F084D359A8B3FFEABB70B848EB83FFEE782FEE5C0C03FFF2272AE325A573FFF5C8C5928B0F93FFF95D5FC66B2D13FFFCE55551E156E40000307F244012440001E85798EB9A3400039A5C9CC7B0E4000546B52E30F6240006ED86C91473D400088EF57AA0DD14000A2B23F3BAB734000BC2339A4B1004000D5444997E5B44000EE175F1073EE4001069E5837769340011EDB023BF0FE400136CF1A1E257740014E7C4D6F2A8E400165E43B058DAA40017D0873A7C0D7400193EA7AAD030B4001AA8BC69564674001C0EDC1997BD24001D711CA3257CA4001ECF9339A2A1D400202A5464624B1400218174059F4DB40022D50561542DA40024251B23B93BE4002571C7676E54140026BB1BBB555164002801292821F4C40029440035A3A654002A83B0EFCD2C24002BC04AEB7E2AF4002CF9DD4B12035"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x01010178030161C0026BB1BBB555150162BFF9C041F7ED8D330163BFF34378FCBDA721"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x01020178017906016103626172BFF9C041F7ED8D33016103666F6FC0026BB1BBB55515016203626172BFED5240F0E0E077016203666F6FBFF34378FCBDA721016303626172BFE058AEFA811452016303666F6FBFE62E42FEFA39EF"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A180161036261720169BFE62E42FEFA39EF016103626172016ABFE058AEFA811452016103626172016BBFD6D3C324E13F50016103626172016CBFCC8FF7C79A9A20016103666F6F0169C0026BB1BBB55515016103666F6F016ABFF9C041F7ED8D33016103666F6F016BBFF34378FCBDA721016103666F6F016CBFED5240F0E0E07701620362617201693FD0CA937BE1B9DC016203626172016A3FD588C2D913348F016203626172016B3FD9F323ECBF984C016203626172016C3FDE148A1A2726CF016203666F6F0169BFBAF8E8210A415C016203666F6F016A0000000000000000016203666F6F016B3FB8663F793C46CC016203666F6F016C3FC7565011E4967501630362617201693FE7BDF362E9666E016303626172016A3FE93B0AEE21C2C9016303626172016B3FEAA73108717B69016303626172016C3FEC03D703735F8C016303666F6F01693FE0FAE81914A991016303666F6F016A3FE2CF25FAD8F1C4016303666F6F016B3FE48A11293D785B016303666F6F016C3FE62E42FEFA39EF"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172BFCC8FF7C79A9A20BFBAF8E8210A415C00000000000000003FB8663F793C46CC3FC7565011E496753FD0CA937BE1B9DC3FD588C2D913348F3FE93B0AEE21C2C93FEAA73108717B693FEC03D703735F8C3FED5240F0E0E0783FEE938CBCEB16DD3FEFC8B7F138BDEA3FF0795235C1EA1B3FF47EB47CE995D93FF4EEEE650AE5503FF55C2A141BD9253FF5C68F59A571813FF62E42FEFA39EF3FF6936713B2AE703FF6F61B30F1D02F03666F6FC0026BB1BBB55515BFF9C041F7ED8D33BFF34378FCBDA721BFED5240F0E0E077BFE62E42FEFA39EFBFE058AEFA811452BFD6D3C324E13F503FD9F323ECBF984C3FDE148A1A2726CF3FE0FAE81914A9913FE2CF25FAD8F1C43FE48A11293D785B3FE62E42FEFA39EF3FE7BDF362E9666E3FF1090E203152123FF193EA7AAD030B3FF21A3919B7AC893FF29C440606E6AB3FF31A4E7240C7773FF394958C0771C03FF40B512EB53D60"}} +{"expression":"map(a,f(a)(log(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C01610169C0026BB1BBB55515BFE62E42FEFA39EFBFBAF8E8210A415C3FD0CA937BE1B9DC3FE0FAE81914A9910161016ABFF9C041F7ED8D33BFE058AEFA81145200000000000000003FD588C2D913348F3FE2CF25FAD8F1C40161016BBFF34378FCBDA721BFD6D3C324E13F503FB8663F793C46CC3FD9F323ECBF984C3FE48A11293D785B0161016CBFED5240F0E0E077BFCC8FF7C79A9A203FC7565011E496753FDE148A1A2726CF3FE62E42FEFA39EF016201693FE7BDF362E9666E3FED5240F0E0E0783FF1090E203152123FF31A4E7240C7773FF4EEEE650AE5500162016A3FE93B0AEE21C2C93FEE938CBCEB16DD3FF193EA7AAD030B3FF394958C0771C03FF55C2A141BD9250162016B3FEAA73108717B693FEFC8B7F138BDEA3FF21A3919B7AC893FF40B512EB53D603FF5C68F59A571810162016C3FEC03D703735F8C3FF0795235C1EA1B3FF29C440606E6AB3FF47EB47CE995D93FF62E42FEFA39EF016301693FF6936713B2AE703FF810B375DCE91E3FF96D81E4FA0A843FFAAEED58D9CF2A3FFBD8F30F4BBF390163016A3FF6F61B30F1D02F3FF86ABA03B5DAAC3FF9C041F7ED8D333FFAFB7D78197BED3FFC202F9FAE6F0A0163016B3FF7567CB4BF2DF73FF8C2D0E7B737423FFA115E873757D33FFB46A5EF8151A03FFC66346FB1FBB80163016C3FF7B4A6F68DFE5C3FF9190D0136CCBE3FFA60E7DDF2A8663FFB9073B53F07133FFCAB0BFA2A2002"}} +{"expression":"sqrt(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FD43D136248490F"}} +{"expression":"sqrt(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FD43D136248490F3FDC9F25C5BFEDD93FE186F174F88472"}} +{"expression":"sqrt(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FD43D136248490F3FDC9F25C5BFEDD93FE186F174F884723FE43D136248490F3FE6A09E667F3BCD3FE8C97EF43F72483FEAC5EB3F7AB2F83FEC9F25C5BFEDD93FEE5B9D136C6D963FF00000000000003FF0C7EBC96A56F63FF186F174F884723FF23E2896280F233FF2EE73DADC9B573FF3988E1409212E"}} +{"expression":"sqrt(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FD43D136248490F3FDC9F25C5BFEDD93FE186F174F884723FE43D136248490F3FE6A09E667F3BCD3FE8C97EF43F72483FEAC5EB3F7AB2F83FEC9F25C5BFEDD93FEE5B9D136C6D963FF00000000000003FF0C7EBC96A56F63FF186F174F884723FF23E2896280F233FF2EE73DADC9B573FF3988E1409212E3FF43D136248490F3FF4DC87D61451DA3FF5775C544FF2633FF60DF2453AB7233FF6A09E667F3BCD3FF72FAAFC7E3CD73FF7BB598C88B4AD3FF843E43D85E5B13FF8C97EF43F72483FF94C583ADA5B533FF9CC99FF02C4813FFA4A6A2F74C6AC3FFAC5EB3F7AB2F83FFB3F3C957429DA3FFBB67AE8584CAA3FFC2BC08F4BFA983FFC9F25C5BFEDD93FFD10C0E60BE3083FFD80A69C19E42A3FFDEEEA11683F493FFE5B9D136C6D963FFEC6D0353167A93FFF3092ECE5BC353FFF98F3ADEF13F24000000000000000400032E249CC617140006526AA25A13B400096D2BC865F234000C7EBC96A56F64000F876CCDF6CD9400128787C6F7D7A400157F54C76D72F400186F174F884724001B570F5FF3FED4001E3779B97F4A8400211090171020F40023E2896280F2340026AD99E4F00174002971F372F95B64002C2FC595456A74002EE73DADC9B574003198871A0E80E4003443CB52C2A8540036E93208DED544003988E1409212E4003C22FD6A2B7B14003EB7A9792F3C6400414706F9C063A40043D136248490F400465655F122FF640048D684277CF0B4004B51DD6FBA9BB4004DC87D61451DA400503A7E90C397B40052A7FA9D2F8EA40055110A3C12C5E4005775C544FF26340059D642BC4FC1C4005C3298DD40B254005E8ADD236A58F40060DF2453AB723400632F82848C789400657C0B2625EB440067C4D109924644006A09E667F3BCD4006C4B5CE9152314006E8945A9ACD9240070C3B1414801740072FAAFC7E3CD7400752E50DB3A3A2400775EA3A3C72D2400798BB6D98A8324007BB598C88B4AD4007DDC575520155400800000000000040082209FEA1FD38400843E43D85E5B14008658F83702DC24008870C91D106234008A85C24F706594008C97EF43F72484008EA75B2443DF040090B410D07F01E40092BE1AE1F827140094C583ADA5B5340096CA554687C8940098CC997FEFF4C4009ACC59EFAF54B4009CC99FF02C4814009EC474A261264"}} +{"expression":"sqrt(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FD43D136248490F01623FDC9F25C5BFEDD901633FE186F174F88472"}} +{"expression":"sqrt(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FDC9F25C5BFEDD9016103666F6F3FD43D136248490F0162036261723FE43D136248490F016203666F6F3FE186F174F884720163036261723FE8C97EF43F7248016303666F6F3FE6A09E667F3BCD"}} +{"expression":"sqrt(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE6A09E667F3BCD016103626172016A3FE8C97EF43F7248016103626172016B3FEAC5EB3F7AB2F8016103626172016C3FEC9F25C5BFEDD9016103666F6F01693FD43D136248490F016103666F6F016A3FDC9F25C5BFEDD9016103666F6F016B3FE186F174F88472016103666F6F016C3FE43D136248490F01620362617201693FF23E2896280F23016203626172016A3FF2EE73DADC9B57016203626172016B3FF3988E1409212E016203626172016C3FF43D136248490F016203666F6F01693FEE5B9D136C6D96016203666F6F016A3FF0000000000000016203666F6F016B3FF0C7EBC96A56F6016203666F6F016C3FF186F174F8847201630362617201693FF72FAAFC7E3CD7016303626172016A3FF7BB598C88B4AD016303626172016B3FF843E43D85E5B1016303626172016C3FF8C97EF43F7248016303666F6F01693FF4DC87D61451DA016303666F6F016A3FF5775C544FF263016303666F6F016B3FF60DF2453AB723016303666F6F016C3FF6A09E667F3BCD"}} +{"expression":"sqrt(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FEC9F25C5BFEDD93FEE5B9D136C6D963FF00000000000003FF0C7EBC96A56F63FF186F174F884723FF23E2896280F233FF2EE73DADC9B573FF7BB598C88B4AD3FF843E43D85E5B13FF8C97EF43F72483FF94C583ADA5B533FF9CC99FF02C4813FFA4A6A2F74C6AC3FFAC5EB3F7AB2F83FFE5B9D136C6D963FFEC6D0353167A93FFF3092ECE5BC353FFF98F3ADEF13F24000000000000000400032E249CC617140006526AA25A13B03666F6F3FD43D136248490F3FDC9F25C5BFEDD93FE186F174F884723FE43D136248490F3FE6A09E667F3BCD3FE8C97EF43F72483FEAC5EB3F7AB2F83FF3988E1409212E3FF43D136248490F3FF4DC87D61451DA3FF5775C544FF2633FF60DF2453AB7233FF6A09E667F3BCD3FF72FAAFC7E3CD73FFB3F3C957429DA3FFBB67AE8584CAA3FFC2BC08F4BFA983FFC9F25C5BFEDD93FFD10C0E60BE3083FFD80A69C19E42A3FFDEEEA11683F49"}} +{"expression":"sqrt(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FD43D136248490F3FE6A09E667F3BCD3FEE5B9D136C6D963FF23E2896280F233FF4DC87D61451DA0161016A3FDC9F25C5BFEDD93FE8C97EF43F72483FF00000000000003FF2EE73DADC9B573FF5775C544FF2630161016B3FE186F174F884723FEAC5EB3F7AB2F83FF0C7EBC96A56F63FF3988E1409212E3FF60DF2453AB7230161016C3FE43D136248490F3FEC9F25C5BFEDD93FF186F174F884723FF43D136248490F3FF6A09E667F3BCD016201693FF72FAAFC7E3CD73FF94C583ADA5B533FFB3F3C957429DA3FFD10C0E60BE3083FFEC6D0353167A90162016A3FF7BB598C88B4AD3FF9CC99FF02C4813FFBB67AE8584CAA3FFD80A69C19E42A3FFF3092ECE5BC350162016B3FF843E43D85E5B13FFA4A6A2F74C6AC3FFC2BC08F4BFA983FFDEEEA11683F493FFF98F3ADEF13F20162016C3FF8C97EF43F72483FFAC5EB3F7AB2F83FFC9F25C5BFEDD93FFE5B9D136C6D96400000000000000001630169400032E249CC61714000F876CCDF6CD94001B570F5FF3FED40026AD99E4F00174003198871A0E80E0163016A40006526AA25A13B400128787C6F7D7A4001E3779B97F4A84002971F372F95B64003443CB52C2A850163016B400096D2BC865F23400157F54C76D72F400211090171020F4002C2FC595456A740036E93208DED540163016C4000C7EBC96A56F6400186F174F8847240023E2896280F234002EE73DADC9B574003988E1409212E"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FD43D136248490F"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FD43D136248490F3FDC9F25C5BFEDD93FE186F174F88472"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FD43D136248490F3FDC9F25C5BFEDD93FE186F174F884723FE43D136248490F3FE6A09E667F3BCD3FE8C97EF43F72483FEAC5EB3F7AB2F83FEC9F25C5BFEDD93FEE5B9D136C6D963FF00000000000003FF0C7EBC96A56F63FF186F174F884723FF23E2896280F233FF2EE73DADC9B573FF3988E1409212E"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FD43D136248490F3FDC9F25C5BFEDD93FE186F174F884723FE43D136248490F3FE6A09E667F3BCD3FE8C97EF43F72483FEAC5EB3F7AB2F83FEC9F25C5BFEDD93FEE5B9D136C6D963FF00000000000003FF0C7EBC96A56F63FF186F174F884723FF23E2896280F233FF2EE73DADC9B573FF3988E1409212E3FF43D136248490F3FF4DC87D61451DA3FF5775C544FF2633FF60DF2453AB7233FF6A09E667F3BCD3FF72FAAFC7E3CD73FF7BB598C88B4AD3FF843E43D85E5B13FF8C97EF43F72483FF94C583ADA5B533FF9CC99FF02C4813FFA4A6A2F74C6AC3FFAC5EB3F7AB2F83FFB3F3C957429DA3FFBB67AE8584CAA3FFC2BC08F4BFA983FFC9F25C5BFEDD93FFD10C0E60BE3083FFD80A69C19E42A3FFDEEEA11683F493FFE5B9D136C6D963FFEC6D0353167A93FFF3092ECE5BC353FFF98F3ADEF13F24000000000000000400032E249CC617140006526AA25A13B400096D2BC865F234000C7EBC96A56F64000F876CCDF6CD9400128787C6F7D7A400157F54C76D72F400186F174F884724001B570F5FF3FED4001E3779B97F4A8400211090171020F40023E2896280F2340026AD99E4F00174002971F372F95B64002C2FC595456A74002EE73DADC9B574003198871A0E80E4003443CB52C2A8540036E93208DED544003988E1409212E4003C22FD6A2B7B14003EB7A9792F3C6400414706F9C063A40043D136248490F400465655F122FF640048D684277CF0B4004B51DD6FBA9BB4004DC87D61451DA400503A7E90C397B40052A7FA9D2F8EA40055110A3C12C5E4005775C544FF26340059D642BC4FC1C4005C3298DD40B254005E8ADD236A58F40060DF2453AB723400632F82848C789400657C0B2625EB440067C4D109924644006A09E667F3BCD4006C4B5CE9152314006E8945A9ACD9240070C3B1414801740072FAAFC7E3CD7400752E50DB3A3A2400775EA3A3C72D2400798BB6D98A8324007BB598C88B4AD4007DDC575520155400800000000000040082209FEA1FD38400843E43D85E5B14008658F83702DC24008870C91D106234008A85C24F706594008C97EF43F72484008EA75B2443DF040090B410D07F01E40092BE1AE1F827140094C583ADA5B5340096CA554687C8940098CC997FEFF4C4009ACC59EFAF54B4009CC99FF02C4814009EC474A261264"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FD43D136248490F01623FDC9F25C5BFEDD901633FE186F174F88472"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FDC9F25C5BFEDD9016103666F6F3FD43D136248490F0162036261723FE43D136248490F016203666F6F3FE186F174F884720163036261723FE8C97EF43F7248016303666F6F3FE6A09E667F3BCD"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE6A09E667F3BCD016103626172016A3FE8C97EF43F7248016103626172016B3FEAC5EB3F7AB2F8016103626172016C3FEC9F25C5BFEDD9016103666F6F01693FD43D136248490F016103666F6F016A3FDC9F25C5BFEDD9016103666F6F016B3FE186F174F88472016103666F6F016C3FE43D136248490F01620362617201693FF23E2896280F23016203626172016A3FF2EE73DADC9B57016203626172016B3FF3988E1409212E016203626172016C3FF43D136248490F016203666F6F01693FEE5B9D136C6D96016203666F6F016A3FF0000000000000016203666F6F016B3FF0C7EBC96A56F6016203666F6F016C3FF186F174F8847201630362617201693FF72FAAFC7E3CD7016303626172016A3FF7BB598C88B4AD016303626172016B3FF843E43D85E5B1016303626172016C3FF8C97EF43F7248016303666F6F01693FF4DC87D61451DA016303666F6F016A3FF5775C544FF263016303666F6F016B3FF60DF2453AB723016303666F6F016C3FF6A09E667F3BCD"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FEC9F25C5BFEDD93FEE5B9D136C6D963FF00000000000003FF0C7EBC96A56F63FF186F174F884723FF23E2896280F233FF2EE73DADC9B573FF7BB598C88B4AD3FF843E43D85E5B13FF8C97EF43F72483FF94C583ADA5B533FF9CC99FF02C4813FFA4A6A2F74C6AC3FFAC5EB3F7AB2F83FFE5B9D136C6D963FFEC6D0353167A93FFF3092ECE5BC353FFF98F3ADEF13F24000000000000000400032E249CC617140006526AA25A13B03666F6F3FD43D136248490F3FDC9F25C5BFEDD93FE186F174F884723FE43D136248490F3FE6A09E667F3BCD3FE8C97EF43F72483FEAC5EB3F7AB2F83FF3988E1409212E3FF43D136248490F3FF4DC87D61451DA3FF5775C544FF2633FF60DF2453AB7233FF6A09E667F3BCD3FF72FAAFC7E3CD73FFB3F3C957429DA3FFBB67AE8584CAA3FFC2BC08F4BFA983FFC9F25C5BFEDD93FFD10C0E60BE3083FFD80A69C19E42A3FFDEEEA11683F49"}} +{"expression":"map(a,f(a)(sqrt(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FD43D136248490F3FE6A09E667F3BCD3FEE5B9D136C6D963FF23E2896280F233FF4DC87D61451DA0161016A3FDC9F25C5BFEDD93FE8C97EF43F72483FF00000000000003FF2EE73DADC9B573FF5775C544FF2630161016B3FE186F174F884723FEAC5EB3F7AB2F83FF0C7EBC96A56F63FF3988E1409212E3FF60DF2453AB7230161016C3FE43D136248490F3FEC9F25C5BFEDD93FF186F174F884723FF43D136248490F3FF6A09E667F3BCD016201693FF72FAAFC7E3CD73FF94C583ADA5B533FFB3F3C957429DA3FFD10C0E60BE3083FFEC6D0353167A90162016A3FF7BB598C88B4AD3FF9CC99FF02C4813FFBB67AE8584CAA3FFD80A69C19E42A3FFF3092ECE5BC350162016B3FF843E43D85E5B13FFA4A6A2F74C6AC3FFC2BC08F4BFA983FFDEEEA11683F493FFF98F3ADEF13F20162016C3FF8C97EF43F72483FFAC5EB3F7AB2F83FFC9F25C5BFEDD93FFE5B9D136C6D96400000000000000001630169400032E249CC61714000F876CCDF6CD94001B570F5FF3FED40026AD99E4F00174003198871A0E80E0163016A40006526AA25A13B400128787C6F7D7A4001E3779B97F4A84002971F372F95B64003443CB52C2A850163016B400096D2BC865F23400157F54C76D72F400211090171020F4002C2FC595456A740036E93208DED540163016C4000C7EBC96A56F6400186F174F8847240023E2896280F234002EE73DADC9B574003988E1409212E"}} +{"expression":"ceil(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C00000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000402400000000000040260000000000004026000000000000402600000000000040260000000000004026000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FF0000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01693FF0000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201694000000000000000016203626172016A4000000000000000016203626172016B4000000000000000016203626172016C4000000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B4000000000000000016203666F6F016C400000000000000001630362617201694008000000000000016303626172016A4008000000000000016303626172016B4008000000000000016303626172016C4008000000000000016303666F6F01694000000000000000016303666F6F016A4000000000000000016303666F6F016B4000000000000000016303666F6F016C4000000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004014000000000000401400000000000003666F6F3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000"}} +{"expression":"ceil(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF00000000000003FF00000000000003FF0000000000000400000000000000040000000000000000161016A3FF00000000000003FF00000000000003FF0000000000000400000000000000040000000000000000161016B3FF00000000000003FF00000000000004000000000000000400000000000000040000000000000000161016C3FF00000000000003FF000000000000040000000000000004000000000000000400000000000000001620169400800000000000040080000000000004008000000000000401000000000000040100000000000000162016A400800000000000040080000000000004008000000000000401000000000000040100000000000000162016B400800000000000040080000000000004010000000000000401000000000000040100000000000000162016C4008000000000000400800000000000040100000000000004010000000000000401000000000000001630169401400000000000040140000000000004014000000000000401800000000000040180000000000000163016A401400000000000040140000000000004014000000000000401800000000000040180000000000000163016B401400000000000040140000000000004018000000000000401800000000000040180000000000000163016C40140000000000004014000000000000401800000000000040180000000000004018000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C00000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000402400000000000040260000000000004026000000000000402600000000000040260000000000004026000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FF0000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01693FF0000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201694000000000000000016203626172016A4000000000000000016203626172016B4000000000000000016203626172016C4000000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B4000000000000000016203666F6F016C400000000000000001630362617201694008000000000000016303626172016A4008000000000000016303626172016B4008000000000000016303626172016C4008000000000000016303666F6F01694000000000000000016303666F6F016A4000000000000000016303666F6F016B4000000000000000016303666F6F016C4000000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004014000000000000401400000000000003666F6F3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000"}} +{"expression":"map(a,f(a)(ceil(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF00000000000003FF00000000000003FF0000000000000400000000000000040000000000000000161016A3FF00000000000003FF00000000000003FF0000000000000400000000000000040000000000000000161016B3FF00000000000003FF00000000000004000000000000000400000000000000040000000000000000161016C3FF00000000000003FF000000000000040000000000000004000000000000000400000000000000001620169400800000000000040080000000000004008000000000000401000000000000040100000000000000162016A400800000000000040080000000000004008000000000000401000000000000040100000000000000162016B400800000000000040080000000000004010000000000000401000000000000040100000000000000162016C4008000000000000400800000000000040100000000000004010000000000000401000000000000001630169401400000000000040140000000000004014000000000000401800000000000040180000000000000163016A401400000000000040140000000000004014000000000000401800000000000040180000000000000163016B401400000000000040140000000000004018000000000000401800000000000040180000000000000163016C40140000000000004014000000000000401800000000000040180000000000004018000000000000"}} +{"expression":"fabs(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"fabs(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"fabs(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"}} +{"expression":"fabs(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"}} +{"expression":"fabs(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"fabs(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"}} +{"expression":"fabs(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"}} +{"expression":"fabs(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"}} +{"expression":"fabs(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"}} +{"expression":"map(a,f(a)(fabs(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C00000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF000000000000001630362617201694000000000000000016303626172016A4000000000000000016303626172016B4000000000000000016303626172016C4000000000000000016303666F6F01693FF0000000000000016303666F6F016A3FF0000000000000016303666F6F016B3FF0000000000000016303666F6F016C4000000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400800000000000040080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000003666F6F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000400000000000000040000000000000004000000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000"}} +{"expression":"floor(a)","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101690000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000161016A000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000161016B000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000161016C000000000000000000000000000000003FF00000000000003FF0000000000000400000000000000001620169400000000000000040000000000000004000000000000000400800000000000040080000000000000162016A400000000000000040000000000000004008000000000000400800000000000040080000000000000162016B400000000000000040000000000000004008000000000000400800000000000040080000000000000162016C4000000000000000400000000000000040080000000000004008000000000000401000000000000001630169401000000000000040100000000000004010000000000000401400000000000040140000000000000163016A401000000000000040100000000000004014000000000000401400000000000040140000000000000163016B401000000000000040100000000000004014000000000000401400000000000040140000000000000163016C40100000000000004010000000000000401400000000000040140000000000004018000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x02020178030179050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004014000000000000401400000000000040140000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401800000000000040180000000000004018000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C000000000000401C00000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402200000000000040220000000000004022000000000000402400000000000040240000000000004024000000000000402400000000000040240000000000004024000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF000000000000001630362617201694000000000000000016303626172016A4000000000000000016303626172016B4000000000000000016303626172016C4000000000000000016303666F6F01693FF0000000000000016303666F6F016A3FF0000000000000016303666F6F016B3FF0000000000000016303666F6F016C4000000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000004000000000000000400000000000000040000000000000004000000000000000400000000000000040000000000000004000000000000000400800000000000040080000000000004008000000000000400800000000000040100000000000004010000000000000401000000000000003666F6F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000400000000000000040000000000000004000000000000000400800000000000040080000000000004008000000000000400800000000000040080000000000004008000000000000"}} +{"expression":"map(a,f(a)(floor(a)))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C016101690000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000161016A000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000161016B000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000161016C000000000000000000000000000000003FF00000000000003FF0000000000000400000000000000001620169400000000000000040000000000000004000000000000000400800000000000040080000000000000162016A400000000000000040000000000000004008000000000000400800000000000040080000000000000162016B400000000000000040000000000000004008000000000000400800000000000040080000000000000162016C4000000000000000400000000000000040080000000000004008000000000000401000000000000001630169401000000000000040100000000000004010000000000000401400000000000040140000000000000163016A401000000000000040100000000000004014000000000000401400000000000040140000000000000163016B401000000000000040100000000000004014000000000000401400000000000040140000000000000163016C40100000000000004010000000000000401400000000000040140000000000004018000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x02007FF8000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x02010178037FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02010178033FF000000000000000000000000000000000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x02020178030179057FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02020178030179053FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x0203017803017905017A077FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A073FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x010101780301617FF800000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x010101780301613FF00000000000000162000000000000000001630000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x010201780179060161036261723FF0000000000000016103666F6F7FF80000000000000162036261727FF8000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x010301780179017A1801610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B7FF8000000000000016103626172016C3FF0000000000000016103666F6F01697FF8000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C7FF800000000000001620362617201697FF8000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C7FF8000000000000016203666F6F01693FF0000000000000016203666F6F016A7FF8000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF000000000000001630362617201693FF0000000000000016303626172016A7FF8000000000000016303626172016B3FF0000000000000016303626172016C3FF0000000000000016303666F6F01693FF0000000000000016303666F6F016A3FF0000000000000016303666F6F016B7FF8000000000000016303666F6F016C3FF0000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B3FF0000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C3FF000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B0000000000000000016203666F6F016C000000000000000001630362617201690000000000000000016303626172016A3FF0000000000000016303626172016B0000000000000000016303626172016C0000000000000000016303666F6F01690000000000000000016303666F6F016A0000000000000000016303666F6F016B3FF0000000000000016303666F6F016C0000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF000000000000003666F6F7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF0000000000000"},"result":{"expect":"0x0301017902017803017A070203626172000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000"}} +{"expression":"isNan(a)","inputs":{"a":"0x03020178017A010179050C016101697FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000000161016A3FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000000161016B3FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000000161016C7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF0000000000000016201693FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000000162016A7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000000162016B3FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000000162016C3FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF8000000000000016301693FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000000163016A3FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000000163016B7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000000163016C3FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000161016A000000000000000000000000000000003FF0000000000000000000000000000000000000000000000161016B00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000161016C3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016900000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000162016A3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016B000000000000000000000000000000003FF0000000000000000000000000000000000000000000000162016C00000000000000003FF0000000000000000000000000000000000000000000003FF000000000000001630169000000000000000000000000000000003FF0000000000000000000000000000000000000000000000163016A00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000163016B3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000163016C000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x02007FF8000000000000"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x02010178037FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02010178033FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x02020178030179057FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x02020178030179053FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x0203017803017905017A077FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A073FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x010101780301617FF800000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x010101780301613FF00000000000000162000000000000000001630000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x010201780179060161036261723FF0000000000000016103666F6F7FF80000000000000162036261727FF8000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x010301780179017A1801610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B7FF8000000000000016103626172016C3FF0000000000000016103666F6F01697FF8000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C7FF800000000000001620362617201697FF8000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C7FF8000000000000016203666F6F01693FF0000000000000016203666F6F016A7FF8000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF000000000000001630362617201693FF0000000000000016303626172016A7FF8000000000000016303626172016B3FF0000000000000016303626172016C3FF0000000000000016303666F6F01693FF0000000000000016303666F6F016A3FF0000000000000016303666F6F016B7FF8000000000000016303666F6F016C3FF0000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B3FF0000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C3FF000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B0000000000000000016203666F6F016C000000000000000001630362617201690000000000000000016303626172016A3FF0000000000000016303626172016B0000000000000000016303626172016C0000000000000000016303666F6F01690000000000000000016303666F6F016A0000000000000000016303666F6F016B3FF0000000000000016303666F6F016C0000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF000000000000003666F6F7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF0000000000000"},"result":{"expect":"0x0301017902017803017A070203626172000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000000000000000000"}} +{"expression":"map(a,f(a)(isNan(a)))","inputs":{"a":"0x03020178017A010179050C016101697FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000000161016A3FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000000161016B3FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000000161016C7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF0000000000000016201693FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000000162016A7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000000162016B3FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000000162016C3FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF8000000000000016301693FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF00000000000000163016A3FF00000000000007FF80000000000003FF00000000000003FF00000000000007FF80000000000000163016B7FF80000000000003FF00000000000003FF00000000000007FF80000000000003FF00000000000000163016C3FF00000000000003FF00000000000007FF80000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000161016A000000000000000000000000000000003FF0000000000000000000000000000000000000000000000161016B00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000161016C3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016900000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000162016A3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016B000000000000000000000000000000003FF0000000000000000000000000000000000000000000000162016C00000000000000003FF0000000000000000000000000000000000000000000003FF000000000000001630169000000000000000000000000000000003FF0000000000000000000000000000000000000000000000163016A00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000163016B3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000163016C000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x0200BFFE666666666666"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x0201017803BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x0202017803017905BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000"},"result":{"expect":"0x0202017803017905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x0203017803017905017A07BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"},"result":{"expect":"0x0203017803017905017A07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x01010178030161BFFE6666666666660162BFFCCCCCCCCCCCCD0163BFFB333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x01020178017906016103626172BFFCCCCCCCCCCCCD016103666F6FBFFE666666666666016203626172BFF999999999999A016203666F6FBFFB333333333333016303626172BFF6666666666666016303666F6FBFF8000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x010301780179017A180161036261720169BFF8000000000000016103626172016ABFF6666666666666016103626172016BBFF4CCCCCCCCCCCD016103626172016CBFF3333333333333016103666F6F0169BFFE666666666666016103666F6F016ABFFCCCCCCCCCCCCD016103666F6F016BBFFB333333333333016103666F6F016CBFF999999999999A0162036261720169BFE6666666666666016203626172016ABFE3333333333334016203626172016BBFE0000000000000016203626172016CBFD9999999999998016203666F6F0169BFF199999999999A016203666F6F016ABFF0000000000000016203666F6F016BBFECCCCCCCCCCCCC016203666F6F016CBFE999999999999A01630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F0169BFD3333333333334016303666F6F016ABFC9999999999998016303666F6F016BBFB99999999999A0016303666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201690000000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C000000000000000001630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F01690000000000000000016303666F6F016A0000000000000000016303666F6F016B0000000000000000016303666F6F016C0000000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x0301017902017803017A070203626172BFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE33333333333343FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6FBFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"}} +{"expression":"relu(a)","inputs":{"a":"0x03020178017A010179050C01610169BFFE666666666666BFF8000000000000BFF199999999999ABFE6666666666666BFD33333333333340161016ABFFCCCCCCCCCCCCDBFF6666666666666BFF0000000000000BFE3333333333334BFC99999999999980161016BBFFB333333333333BFF4CCCCCCCCCCCDBFECCCCCCCCCCCCCBFE0000000000000BFB99999999999A00161016CBFF999999999999ABFF3333333333333BFE999999999999ABFD99999999999980000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"},"result":{"expect":"0x03020178017A010179050C01610169000000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C00000000000000000000000000000000000000000000000000000000000000000000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x0200BFFE666666666666"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x0201017803BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x0202017803017905BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000"},"result":{"expect":"0x0202017803017905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x0203017803017905017A07BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"},"result":{"expect":"0x0203017803017905017A07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x01010178030161BFFE6666666666660162BFFCCCCCCCCCCCCD0163BFFB333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x01020178017906016103626172BFFCCCCCCCCCCCCD016103666F6FBFFE666666666666016203626172BFF999999999999A016203666F6FBFFB333333333333016303626172BFF6666666666666016303666F6FBFF8000000000000"},"result":{"expect":"0x010201780179060161036261720000000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F00000000000000000163036261720000000000000000016303666F6F0000000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x010301780179017A180161036261720169BFF8000000000000016103626172016ABFF6666666666666016103626172016BBFF4CCCCCCCCCCCD016103626172016CBFF3333333333333016103666F6F0169BFFE666666666666016103666F6F016ABFFCCCCCCCCCCCCD016103666F6F016BBFFB333333333333016103666F6F016CBFF999999999999A0162036261720169BFE6666666666666016203626172016ABFE3333333333334016203626172016BBFE0000000000000016203626172016CBFD9999999999998016203666F6F0169BFF199999999999A016203666F6F016ABFF0000000000000016203666F6F016BBFECCCCCCCCCCCCC016203666F6F016CBFE999999999999A01630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F0169BFD3333333333334016303666F6F016ABFC9999999999998016303666F6F016BBFB99999999999A0016303666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201690000000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C000000000000000001630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F01690000000000000000016303666F6F016A0000000000000000016303666F6F016B0000000000000000016303666F6F016C0000000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x0301017902017803017A070203626172BFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE33333333333343FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6FBFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"}} +{"expression":"map(a,f(a)(relu(a)))","inputs":{"a":"0x03020178017A010179050C01610169BFFE666666666666BFF8000000000000BFF199999999999ABFE6666666666666BFD33333333333340161016ABFFCCCCCCCCCCCCDBFF6666666666666BFF0000000000000BFE3333333333334BFC99999999999980161016BBFFB333333333333BFF4CCCCCCCCCCCDBFECCCCCCCCCCCCCBFE0000000000000BFB99999999999A00161016CBFF999999999999ABFF3333333333333BFE999999999999ABFD99999999999980000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"},"result":{"expect":"0x03020178017A010179050C01610169000000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C00000000000000000000000000000000000000000000000000000000000000000000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x0200BFFE666666666666"},"result":{"expect":"0x02003FC0A764FD2927E7"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x0201017803BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333"},"result":{"expect":"0x02010178033FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x0202017803017905BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000"},"result":{"expect":"0x02020178030179053FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E3FC5806BEB16EB7F3FC759B8355A1BB03FC95209D0A1A2DE3FCB69C25FE3C6883FCDA0FADA5A66093FCFF77A137CDBF93FD136561454BA863FD27FCDA8478FA33FD3D775461EDE953FD53C695ABCD7153FD6AD912C1375833FD829A0565978DE"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x0203017803017905017A07BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"},"result":{"expect":"0x0203017803017905017A073FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E3FC5806BEB16EB7F3FC759B8355A1BB03FC95209D0A1A2DE3FCB69C25FE3C6883FCDA0FADA5A66093FCFF77A137CDBF93FD136561454BA863FD27FCDA8478FA33FD3D775461EDE953FD53C695ABCD7153FD6AD912C1375833FD829A0565978DE3FD9AF19F3D3169C3FDB3C5574372AEB3FDCCF8510D417DA3FDE66BDB1ACA0903FE00000000000003FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8A3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667F3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9C3FEDFC1F4CE6E8223FEE2A667D67D08C3FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FB3FEF0FDFCBF19A933FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF3FEF925599378CD23FEF9CA4D40C82163FEFA5FEB616FE8F3FEFAE798F0E40823FEFB629BE21D26E3FEFBD21D8FB11A83FEFC372D07518CD3FEFC92C130538E23FEFCE5BACD8BFA43FEFD30E65B4D32F3FEFD74FDCAB1CF83FEFDB2AA1BA3C6B3FEFDEA84D73D7203FEFE1D196C3E1BA3FEFE4AE66F5A36A3FEFE745EC1330753FEFE99EA9BBCE223FEFEBBE888D05813FEFEDAAE43934F83FEFEF68986548923FEFF0FC0C65F7393FEFF2693DF385C93FEFF3B3CAE9A9D03FEFF4DEFA27BE023FEFF5EDC3A4177B3FEFF6E2D7C3F19D3FEFF7C0A60819EE3FEFF889631D483C3FEFF93F0E5DE28B3FEFF9E376D1D14B3FEFFA783FB7FEAC3FEFFAFEE4A424463FEFFB78BD3AA3B93FEFFBE7009351453FEFFC4AC84B51D53FEFFCA5134D77C33FEFFCF6C857E1CB3FEFFD40B84505A23FEFFD83A01DC2373FEFFDC02AF994433FEFFDF6F3B191333FEFFE28866A604D3FEFFE5561F90733"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x01010178030161BFFE6666666666660162BFFCCCCCCCCCCCCD0163BFFB333333333333"},"result":{"expect":"0x010101780301613FC0A764FD2927E701623FC2282CFA533F4601633FC3C5848EF36C9E"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x01020178017906016103626172BFFCCCCCCCCCCCCD016103666F6FBFFE666666666666016203626172BFF999999999999A016203666F6FBFFB333333333333016303626172BFF6666666666666016303666F6FBFF8000000000000"},"result":{"expect":"0x010201780179060161036261723FC2282CFA533F46016103666F6F3FC0A764FD2927E70162036261723FC5806BEB16EB7F016203666F6F3FC3C5848EF36C9E0163036261723FC95209D0A1A2DE016303666F6F3FC759B8355A1BB0"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x010301780179017A180161036261720169BFF8000000000000016103626172016ABFF6666666666666016103626172016BBFF4CCCCCCCCCCCD016103626172016CBFF3333333333333016103666F6F0169BFFE666666666666016103666F6F016ABFFCCCCCCCCCCCCD016103666F6F016BBFFB333333333333016103666F6F016CBFF999999999999A0162036261720169BFE6666666666666016203626172016ABFE3333333333334016203626172016BBFE0000000000000016203626172016CBFD9999999999998016203666F6F0169BFF199999999999A016203666F6F016ABFF0000000000000016203666F6F016BBFECCCCCCCCCCCCC016203666F6F016CBFE999999999999A01630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F0169BFD3333333333334016303666F6F016ABFC9999999999998016303666F6F016BBFB99999999999A0016303666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FC759B8355A1BB0016103626172016A3FC95209D0A1A2DE016103626172016B3FCB69C25FE3C688016103626172016C3FCDA0FADA5A6609016103666F6F01693FC0A764FD2927E7016103666F6F016A3FC2282CFA533F46016103666F6F016B3FC3C5848EF36C9E016103666F6F016C3FC5806BEB16EB7F01620362617201693FD53C695ABCD715016203626172016A3FD6AD912C137583016203626172016B3FD829A0565978DE016203626172016C3FD9AF19F3D3169C016203666F6F01693FCFF77A137CDBF9016203666F6F016A3FD136561454BA86016203666F6F016B3FD27FCDA8478FA3016203666F6F016C3FD3D775461EDE9501630362617201693FE0CCA12729AFB8016303626172016A3FE1983D7795F414016303626172016B3FE261D545E46A8A016303626172016C3FE32873061674B2016303666F6F01693FDB3C5574372AEB016303666F6F016A3FDCCF8510D417DA016303666F6F016B3FDE66BDB1ACA090016303666F6F016C3FE0000000000000"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x0301017902017803017A070203626172BFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE33333333333343FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6FBFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FCDA0FADA5A66093FCFF77A137CDBF93FD136561454BA863FD27FCDA8478FA33FD3D775461EDE953FD53C695ABCD7153FD6AD912C1375833FE1983D7795F4143FE261D545E46A8A3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF120203666F6F3FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E3FC5806BEB16EB7F3FC759B8355A1BB03FC95209D0A1A2DE3FCB69C25FE3C6883FD829A0565978DE3FD9AF19F3D3169C3FDB3C5574372AEB3FDCCF8510D417DA3FDE66BDB1ACA0903FE00000000000003FE0CCA12729AFB83FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667F3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A97914"}} +{"expression":"sigmoid(a)","inputs":{"a":"0x03020178017A010179050C01610169BFFE666666666666BFF8000000000000BFF199999999999ABFE6666666666666BFD33333333333340161016ABFFCCCCCCCCCCCCDBFF6666666666666BFF0000000000000BFE3333333333334BFC99999999999980161016BBFFB333333333333BFF4CCCCCCCCCCCDBFECCCCCCCCCCCCCBFE0000000000000BFB99999999999A00161016CBFF999999999999ABFF3333333333333BFE999999999999ABFD99999999999980000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FC0A764FD2927E73FC759B8355A1BB03FCFF77A137CDBF93FD53C695ABCD7153FDB3C5574372AEB0161016A3FC2282CFA533F463FC95209D0A1A2DE3FD136561454BA863FD6AD912C1375833FDCCF8510D417DA0161016B3FC3C5848EF36C9E3FCB69C25FE3C6883FD27FCDA8478FA33FD829A0565978DE3FDE66BDB1ACA0900161016C3FC5806BEB16EB7F3FCDA0FADA5A66093FD3D775461EDE953FD9AF19F3D3169C3FE0000000000000016201693FE0CCA12729AFB83FE3EB2FD4D343913FE6C0192BDC382E3FE9258F68070E5E3FEB0E9EDC4324D80162016A3FE1983D7795F4143FE4A93769F6453E3FE764D4F5D5A2BD3FE9AB7D8BD797483FEB75F4C16B302F0162016B3FE261D545E46A8A3FE561CB52A194763FE802217B20C9023FEA2991F2A979143FEBD626C0B5B6060162016C3FE32873061674B23FE614455CF090B63FE897C14969667F3FEA9FE5053A45203FEC2F7D5A8A79C9016301693FEC8247621BC0C83FED9291DDB596F83FEE54C20D06AA953FEEDC99CF2C9D4D3FEF3A59F801F5820163016A3FECCED80FEF12023FEDC99E39374D9C3FEE7B7CBC36FABD3FEEF76F8069F3FB3FEF4CBFA61DE6A30163016B3FED15854CD0D92B3FEDFC1F4CE6E8223FEE9EDD88B9D8AF3FEF0FDFCBF19A933FEF5D77DCF758080163016C3FED56A636946E583FEE2A667D67D08C3FEEBF2786AED6983FEF261E0FCD4B463FEF6CA82F0DE1EA"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x0200BFFE666666666666"},"result":{"expect":"0x02003FC0A764FD2927E7"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x0201017803BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333"},"result":{"expect":"0x02010178033FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x0202017803017905BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000"},"result":{"expect":"0x02020178030179053FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E3FC5806BEB16EB7F3FC759B8355A1BB03FC95209D0A1A2DE3FCB69C25FE3C6883FCDA0FADA5A66093FCFF77A137CDBF93FD136561454BA863FD27FCDA8478FA33FD3D775461EDE953FD53C695ABCD7153FD6AD912C1375833FD829A0565978DE"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x0203017803017905017A07BFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE3333333333334BFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A4002666666666666400333333333333440040000000000004004CCCCCCCCCCCC400599999999999A4006666666666666400733333333333440080000000000004008CCCCCCCCCCCC400999999999999A400A666666666666400B333333333334400C000000000000400CCCCCCCCCCCCC400D99999999999A400E666666666666400F333333333334401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCC4019333333333334401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCC401B333333333334401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCC401D333333333334401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCC401F333333333334401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD4021000000000000"},"result":{"expect":"0x0203017803017905017A073FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E3FC5806BEB16EB7F3FC759B8355A1BB03FC95209D0A1A2DE3FCB69C25FE3C6883FCDA0FADA5A66093FCFF77A137CDBF93FD136561454BA863FD27FCDA8478FA33FD3D775461EDE953FD53C695ABCD7153FD6AD912C1375833FD829A0565978DE3FD9AF19F3D3169C3FDB3C5574372AEB3FDCCF8510D417DA3FDE66BDB1ACA0903FE00000000000003FE0CCA12729AFB83FE1983D7795F4143FE261D545E46A8A3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667F3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A979143FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF12023FED15854CD0D92B3FED56A636946E583FED9291DDB596F83FEDC99E39374D9C3FEDFC1F4CE6E8223FEE2A667D67D08C3FEE54C20D06AA953FEE7B7CBC36FABD3FEE9EDD88B9D8AF3FEEBF2786AED6983FEEDC99CF2C9D4D3FEEF76F8069F3FB3FEF0FDFCBF19A933FEF261E0FCD4B463FEF3A59F801F5823FEF4CBFA61DE6A33FEF5D77DCF758083FEF6CA82F0DE1EA3FEF7A732E4B69463FEF86F89C2183AF3FEF925599378CD23FEF9CA4D40C82163FEFA5FEB616FE8F3FEFAE798F0E40823FEFB629BE21D26E3FEFBD21D8FB11A83FEFC372D07518CD3FEFC92C130538E23FEFCE5BACD8BFA43FEFD30E65B4D32F3FEFD74FDCAB1CF83FEFDB2AA1BA3C6B3FEFDEA84D73D7203FEFE1D196C3E1BA3FEFE4AE66F5A36A3FEFE745EC1330753FEFE99EA9BBCE223FEFEBBE888D05813FEFEDAAE43934F83FEFEF68986548923FEFF0FC0C65F7393FEFF2693DF385C93FEFF3B3CAE9A9D03FEFF4DEFA27BE023FEFF5EDC3A4177B3FEFF6E2D7C3F19D3FEFF7C0A60819EE3FEFF889631D483C3FEFF93F0E5DE28B3FEFF9E376D1D14B3FEFFA783FB7FEAC3FEFFAFEE4A424463FEFFB78BD3AA3B93FEFFBE7009351453FEFFC4AC84B51D53FEFFCA5134D77C33FEFFCF6C857E1CB3FEFFD40B84505A23FEFFD83A01DC2373FEFFDC02AF994433FEFFDF6F3B191333FEFFE28866A604D3FEFFE5561F90733"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x01010178030161BFFE6666666666660162BFFCCCCCCCCCCCCD0163BFFB333333333333"},"result":{"expect":"0x010101780301613FC0A764FD2927E701623FC2282CFA533F4601633FC3C5848EF36C9E"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x01020178017906016103626172BFFCCCCCCCCCCCCD016103666F6FBFFE666666666666016203626172BFF999999999999A016203666F6FBFFB333333333333016303626172BFF6666666666666016303666F6FBFF8000000000000"},"result":{"expect":"0x010201780179060161036261723FC2282CFA533F46016103666F6F3FC0A764FD2927E70162036261723FC5806BEB16EB7F016203666F6F3FC3C5848EF36C9E0163036261723FC95209D0A1A2DE016303666F6F3FC759B8355A1BB0"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x010301780179017A180161036261720169BFF8000000000000016103626172016ABFF6666666666666016103626172016BBFF4CCCCCCCCCCCD016103626172016CBFF3333333333333016103666F6F0169BFFE666666666666016103666F6F016ABFFCCCCCCCCCCCCD016103666F6F016BBFFB333333333333016103666F6F016CBFF999999999999A0162036261720169BFE6666666666666016203626172016ABFE3333333333334016203626172016BBFE0000000000000016203626172016CBFD9999999999998016203666F6F0169BFF199999999999A016203666F6F016ABFF0000000000000016203666F6F016BBFECCCCCCCCCCCCC016203666F6F016CBFE999999999999A01630362617201693FB99999999999A0016303626172016A3FC99999999999A0016303626172016B3FD3333333333330016303626172016C3FD9999999999998016303666F6F0169BFD3333333333334016303666F6F016ABFC9999999999998016303666F6F016BBFB99999999999A0016303666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201693FC759B8355A1BB0016103626172016A3FC95209D0A1A2DE016103626172016B3FCB69C25FE3C688016103626172016C3FCDA0FADA5A6609016103666F6F01693FC0A764FD2927E7016103666F6F016A3FC2282CFA533F46016103666F6F016B3FC3C5848EF36C9E016103666F6F016C3FC5806BEB16EB7F01620362617201693FD53C695ABCD715016203626172016A3FD6AD912C137583016203626172016B3FD829A0565978DE016203626172016C3FD9AF19F3D3169C016203666F6F01693FCFF77A137CDBF9016203666F6F016A3FD136561454BA86016203666F6F016B3FD27FCDA8478FA3016203666F6F016C3FD3D775461EDE9501630362617201693FE0CCA12729AFB8016303626172016A3FE1983D7795F414016303626172016B3FE261D545E46A8A016303626172016C3FE32873061674B2016303666F6F01693FDB3C5574372AEB016303666F6F016A3FDCCF8510D417DA016303666F6F016B3FDE66BDB1ACA090016303666F6F016C3FE0000000000000"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x0301017902017803017A070203626172BFF3333333333333BFF199999999999ABFF0000000000000BFECCCCCCCCCCCCCBFE999999999999ABFE6666666666666BFE33333333333343FC99999999999A03FD33333333333303FD99999999999983FE00000000000003FE33333333333343FE66666666666683FE99999999999983FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE66666666666640000000000000004000CCCCCCCCCCCC400199999999999A03666F6FBFFE666666666666BFFCCCCCCCCCCCCDBFFB333333333333BFF999999999999ABFF8000000000000BFF6666666666666BFF4CCCCCCCCCCCDBFE0000000000000BFD9999999999998BFD3333333333334BFC9999999999998BFB99999999999A000000000000000003FB99999999999A03FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333343FF4CCCCCCCCCCCC3FF66666666666663FF8000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FCDA0FADA5A66093FCFF77A137CDBF93FD136561454BA863FD27FCDA8478FA33FD3D775461EDE953FD53C695ABCD7153FD6AD912C1375833FE1983D7795F4143FE261D545E46A8A3FE32873061674B23FE3EB2FD4D343913FE4A93769F6453E3FE561CB52A194763FE614455CF090B63FEA9FE5053A45203FEB0E9EDC4324D83FEB75F4C16B302F3FEBD626C0B5B6063FEC2F7D5A8A79C93FEC8247621BC0C83FECCED80FEF120203666F6F3FC0A764FD2927E73FC2282CFA533F463FC3C5848EF36C9E3FC5806BEB16EB7F3FC759B8355A1BB03FC95209D0A1A2DE3FCB69C25FE3C6883FD829A0565978DE3FD9AF19F3D3169C3FDB3C5574372AEB3FDCCF8510D417DA3FDE66BDB1ACA0903FE00000000000003FE0CCA12729AFB83FE6C0192BDC382E3FE764D4F5D5A2BD3FE802217B20C9023FE897C14969667F3FE9258F68070E5E3FE9AB7D8BD797483FEA2991F2A97914"}} +{"expression":"map(a,f(a)(sigmoid(a)))","inputs":{"a":"0x03020178017A010179050C01610169BFFE666666666666BFF8000000000000BFF199999999999ABFE6666666666666BFD33333333333340161016ABFFCCCCCCCCCCCCDBFF6666666666666BFF0000000000000BFE3333333333334BFC99999999999980161016BBFFB333333333333BFF4CCCCCCCCCCCDBFECCCCCCCCCCCCCBFE0000000000000BFB99999999999A00161016CBFF999999999999ABFF3333333333333BFE999999999999ABFD99999999999980000000000000000016201693FB99999999999A03FE00000000000003FECCCCCCCCCCCCC3FF4CCCCCCCCCCCC3FFB3333333333340162016A3FC99999999999A03FE33333333333343FF00000000000003FF66666666666663FFCCCCCCCCCCCCC0162016B3FD33333333333303FE66666666666683FF199999999999A3FF80000000000003FFE6666666666660162016C3FD99999999999983FE99999999999983FF33333333333343FF999999999999A4000000000000000016301694000CCCCCCCCCCCC40040000000000004007333333333334400A666666666666400D99999999999A0163016A400199999999999A4004CCCCCCCCCCCC4008000000000000400B333333333334400E6666666666660163016B4002666666666666400599999999999A4008CCCCCCCCCCCC400C000000000000400F3333333333340163016C40033333333333344006666666666666400999999999999A400CCCCCCCCCCCCC4010000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FC0A764FD2927E73FC759B8355A1BB03FCFF77A137CDBF93FD53C695ABCD7153FDB3C5574372AEB0161016A3FC2282CFA533F463FC95209D0A1A2DE3FD136561454BA863FD6AD912C1375833FDCCF8510D417DA0161016B3FC3C5848EF36C9E3FCB69C25FE3C6883FD27FCDA8478FA33FD829A0565978DE3FDE66BDB1ACA0900161016C3FC5806BEB16EB7F3FCDA0FADA5A66093FD3D775461EDE953FD9AF19F3D3169C3FE0000000000000016201693FE0CCA12729AFB83FE3EB2FD4D343913FE6C0192BDC382E3FE9258F68070E5E3FEB0E9EDC4324D80162016A3FE1983D7795F4143FE4A93769F6453E3FE764D4F5D5A2BD3FE9AB7D8BD797483FEB75F4C16B302F0162016B3FE261D545E46A8A3FE561CB52A194763FE802217B20C9023FEA2991F2A979143FEBD626C0B5B6060162016C3FE32873061674B23FE614455CF090B63FE897C14969667F3FEA9FE5053A45203FEC2F7D5A8A79C9016301693FEC8247621BC0C83FED9291DDB596F83FEE54C20D06AA953FEEDC99CF2C9D4D3FEF3A59F801F5820163016A3FECCED80FEF12023FEDC99E39374D9C3FEE7B7CBC36FABD3FEEF76F8069F3FB3FEF4CBFA61DE6A30163016B3FED15854CD0D92B3FEDFC1F4CE6E8223FEE9EDD88B9D8AF3FEF0FDFCBF19A933FEF5D77DCF758080163016C3FED56A636946E583FEE2A667D67D08C3FEEBF2786AED6983FEF261E0FCD4B463FEF6CA82F0DE1EA"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x02003FB999999999999A"},"result":{"expect":"0x0200400199999999999A"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803400199999999999A40033333333333334004CCCCCCCCCCCD"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000"},"result":{"expect":"0x0202017803017905400199999999999A40033333333333334004CCCCCCCCCCCD40066666666666664008000000000000400999999999999A400B333333333333400CCCCCCCCCCCCD400E66666666666640100000000000004010CCCCCCCCCCCD401199999999999A401266666666666640133333333333334014000000000000"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A401400000000000040146666666666664014CCCCCCCCCCCD4015333333333333401599999999999A401600000000000040166666666666664016CCCCCCCCCCCD4017333333333333401799999999999A401800000000000040186666666666664018CCCCCCCCCCCD4019333333333333401999999999999A401A000000000000401A666666666666401ACCCCCCCCCCCD401B333333333333401B99999999999A401C000000000000401C666666666666401CCCCCCCCCCCCD401D333333333333401D99999999999A401E000000000000401E666666666666401ECCCCCCCCCCCD401F333333333333401F99999999999A402000000000000040203333333333334020666666666666402099999999999A4020CCCCCCCCCCCD402100000000000040213333333333334021666666666666402199999999999A4021CCCCCCCCCCCD402200000000000040223333333333334022666666666666402299999999999A4022CCCCCCCCCCCD402300000000000040233333333333334023666666666666402399999999999A4023CCCCCCCCCCCD402400000000000040243333333333334024666666666666402499999999999A4024CCCCCCCCCCCD4025000000000000"},"result":{"expect":"0x0203017803017905017A07400199999999999A40033333333333334004CCCCCCCCCCCD40066666666666664008000000000000400999999999999A400B333333333333400CCCCCCCCCCCCD400E66666666666640100000000000004010CCCCCCCCCCCD401199999999999A4012666666666666401333333333333340140000000000004014CCCCCCCCCCCD401599999999999A4016666666666666401733333333333340180000000000004018CCCCCCCCCCCD401999999999999A401A666666666666401B333333333333401C000000000000401CCCCCCCCCCCCD401D99999999999A401E666666666666401F333333333333402000000000000040206666666666664020CCCCCCCCCCCD4021333333333333402199999999999A402200000000000040226666666666664022CCCCCCCCCCCD4023333333333333402399999999999A402400000000000040246666666666664024CCCCCCCCCCCD4025333333333333402599999999999A402600000000000040266666666666664026CCCCCCCCCCCD4027333333333333402799999999999A402800000000000040286666666666664028CCCCCCCCCCCD4029333333333333402999999999999A402A000000000000402A666666666666402ACCCCCCCCCCCD402B333333333333402B99999999999A402C000000000000402C666666666666402CCCCCCCCCCCCD402D333333333333402D99999999999A402E000000000000402E666666666666402ECCCCCCCCCCCD402F333333333333402F99999999999A403000000000000040303333333333334030666666666666403099999999999A4030CCCCCCCCCCCD403100000000000040313333333333334031666666666666403199999999999A4031CCCCCCCCCCCD403200000000000040323333333333334032666666666666403299999999999A4032CCCCCCCCCCCD403300000000000040333333333333334033666666666666403399999999999A4033CCCCCCCCCCCD403400000000000040343333333333334034666666666666403499999999999A4034CCCCCCCCCCCD403500000000000040353333333333334035666666666666403599999999999A4035CCCCCCCCCCCD403600000000000040363333333333334036666666666666403699999999999A4036CCCCCCCCCCCD4037000000000000"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x01010178030161400199999999999A0162400333333333333301634004CCCCCCCCCCCD"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179060161036261724003333333333333016103666F6F400199999999999A0162036261724006666666666666016203666F6F4004CCCCCCCCCCCD016303626172400999999999999A016303666F6F4008000000000000"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x010301780179017A1801610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FF4CCCCCCCCCCCD016203626172016A3FF6666666666666016203626172016B3FF8000000000000016203626172016C3FF999999999999A016203666F6F01693FECCCCCCCCCCCCD016203666F6F016A3FF0000000000000016203666F6F016B3FF199999999999A016203666F6F016C3FF333333333333301630362617201694000CCCCCCCCCCCD016303626172016A400199999999999A016303626172016B4002666666666666016303626172016C4003333333333333016303666F6F01693FFB333333333333016303666F6F016A3FFCCCCCCCCCCCCD016303666F6F016B3FFE666666666666016303666F6F016C4000000000000000"},"result":{"expect":"0x010301780179017A1801610362617201694008000000000000016103626172016A400999999999999A016103626172016B400B333333333333016103626172016C400CCCCCCCCCCCCD016103666F6F0169400199999999999A016103666F6F016A4003333333333333016103666F6F016B4004CCCCCCCCCCCD016103666F6F016C400666666666666601620362617201694012666666666666016203626172016A4013333333333333016203626172016B4014000000000000016203626172016C4014CCCCCCCCCCCD016203666F6F0169400E666666666666016203666F6F016A4010000000000000016203666F6F016B4010CCCCCCCCCCCD016203666F6F016C401199999999999A01630362617201694018CCCCCCCCCCCD016303626172016A401999999999999A016303626172016B401A666666666666016303626172016C401B333333333333016303666F6F0169401599999999999A016303666F6F016A4016666666666666016303666F6F016B4017333333333333016303666F6F016C4018000000000000"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400CCCCCCCCCCCCD400D99999999999A400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD03666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0301017902017803017A070203626172400CCCCCCCCCCCCD400E66666666666640100000000000004010CCCCCCCCCCCD401199999999999A40126666666666664013333333333333401999999999999A401A666666666666401B333333333333401C000000000000401CCCCCCCCCCCCD401D99999999999A401E66666666666640226666666666664022CCCCCCCCCCCD4023333333333333402399999999999A402400000000000040246666666666664024CCCCCCCCCCCD03666F6F400199999999999A40033333333333334004CCCCCCCCCCCD40066666666666664008000000000000400999999999999A400B33333333333340140000000000004014CCCCCCCCCCCD401599999999999A4016666666666666401733333333333340180000000000004018CCCCCCCCCCCD401F333333333333402000000000000040206666666666664020CCCCCCCCCCCD4021333333333333402199999999999A4022000000000000"}} +{"expression":"map(a,f(a)((a+1)*2))","inputs":{"a":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201694000CCCCCCCCCCCD40040000000000004007333333333333400A666666666666400D99999999999A0162016A400199999999999A4004CCCCCCCCCCCD4008000000000000400B333333333333400E6666666666660162016B4002666666666666400599999999999A4008CCCCCCCCCCCD400C000000000000400F3333333333330162016C40033333333333334006666666666666400999999999999A400CCCCCCCCCCCCD40100000000000000163016940106666666666664012000000000000401399999999999A40153333333333334016CCCCCCCCCCCD0163016A4010CCCCCCCCCCCD40126666666666664014000000000000401599999999999A40173333333333330163016B40113333333333334012CCCCCCCCCCCD40146666666666664016000000000000401799999999999A0163016C401199999999999A40133333333333334014CCCCCCCCCCCD40166666666666664018000000000000"},"result":{"expect":"0x03020178017A010179050C01610169400199999999999A4008000000000000400E6666666666664012666666666666401599999999999A0161016A4003333333333333400999999999999A4010000000000000401333333333333340166666666666660161016B4004CCCCCCCCCCCD400B3333333333334010CCCCCCCCCCCD401400000000000040173333333333330161016C4006666666666666400CCCCCCCCCCCCD401199999999999A4014CCCCCCCCCCCD4018000000000000016201694018CCCCCCCCCCCD401C000000000000401F33333333333340213333333333334022CCCCCCCCCCCD0162016A401999999999999A401CCCCCCCCCCCCD4020000000000000402199999999999A40233333333333330162016B401A666666666666401D99999999999A40206666666666664022000000000000402399999999999A0162016C401B333333333333401E6666666666664020CCCCCCCCCCCD402266666666666640240000000000000163016940246666666666664026000000000000402799999999999A4029333333333333402ACCCCCCCCCCCD0163016A4024CCCCCCCCCCCD40266666666666664028000000000000402999999999999A402B3333333333330163016B40253333333333334026CCCCCCCCCCCD4028666666666666402A000000000000402B99999999999A0163016C402599999999999A40273333333333334028CCCCCCCCCCCD402A666666666666402C000000000000"}} +{"expression":"a+b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FC999999999999A"}} +{"expression":"a+b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FC999999999999A3FD999999999999A3FE33333333333333FE999999999999A3FF0000000000000"}} +{"expression":"a+b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FC999999999999A3FD999999999999A3FE3333333333333"}} +{"expression":"a+b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FD33333333333343FD999999999999A3FE00000000000003FE33333333333343FE66666666666663FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FE00000000000003FE33333333333343FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000"}} +{"expression":"a+b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FE999999999999A3FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333333FF66666666666673FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD40000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004CCCCCCCCCCCD400599999999999A400666666666666640073333333333334008000000000000"}} +{"expression":"a+b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FC999999999999A3FD999999999999A3FE33333333333333FE999999999999A3FF199999999999A3FF4CCCCCCCCCCCC3FF80000000000003FFB3333333333344000000000000000400199999999999A40033333333333344004CCCCCCCCCCCC"}} +{"expression":"a+b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE99999999999993FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF99999999999993FFCCCCCCCCCCCCD3FFE66666666666740000000000000004000CCCCCCCCCCCD4001999999999999400266666666666640033333333333334004CCCCCCCCCCCD40059999999999994006666666666666400733333333333340080000000000004008CCCCCCCCCCCD4009999999999999400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F33333333333340100000000000003FE66666666666663FE999999999999A3FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCC3FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCC4002666666666666400333333333333440040000000000004004CCCCCCCCCCCD400599999999999A400666666666666640073333333333344008CCCCCCCCCCCD4009999999999999400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D999999999999400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A40120000000000003FF33333333333343FF4CCCCCCCCCCCD3FF66666666666673FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCD40000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCC4006666666666666400733333333333440080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333334400CCCCCCCCCCCCD400D999999999999400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCC401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A4014000000000000"}} +{"expression":"a+b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FC999999999999A01623FD999999999999A01633FE3333333333333"}} +{"expression":"a+b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FC999999999999A01623FD999999999999A"}} +{"expression":"a+b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FD333333333333401610362617A3FD999999999999A016103666F6F3FC999999999999A0162036261723FD999999999999A01620362617A3FE0000000000000016203666F6F3FD33333333333340163036261723FE000000000000001630362617A3FE3333333333333016303666F6F3FD999999999999A"}} +{"expression":"a+b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FD333333333333401610362617A3FD999999999999A016103666F6F3FC999999999999A0162036261723FE666666666666601620362617A3FE999999999999A016203666F6F3FE33333333333340163036261723FF199999999999A01630362617A3FF3333333333333016303666F6F3FF0000000000000"}} +{"expression":"a+b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FD999999999999A016103666F6F3FC999999999999A0162036261723FECCCCCCCCCCCCD016203666F6F3FE6666666666666"}} +{"expression":"a+b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FE6666666666666016103626172016A3FE999999999999A016103626172016B3FECCCCCCCCCCCCC016103626172016C3FF0000000000000016103666F6F01693FC999999999999A016103666F6F016A3FD3333333333334016103666F6F016B3FD999999999999A016103666F6F016C3FE000000000000001620362617201693FF0000000000000016203626172016A3FF199999999999A016203626172016B3FF3333333333333016203626172016C3FF4CCCCCCCCCCCD016203666F6F01693FE0000000000000016203666F6F016A3FE3333333333334016203666F6F016B3FE6666666666666016203666F6F016C3FE999999999999A"}} +{"expression":"a+b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF99999999999993FF33333333333343FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE666666666666400000000000000003666F6F3FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE99999999999993FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCC3FF00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF3333333333333"}} +{"expression":"a+b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FC999999999999A3FE66666666666663FF33333333333333FFB333333333334400199999999999A0161016A3FD33333333333343FE999999999999A3FF4CCCCCCCCCCCD3FFCCCCCCCCCCCCC40026666666666660161016B3FD999999999999A3FECCCCCCCCCCCCC3FF66666666666673FFE66666666666640033333333333330161016C3FE00000000000003FF00000000000003FF800000000000040000000000000004004000000000000016201693FE66666666666663FF33333333333333FFB333333333334400199999999999A400599999999999A0162016A3FE999999999999A3FF4CCCCCCCCCCCC3FFCCCCCCCCCCCCD400266666666666640066666666666660162016B3FECCCCCCCCCCCCC3FF66666666666663FFE666666666667400333333333333340073333333333330162016C3FF00000000000003FF8000000000000400000000000000040040000000000004008000000000000016301693FF33333333333343FFB333333333333400199999999999A400599999999999A400999999999999A0163016A3FF4CCCCCCCCCCCD3FFCCCCCCCCCCCCC40026666666666664006666666666666400A6666666666660163016B3FF66666666666673FFE66666666666640033333333333344007333333333333400B3333333333330163016C3FF8000000000000400000000000000040040000000000004008000000000000400C000000000000"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FC999999999999A"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FC999999999999A3FD999999999999A3FE33333333333333FE999999999999A3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FC999999999999A3FD999999999999A3FE3333333333333"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FD33333333333343FD999999999999A3FE00000000000003FE33333333333343FE66666666666663FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FE00000000000003FE33333333333343FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FE999999999999A3FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333333FF66666666666673FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD40000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004CCCCCCCCCCCD400599999999999A400666666666666640073333333333334008000000000000"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FC999999999999A3FD999999999999A3FE33333333333333FE999999999999A3FF199999999999A3FF4CCCCCCCCCCCC3FF80000000000003FFB3333333333344000000000000000400199999999999A40033333333333344004CCCCCCCCCCCC"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE99999999999993FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF99999999999993FFCCCCCCCCCCCCD3FFE66666666666740000000000000004000CCCCCCCCCCCD4001999999999999400266666666666640033333333333334004CCCCCCCCCCCD40059999999999994006666666666666400733333333333340080000000000004008CCCCCCCCCCCD4009999999999999400B333333333333400C000000000000400CCCCCCCCCCCCD400D99999999999A400E666666666666400F33333333333340100000000000003FE66666666666663FE999999999999A3FECCCCCCCCCCCCC3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCC3FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCC4002666666666666400333333333333440040000000000004004CCCCCCCCCCCD400599999999999A400666666666666640073333333333344008CCCCCCCCCCCD4009999999999999400A666666666666400B333333333333400C000000000000400CCCCCCCCCCCCD400D999999999999400F333333333333401000000000000040106666666666664010CCCCCCCCCCCD4011333333333333401199999999999A40120000000000003FF33333333333343FF4CCCCCCCCCCCD3FF66666666666673FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCD40000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCC4006666666666666400733333333333440080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333334400CCCCCCCCCCCCD400D999999999999400E666666666666400F333333333333401000000000000040106666666666664010CCCCCCCCCCCC401199999999999A401200000000000040126666666666664012CCCCCCCCCCCD4013333333333333401399999999999A4014000000000000"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FC999999999999A01623FD999999999999A01633FE3333333333333"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FC999999999999A01623FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FD333333333333401610362617A3FD999999999999A016103666F6F3FC999999999999A0162036261723FD999999999999A01620362617A3FE0000000000000016203666F6F3FD33333333333340163036261723FE000000000000001630362617A3FE3333333333333016303666F6F3FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FD333333333333401610362617A3FD999999999999A016103666F6F3FC999999999999A0162036261723FE666666666666601620362617A3FE999999999999A016203666F6F3FE33333333333340163036261723FF199999999999A01630362617A3FF3333333333333016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FD999999999999A016103666F6F3FC999999999999A0162036261723FECCCCCCCCCCCCD016203666F6F3FE6666666666666"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FE6666666666666016103626172016A3FE999999999999A016103626172016B3FECCCCCCCCCCCCC016103626172016C3FF0000000000000016103666F6F01693FC999999999999A016103666F6F016A3FD3333333333334016103666F6F016B3FD999999999999A016103666F6F016C3FE000000000000001620362617201693FF0000000000000016203626172016A3FF199999999999A016203626172016B3FF3333333333333016203626172016C3FF4CCCCCCCCCCCD016203666F6F01693FE0000000000000016203666F6F016A3FE3333333333334016203666F6F016B3FE6666666666666016203666F6F016C3FE999999999999A"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF99999999999993FF33333333333343FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333343FFCCCCCCCCCCCCC3FFE666666666666400000000000000003666F6F3FC999999999999A3FD33333333333343FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE99999999999993FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCC3FF00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF3333333333333"}} +{"expression":"join(a,b,f(a,b)(a+b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FC999999999999A3FE66666666666663FF33333333333333FFB333333333334400199999999999A0161016A3FD33333333333343FE999999999999A3FF4CCCCCCCCCCCD3FFCCCCCCCCCCCCC40026666666666660161016B3FD999999999999A3FECCCCCCCCCCCCC3FF66666666666673FFE66666666666640033333333333330161016C3FE00000000000003FF00000000000003FF800000000000040000000000000004004000000000000016201693FE66666666666663FF33333333333333FFB333333333334400199999999999A400599999999999A0162016A3FE999999999999A3FF4CCCCCCCCCCCC3FFCCCCCCCCCCCCD400266666666666640066666666666660162016B3FECCCCCCCCCCCCC3FF66666666666663FFE666666666667400333333333333340073333333333330162016C3FF00000000000003FF8000000000000400000000000000040040000000000004008000000000000016301693FF33333333333343FFB333333333333400199999999999A400599999999999A400999999999999A0163016A3FF4CCCCCCCCCCCD3FFCCCCCCCCCCCCC40026666666666664006666666666666400A6666666666660163016B3FF66666666666673FFE66666666666640033333333333344007333333333333400B3333333333330163016C3FF8000000000000400000000000000040040000000000004008000000000000400C000000000000"}} +{"expression":"a-b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179050000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999A3FB999999999999A0000000000000000BFB9999999999998BFC999999999999ABFD33333333333333FC99999999999993FB99999999999980000000000000000BFB999999999999CBFC999999999999A3FD33333333333343FC999999999999A3FB999999999999C0000000000000000BFB99999999999983FD999999999999A3FD33333333333333FC999999999999A3FB99999999999980000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179050000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999ABFD9999999999999BFDFFFFFFFFFFFFFBFE3333333333334BFE6666666666666BFE999999999999ABFE999999999999ABFECCCCCCCCCCCCCBFF0000000000000BFF1999999999999BFF3333333333333BFF3333333333334BFF4CCCCCCCCCCCCBFF6666666666666BFF8000000000000BFF999999999999ABFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FB99999999999983FB99999999999983FB99999999999A03FB99999999999983FC999999999999C3FC99999999999983FC99999999999983FC9999999999998"}} +{"expression":"a-b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A070000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999ABFE0000000000000BFE3333333333333BFE3333333333334BFE6666666666666BFE999999999999ABFECCCCCCCCCCCCEBFF0000000000000BFF199999999999ABFF3333333333333BFF3333333333333BFF4CCCCCCCCCCCDBFF6666666666666BFF8000000000000BFF9999999999999BFFB333333333333BFFCCCCCCCCCCCCDBFFCCCCCCCCCCCCEBFFE666666666666C000000000000000C000CCCCCCCCCCCDC00199999999999AC002666666666667C003333333333333C003333333333333C004000000000000C004CCCCCCCCCCCDC00599999999999AC006666666666666C007333333333333C0080000000000003FE00000000000003FD99999999999993FD33333333333333FC99999999999983FB99999999999980000000000000000BFB9999999999998BFB99999999999A0BFC999999999999CBFD3333333333334BFD999999999999CBFE0000000000000BFE3333333333334BFE6666666666666BFE6666666666666BFE999999999999ABFECCCCCCCCCCCCCBFF0000000000000BFF1999999999999BFF3333333333333BFF4CCCCCCCCCCCDBFF4CCCCCCCCCCCEBFF6666666666666BFF8000000000000BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCEBFFE666666666666BFFE666666666666C000000000000000C000CCCCCCCCCCCDC00199999999999AC002666666666666C003333333333333C0040000000000003FF00000000000003FECCCCCCCCCCCCE3FE999999999999A3FE66666666666673FE33333333333343FE00000000000013FD999999999999C3FD99999999999983FD33333333333323FC99999999999983FB99999999999900000000000000000BFB99999999999A0BFC9999999999998BFC9999999999998BFD3333333333334BFD9999999999998BFE0000000000000BFE3333333333332BFE6666666666666BFE999999999999ABFE999999999999CBFECCCCCCCCCCCCCBFF0000000000000BFF199999999999ABFF3333333333334BFF4CCCCCCCCCCCEBFF6666666666666BFF6666666666666BFF8000000000000BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172BFB999999999999A01610362617ABFC9999999999999016103666F6F0000000000000000016203626172000000000000000001620362617ABFB9999999999998016203666F6F3FB999999999999A0163036261723FB999999999999801630362617A0000000000000000016303666F6F3FC9999999999999"}} +{"expression":"a-b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172BFB999999999999A01610362617ABFC9999999999999016103666F6F0000000000000000016203626172BFD333333333333301620362617ABFD9999999999999016203666F6FBFC999999999999A016303626172BFE000000000000001630362617ABFE3333333333334016303666F6FBFD9999999999999"}} +{"expression":"a-b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FB9999999999998016203666F6F3FB999999999999C"}} +{"expression":"a-b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A100161036261720169BFD3333333333333016103626172016ABFD9999999999999016103626172016BBFDFFFFFFFFFFFFF016103626172016CBFE3333333333334016103666F6F01690000000000000000016103666F6F016ABFB999999999999A016103666F6F016BBFC9999999999999016103666F6F016CBFD333333333333401620362617201690000000000000000016203626172016ABFB9999999999998016203626172016BBFC9999999999998016203626172016CBFD3333333333334016203666F6F01693FD3333333333334016203666F6F016A3FC999999999999A016203666F6F016B3FB999999999999C016203666F6F016C0000000000000000"}} +{"expression":"a-b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A070203626172BFE3333333333334BFE6666666666666BFE999999999999ABFECCCCCCCCCCCCEBFF0000000000000BFF199999999999ABFF3333333333333BFD999999999999ABFE0000000000000BFE3333333333333BFE6666666666667BFE9999999999999BFECCCCCCCCCCCCDBFEFFFFFFFFFFFFFBFC999999999999CBFD3333333333334BFD999999999999ABFE0000000000001BFE3333333333333BFE6666666666667BFE999999999999903666F6F0000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999ABFE0000000000000BFE33333333333333FC99999999999993FB99999999999980000000000000000BFB999999999999CBFC999999999999ABFD3333333333333BFD99999999999993FD999999999999A3FD33333333333333FC999999999999A3FB99999999999980000000000000000BFB9999999999998BFC9999999999998"}} +{"expression":"a-b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101690000000000000000BFD3333333333333BFE3333333333334BFECCCCCCCCCCCCDBFF33333333333330161016ABFB999999999999ABFD9999999999999BFE6666666666666BFEFFFFFFFFFFFFFBFF4CCCCCCCCCCCD0161016BBFC9999999999999BFDFFFFFFFFFFFFFBFE999999999999ABFF199999999999ABFF66666666666660161016CBFD3333333333334BFE3333333333334BFECCCCCCCCCCCCCBFF3333333333334BFF8000000000000016201693FE00000000000003FC9999999999998BFB9999999999998BFD999999999999ABFE66666666666660162016A3FD99999999999993FB9999999999998BFC9999999999998BFDFFFFFFFFFFFFEBFE999999999999A0162016B3FD33333333333330000000000000000BFD3333333333334BFE3333333333333BFECCCCCCCCCCCCC0162016C3FC9999999999998BFB99999999999A0BFD9999999999998BFE6666666666667BFF0000000000000016301693FF00000000000003FE66666666666663FD999999999999A3FB9999999999990BFC99999999999980163016A3FECCCCCCCCCCCCE3FE33333333333333FD33333333333340000000000000000BFD33333333333340163016B3FE999999999999A3FE00000000000003FC9999999999998BFB99999999999A0BFD99999999999980163016C3FE66666666666673FD99999999999983FB99999999999A0BFC99999999999A0BFE0000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179050000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999A3FB999999999999A0000000000000000BFB9999999999998BFC999999999999ABFD33333333333333FC99999999999993FB99999999999980000000000000000BFB999999999999CBFC999999999999A3FD33333333333343FC999999999999A3FB999999999999C0000000000000000BFB99999999999983FD999999999999A3FD33333333333333FC999999999999A3FB99999999999980000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179050000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999ABFD9999999999999BFDFFFFFFFFFFFFFBFE3333333333334BFE6666666666666BFE999999999999ABFE999999999999ABFECCCCCCCCCCCCCBFF0000000000000BFF1999999999999BFF3333333333333BFF3333333333334BFF4CCCCCCCCCCCCBFF6666666666666BFF8000000000000BFF999999999999ABFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FB99999999999983FB99999999999983FB99999999999A03FB99999999999983FC999999999999C3FC99999999999983FC99999999999983FC9999999999998"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A070000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999ABFE0000000000000BFE3333333333333BFE3333333333334BFE6666666666666BFE999999999999ABFECCCCCCCCCCCCEBFF0000000000000BFF199999999999ABFF3333333333333BFF3333333333333BFF4CCCCCCCCCCCDBFF6666666666666BFF8000000000000BFF9999999999999BFFB333333333333BFFCCCCCCCCCCCCDBFFCCCCCCCCCCCCEBFFE666666666666C000000000000000C000CCCCCCCCCCCDC00199999999999AC002666666666667C003333333333333C003333333333333C004000000000000C004CCCCCCCCCCCDC00599999999999AC006666666666666C007333333333333C0080000000000003FE00000000000003FD99999999999993FD33333333333333FC99999999999983FB99999999999980000000000000000BFB9999999999998BFB99999999999A0BFC999999999999CBFD3333333333334BFD999999999999CBFE0000000000000BFE3333333333334BFE6666666666666BFE6666666666666BFE999999999999ABFECCCCCCCCCCCCCBFF0000000000000BFF1999999999999BFF3333333333333BFF4CCCCCCCCCCCDBFF4CCCCCCCCCCCEBFF6666666666666BFF8000000000000BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCEBFFE666666666666BFFE666666666666C000000000000000C000CCCCCCCCCCCDC00199999999999AC002666666666666C003333333333333C0040000000000003FF00000000000003FECCCCCCCCCCCCE3FE999999999999A3FE66666666666673FE33333333333343FE00000000000013FD999999999999C3FD99999999999983FD33333333333323FC99999999999983FB99999999999900000000000000000BFB99999999999A0BFC9999999999998BFC9999999999998BFD3333333333334BFD9999999999998BFE0000000000000BFE3333333333332BFE6666666666666BFE999999999999ABFE999999999999CBFECCCCCCCCCCCCCBFF0000000000000BFF199999999999ABFF3333333333334BFF4CCCCCCCCCCCEBFF6666666666666BFF6666666666666BFF8000000000000BFF999999999999ABFFB333333333334BFFCCCCCCCCCCCCCBFFE666666666666C000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172BFB999999999999A01610362617ABFC9999999999999016103666F6F0000000000000000016203626172000000000000000001620362617ABFB9999999999998016203666F6F3FB999999999999A0163036261723FB999999999999801630362617A0000000000000000016303666F6F3FC9999999999999"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172BFB999999999999A01610362617ABFC9999999999999016103666F6F0000000000000000016203626172BFD333333333333301620362617ABFD9999999999999016203666F6FBFC999999999999A016303626172BFE000000000000001630362617ABFE3333333333334016303666F6FBFD9999999999999"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FB9999999999998016203666F6F3FB999999999999C"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A100161036261720169BFD3333333333333016103626172016ABFD9999999999999016103626172016BBFDFFFFFFFFFFFFF016103626172016CBFE3333333333334016103666F6F01690000000000000000016103666F6F016ABFB999999999999A016103666F6F016BBFC9999999999999016103666F6F016CBFD333333333333401620362617201690000000000000000016203626172016ABFB9999999999998016203626172016BBFC9999999999998016203626172016CBFD3333333333334016203666F6F01693FD3333333333334016203666F6F016A3FC999999999999A016203666F6F016B3FB999999999999C016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A070203626172BFE3333333333334BFE6666666666666BFE999999999999ABFECCCCCCCCCCCCEBFF0000000000000BFF199999999999ABFF3333333333333BFD999999999999ABFE0000000000000BFE3333333333333BFE6666666666667BFE9999999999999BFECCCCCCCCCCCCDBFEFFFFFFFFFFFFFBFC999999999999CBFD3333333333334BFD999999999999ABFE0000000000001BFE3333333333333BFE6666666666667BFE999999999999903666F6F0000000000000000BFB999999999999ABFC9999999999999BFD3333333333334BFD999999999999ABFE0000000000000BFE33333333333333FC99999999999993FB99999999999980000000000000000BFB999999999999CBFC999999999999ABFD3333333333333BFD99999999999993FD999999999999A3FD33333333333333FC999999999999A3FB99999999999980000000000000000BFB9999999999998BFC9999999999998"}} +{"expression":"join(a,b,f(a,b)(a-b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101690000000000000000BFD3333333333333BFE3333333333334BFECCCCCCCCCCCCDBFF33333333333330161016ABFB999999999999ABFD9999999999999BFE6666666666666BFEFFFFFFFFFFFFFBFF4CCCCCCCCCCCD0161016BBFC9999999999999BFDFFFFFFFFFFFFFBFE999999999999ABFF199999999999ABFF66666666666660161016CBFD3333333333334BFE3333333333334BFECCCCCCCCCCCCCBFF3333333333334BFF8000000000000016201693FE00000000000003FC9999999999998BFB9999999999998BFD999999999999ABFE66666666666660162016A3FD99999999999993FB9999999999998BFC9999999999998BFDFFFFFFFFFFFFEBFE999999999999A0162016B3FD33333333333330000000000000000BFD3333333333334BFE3333333333333BFECCCCCCCCCCCCC0162016C3FC9999999999998BFB99999999999A0BFD9999999999998BFE6666666666667BFF0000000000000016301693FF00000000000003FE66666666666663FD999999999999A3FB9999999999990BFC99999999999980163016A3FECCCCCCCCCCCCE3FE33333333333333FD33333333333340000000000000000BFD33333333333340163016B3FE999999999999A3FE00000000000003FC9999999999998BFB99999999999A0BFD99999999999980163016C3FE66666666666673FD99999999999983FB99999999999A0BFC99999999999A0BFE0000000000000"}} +{"expression":"a*b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003F847AE147AE147C"}} +{"expression":"a*b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053F847AE147AE147C3FA47AE147AE147C3FB70A3D70A3D70A3FC47AE147AE147C3FD0000000000000"}} +{"expression":"a*b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033F847AE147AE147C3FA47AE147AE147C3FB70A3D70A3D70A"}} +{"expression":"a*b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3F947AE147AE147C3FA47AE147AE147C3FAEB851EB851EB83FB47AE147AE147C3FB999999999999A3F9EB851EB851EB83FAEB851EB851EB83FB70A3D70A3D70A3FBEB851EB851EB83FC33333333333333FA47AE147AE147C3FB47AE147AE147C3FBEB851EB851EB83FC47AE147AE147C3FC999999999999A3FA999999999999A3FB999999999999A3FC33333333333333FC999999999999A3FD0000000000000"}} +{"expression":"a*b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3FBEB851EB851EB83FC1EB851EB851EB3FC47AE147AE147C3FC70A3D70A3D70B3FC999999999999A3FD51EB851EB851F3FD70A3D70A3D70A3FD8F5C28F5C28F63FDAE147AE147AE13FDCCCCCCCCCCCCC3FE47AE147AE147C3FE5C28F5C28F5C33FE70A3D70A3D70B3FE851EB851EB8523FE999999999999A3FF0CCCCCCCCCCCD3FF199999999999A3FF26666666666663FF33333333333333FF4000000000000"}} +{"expression":"a*b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043F847AE147AE147C3FA47AE147AE147C3FB70A3D70A3D70A3FC47AE147AE147C3FD33333333333333FDAE147AE147AE13FE1EB851EB851EB3FE70A3D70A3D70B3FEFAE147AE147AF3FF33333333333333FF6E147AE147AE23FFAE147AE147AE1"}} +{"expression":"a*b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3FAEB851EB851EB83FB1EB851EB851EB3FC47AE147AE147C3FC70A3D70A3D70B3FC999999999999A3FCC28F5C28F5C2A3FCEB851EB851EB83FD0A3D70A3D70A43FD1EB851EB851EB3FDCCCCCCCCCCCCC3FDEB851EB851EB83FE051EB851EB8523FE147AE147AE1483FE23D70A3D70A3D3FE33333333333333FE428F5C28F5C293FEC28F5C28F5C2A3FED70A3D70A3D703FEEB851EB851EB83FF00000000000003FF0A3D70A3D70A43FF147AE147AE1483FF1EB851EB851EB3FF73333333333333FF80000000000003FF8CCCCCCCCCCCD3FF999999999999A3FFA6666666666663FFB3333333333333FFC0000000000003FAEB851EB851EB83FBEB851EB851EB83FC70A3D70A3D70A3FCEB851EB851EB83FD33333333333333FD70A3D70A3D70A3FDAE147AE147AE13FE1EB851EB851EB3FE428F5C28F5C293FE66666666666663FE8A3D70A3D70A43FEAE147AE147AE13FED1EB851EB851E3FEF5C28F5C28F5B3FF33333333333343FF47AE147AE147C3FF5C28F5C28F5C33FF70A3D70A3D70B3FF851EB851EB8523FF999999999999A3FFAE147AE147AE23FFFAE147AE147AF40008F5C28F5C28F400147AE147AE14840020000000000004002B851EB851EB9400370A3D70A3D71400428F5C28F5C29400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C0000000000003FBC28F5C28F5C2A3FCC28F5C28F5C2A3FD51EB851EB851F3FDC28F5C28F5C2A3FE199999999999A3FE51EB851EB851F3FE8A3D70A3D70A43FEEB851EB851EB83FF147AE147AE1483FF33333333333333FF51EB851EB851F3FF70A3D70A3D70A3FF8F5C28F5C28F63FFAE147AE147AE13FFF3333333333344000A3D70A3D70A44001AE147AE147AE4002B851EB851EB94003C28F5C28F5C24004CCCCCCCCCCCD4005D70A3D70A3D84008A3D70A3D70A44009C28F5C28F5C2400AE147AE147AE1400C000000000000400D1EB851EB851E400E3D70A3D70A3D400F5C28F5C28F5B40116666666666664012000000000000401299999999999A40133333333333344013CCCCCCCCCCCC40146666666666664015000000000000"}} +{"expression":"a*b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613F847AE147AE147C01623FA47AE147AE147C01633FB70A3D70A3D70A"}} +{"expression":"a*b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613F847AE147AE147C01623FA47AE147AE147C"}} +{"expression":"a*b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723F947AE147AE147C01610362617A3F9EB851EB851EB8016103666F6F3F847AE147AE147C0162036261723FA47AE147AE147C01620362617A3FAEB851EB851EB8016203666F6F3F947AE147AE147C0163036261723FAEB851EB851EB801630362617A3FB70A3D70A3D70A016303666F6F3F9EB851EB851EB8"}} +{"expression":"a*b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723F947AE147AE147C01610362617A3F9EB851EB851EB8016103666F6F3F847AE147AE147C0162036261723FB999999999999A01620362617A3FBEB851EB851EB8016203666F6F3FB47AE147AE147C0163036261723FCEB851EB851EB801630362617A3FD147AE147AE148016303666F6F3FCAE147AE147AE1"}} +{"expression":"a*b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FA47AE147AE147C016103666F6F3F847AE147AE147C0162036261723FC999999999999A016203666F6F3FBEB851EB851EB8"}} +{"expression":"a*b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FB999999999999A016103626172016A3FBEB851EB851EB8016103626172016B3FC1EB851EB851EB016103626172016C3FC47AE147AE147C016103666F6F01693F847AE147AE147C016103666F6F016A3F947AE147AE147C016103666F6F016B3F9EB851EB851EB8016103666F6F016C3FA47AE147AE147C01620362617201693FD0000000000000016203626172016A3FD3333333333333016203626172016B3FD6666666666666016203626172016C3FD999999999999A016203666F6F01693FA47AE147AE147C016203666F6F016A3FB47AE147AE147C016203666F6F016B3FBEB851EB851EB8016203666F6F016C3FC47AE147AE147C"}} +{"expression":"a*b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC47AE147AE147C3FC70A3D70A3D70B3FC999999999999A3FCC28F5C28F5C2A3FCEB851EB851EB83FD0A3D70A3D70A43FD1EB851EB851EB3FD47AE147AE147C3FD70A3D70A3D70B3FD999999999999A3FDC28F5C28F5C2A3FDEB851EB851EB83FE0A3D70A3D70A43FE1EB851EB851EB3FDEB851EB851EB83FE147AE147AE1483FE33333333333333FE51EB851EB851F3FE70A3D70A3D70A3FE8F5C28F5C28F63FEAE147AE147AE103666F6F3F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3FAEB851EB851EB83FB1EB851EB851EB3F9EB851EB851EB83FAEB851EB851EB83FB70A3D70A3D70A3FBEB851EB851EB83FC33333333333333FC70A3D70A3D70A3FCAE147AE147AE13FA999999999999A3FB999999999999A3FC33333333333333FC999999999999A3FD00000000000003FD33333333333333FD6666666666666"}} +{"expression":"a*b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693F847AE147AE147C3FB999999999999A3FD147AE147AE1483FE0A3D70A3D70A43FEB3333333333330161016A3F947AE147AE147C3FBEB851EB851EB83FD33333333333333FE1EB851EB851EB3FECCCCCCCCCCCCD0161016B3F9EB851EB851EB83FC1EB851EB851EB3FD51EB851EB851F3FE33333333333343FEE6666666666660161016C3FA47AE147AE147C3FC47AE147AE147C3FD70A3D70A3D70A3FE47AE147AE147C3FF0000000000000016201693FAEB851EB851EB83FD66666666666663FE70A3D70A3D70B3FF2B851EB851EB93FFB3333333333330162016A3FBEB851EB851EB83FDAE147AE147AE13FE999999999999A3FF428F5C28F5C293FFCCCCCCCCCCCCD0162016B3FC70A3D70A3D70A3FDF5C28F5C28F5B3FEC28F5C28F5C2A3FF599999999999A3FFE6666666666660162016C3FCEB851EB851EB83FE1EB851EB851EB3FEEB851EB851EB83FF70A3D70A3D70B4000000000000000016301693FBC28F5C28F5C2A3FE33333333333333FF2B851EB851EB93FFD1EB851EB851E40046666666666660163016A3FCC28F5C28F5C2A3FE70A3D70A3D70A3FF4CCCCCCCCCCCD3FFF5C28F5C28F5B400599999999999A0163016B3FD51EB851EB851F3FEAE147AE147AE13FF6E147AE147AE24000CCCCCCCCCCCC4006CCCCCCCCCCCC0163016C3FDC28F5C28F5C2A3FEEB851EB851EB83FF8F5C28F5C28F64001EB851EB851EB4008000000000000"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003F847AE147AE147C"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053F847AE147AE147C3FA47AE147AE147C3FB70A3D70A3D70A3FC47AE147AE147C3FD0000000000000"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033F847AE147AE147C3FA47AE147AE147C3FB70A3D70A3D70A"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3F947AE147AE147C3FA47AE147AE147C3FAEB851EB851EB83FB47AE147AE147C3FB999999999999A3F9EB851EB851EB83FAEB851EB851EB83FB70A3D70A3D70A3FBEB851EB851EB83FC33333333333333FA47AE147AE147C3FB47AE147AE147C3FBEB851EB851EB83FC47AE147AE147C3FC999999999999A3FA999999999999A3FB999999999999A3FC33333333333333FC999999999999A3FD0000000000000"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3FBEB851EB851EB83FC1EB851EB851EB3FC47AE147AE147C3FC70A3D70A3D70B3FC999999999999A3FD51EB851EB851F3FD70A3D70A3D70A3FD8F5C28F5C28F63FDAE147AE147AE13FDCCCCCCCCCCCCC3FE47AE147AE147C3FE5C28F5C28F5C33FE70A3D70A3D70B3FE851EB851EB8523FE999999999999A3FF0CCCCCCCCCCCD3FF199999999999A3FF26666666666663FF33333333333333FF4000000000000"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043F847AE147AE147C3FA47AE147AE147C3FB70A3D70A3D70A3FC47AE147AE147C3FD33333333333333FDAE147AE147AE13FE1EB851EB851EB3FE70A3D70A3D70B3FEFAE147AE147AF3FF33333333333333FF6E147AE147AE23FFAE147AE147AE1"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3FAEB851EB851EB83FB1EB851EB851EB3FC47AE147AE147C3FC70A3D70A3D70B3FC999999999999A3FCC28F5C28F5C2A3FCEB851EB851EB83FD0A3D70A3D70A43FD1EB851EB851EB3FDCCCCCCCCCCCCC3FDEB851EB851EB83FE051EB851EB8523FE147AE147AE1483FE23D70A3D70A3D3FE33333333333333FE428F5C28F5C293FEC28F5C28F5C2A3FED70A3D70A3D703FEEB851EB851EB83FF00000000000003FF0A3D70A3D70A43FF147AE147AE1483FF1EB851EB851EB3FF73333333333333FF80000000000003FF8CCCCCCCCCCCD3FF999999999999A3FFA6666666666663FFB3333333333333FFC0000000000003FAEB851EB851EB83FBEB851EB851EB83FC70A3D70A3D70A3FCEB851EB851EB83FD33333333333333FD70A3D70A3D70A3FDAE147AE147AE13FE1EB851EB851EB3FE428F5C28F5C293FE66666666666663FE8A3D70A3D70A43FEAE147AE147AE13FED1EB851EB851E3FEF5C28F5C28F5B3FF33333333333343FF47AE147AE147C3FF5C28F5C28F5C33FF70A3D70A3D70B3FF851EB851EB8523FF999999999999A3FFAE147AE147AE23FFFAE147AE147AF40008F5C28F5C28F400147AE147AE14840020000000000004002B851EB851EB9400370A3D70A3D71400428F5C28F5C29400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C0000000000003FBC28F5C28F5C2A3FCC28F5C28F5C2A3FD51EB851EB851F3FDC28F5C28F5C2A3FE199999999999A3FE51EB851EB851F3FE8A3D70A3D70A43FEEB851EB851EB83FF147AE147AE1483FF33333333333333FF51EB851EB851F3FF70A3D70A3D70A3FF8F5C28F5C28F63FFAE147AE147AE13FFF3333333333344000A3D70A3D70A44001AE147AE147AE4002B851EB851EB94003C28F5C28F5C24004CCCCCCCCCCCD4005D70A3D70A3D84008A3D70A3D70A44009C28F5C28F5C2400AE147AE147AE1400C000000000000400D1EB851EB851E400E3D70A3D70A3D400F5C28F5C28F5B40116666666666664012000000000000401299999999999A40133333333333344013CCCCCCCCCCCC40146666666666664015000000000000"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613F847AE147AE147C01623FA47AE147AE147C01633FB70A3D70A3D70A"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613F847AE147AE147C01623FA47AE147AE147C"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723F947AE147AE147C01610362617A3F9EB851EB851EB8016103666F6F3F847AE147AE147C0162036261723FA47AE147AE147C01620362617A3FAEB851EB851EB8016203666F6F3F947AE147AE147C0163036261723FAEB851EB851EB801630362617A3FB70A3D70A3D70A016303666F6F3F9EB851EB851EB8"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723F947AE147AE147C01610362617A3F9EB851EB851EB8016103666F6F3F847AE147AE147C0162036261723FB999999999999A01620362617A3FBEB851EB851EB8016203666F6F3FB47AE147AE147C0163036261723FCEB851EB851EB801630362617A3FD147AE147AE148016303666F6F3FCAE147AE147AE1"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FA47AE147AE147C016103666F6F3F847AE147AE147C0162036261723FC999999999999A016203666F6F3FBEB851EB851EB8"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FB999999999999A016103626172016A3FBEB851EB851EB8016103626172016B3FC1EB851EB851EB016103626172016C3FC47AE147AE147C016103666F6F01693F847AE147AE147C016103666F6F016A3F947AE147AE147C016103666F6F016B3F9EB851EB851EB8016103666F6F016C3FA47AE147AE147C01620362617201693FD0000000000000016203626172016A3FD3333333333333016203626172016B3FD6666666666666016203626172016C3FD999999999999A016203666F6F01693FA47AE147AE147C016203666F6F016A3FB47AE147AE147C016203666F6F016B3FBEB851EB851EB8016203666F6F016C3FC47AE147AE147C"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC47AE147AE147C3FC70A3D70A3D70B3FC999999999999A3FCC28F5C28F5C2A3FCEB851EB851EB83FD0A3D70A3D70A43FD1EB851EB851EB3FD47AE147AE147C3FD70A3D70A3D70B3FD999999999999A3FDC28F5C28F5C2A3FDEB851EB851EB83FE0A3D70A3D70A43FE1EB851EB851EB3FDEB851EB851EB83FE147AE147AE1483FE33333333333333FE51EB851EB851F3FE70A3D70A3D70A3FE8F5C28F5C28F63FEAE147AE147AE103666F6F3F847AE147AE147C3F947AE147AE147C3F9EB851EB851EB83FA47AE147AE147C3FA999999999999A3FAEB851EB851EB83FB1EB851EB851EB3F9EB851EB851EB83FAEB851EB851EB83FB70A3D70A3D70A3FBEB851EB851EB83FC33333333333333FC70A3D70A3D70A3FCAE147AE147AE13FA999999999999A3FB999999999999A3FC33333333333333FC999999999999A3FD00000000000003FD33333333333333FD6666666666666"}} +{"expression":"join(a,b,f(a,b)(a*b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693F847AE147AE147C3FB999999999999A3FD147AE147AE1483FE0A3D70A3D70A43FEB3333333333330161016A3F947AE147AE147C3FBEB851EB851EB83FD33333333333333FE1EB851EB851EB3FECCCCCCCCCCCCD0161016B3F9EB851EB851EB83FC1EB851EB851EB3FD51EB851EB851F3FE33333333333343FEE6666666666660161016C3FA47AE147AE147C3FC47AE147AE147C3FD70A3D70A3D70A3FE47AE147AE147C3FF0000000000000016201693FAEB851EB851EB83FD66666666666663FE70A3D70A3D70B3FF2B851EB851EB93FFB3333333333330162016A3FBEB851EB851EB83FDAE147AE147AE13FE999999999999A3FF428F5C28F5C293FFCCCCCCCCCCCCD0162016B3FC70A3D70A3D70A3FDF5C28F5C28F5B3FEC28F5C28F5C2A3FF599999999999A3FFE6666666666660162016C3FCEB851EB851EB83FE1EB851EB851EB3FEEB851EB851EB83FF70A3D70A3D70B4000000000000000016301693FBC28F5C28F5C2A3FE33333333333333FF2B851EB851EB93FFD1EB851EB851E40046666666666660163016A3FCC28F5C28F5C2A3FE70A3D70A3D70A3FF4CCCCCCCCCCCD3FFF5C28F5C28F5B400599999999999A0163016B3FD51EB851EB851F3FEAE147AE147AE13FF6E147AE147AE24000CCCCCCCCCCCC4006CCCCCCCCCCCC0163016C3FDC28F5C28F5C2A3FEEB851EB851EB83FF8F5C28F5C28F64001EB851EB851EB4008000000000000"}} +{"expression":"a/b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A40000000000000003FF00000000000003FE55555555555563FE00000000000003FD999999999999A4007FFFFFFFFFFFF3FF7FFFFFFFFFFFF3FF00000000000003FE7FFFFFFFFFFFF3FE3333333333333401000000000000040000000000000003FF55555555555563FF00000000000003FE999999999999A401400000000000040040000000000003FFAAAAAAAAAAAAB3FF40000000000003FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A3FD55555555555563FD24924924924933FD00000000000003FCC71C71C71C71D3FC999999999999A3FD1745D1745D1743FD00000000000003FCD89D89D89D89D3FCB6DB6DB6DB6DC3FC99999999999993FD00000000000003FCE1E1E1E1E1E1F3FCC71C71C71C71D3FCAF286BCA1AF293FC999999999999A3FCE79E79E79E79E3FCD1745D1745D173FCBD37A6F4DE9BE3FCAAAAAAAAAAAAB3FC999999999999A"}} +{"expression":"a/b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF33333333333333FF2AAAAAAAAAAAB3FF24924924924933FF20000000000003FF38E38E38E38E43FF33333333333333FF2E8BA2E8BA2E83FF2AAAAAAAAAAAB"}} +{"expression":"a/b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A3FC55555555555563FC24924924924933FD00000000000003FCC71C71C71C71D3FC999999999999A3FC745D1745D17463FC55555555555563FC3B13B13B13B143FC24924924924933FC99999999999993FC7FFFFFFFFFFFF3FC69696969696973FC55555555555553FC435E50D79435E3FC33333333333333FC24924924924923FC745D1745D17463FC642C8590B21653FC55555555555563FC47AE147AE147B3FC3B13B13B13B143FC2F684BDA12F683FC24924924924933FC611A7B9611A7C3FC55555555555553FC4A5294A5294A53FC40000000000003FC364D9364D93653FC2D2D2D2D2D2D33FC24924924924924017FFFFFFFFFFFF4007FFFFFFFFFFFF40000000000000003FF7FFFFFFFFFFFF3FF33333333333333FF00000000000003FEB6DB6DB6DB6DC3FEBFFFFFFFFFFFF3FE8E38E38E38E383FE66666666666663FE45D1745D1745C3FE2AAAAAAAAAAAB3FE13B13B13B13B13FE00000000000003FE11111111111113FE00000000000003FDE1E1E1E1E1E1F3FDC71C71C71C71D3FDAF286BCA1AF293FD999999999999A3FD86186186186183FDA2E8BA2E8BA2E3FD90B21642C85913FD80000000000003FD70A3D70A3D70A3FD62762762762763FD55555555555553FD49249249249253FD611A7B9611A7C3FD55555555555553FD4A5294A5294A53FD40000000000003FD364D9364D93653FD2D2D2D2D2D2D33FD249249249249240260000000000004016000000000000400D5555555555564006000000000000400199999999999A3FFD5555555555563FF924924924924A3FF7FFFFFFFFFFFF3FF55555555555553FF33333333333333FF1745D1745D1743FF00000000000003FED89D89D89D89D3FEB6DB6DB6DB6DC3FEBBBBBBBBBBBBC3FEA0000000000003FE87878787878793FE71C71C71C71C73FE5E50D79435E513FE4CCCCCCCCCCCD3FE3CF3CF3CF3CF43FE45D1745D1745C3FE37A6F4DE9BD383FE2AAAAAAAAAAAB3FE1EB851EB851EB3FE13B13B13B13B13FE097B425ED097B3FE00000000000003FE08D3DCB08D3DD3FE00000000000003FDEF7BDEF7BDEF73FDE0000000000003FDD1745D1745D183FDC3C3C3C3C3C3C3FDB6DB6DB6DB6DB"}} +{"expression":"a/b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FE000000000000001610362617A3FD5555555555556016103666F6F3FF00000000000000162036261723FF000000000000001620362617A3FE5555555555556016203666F6F40000000000000000163036261723FF7FFFFFFFFFFFF01630362617A3FF0000000000000016303666F6F4007FFFFFFFFFFFF"}} +{"expression":"a/b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FE000000000000001610362617A3FD5555555555556016103666F6F3FF00000000000000162036261723FD999999999999A01620362617A3FD5555555555556016203666F6F3FE00000000000000163036261723FD7FFFFFFFFFFFF01630362617A3FD5555555555555016303666F6F3FDB6DB6DB6DB6DC"}} +{"expression":"a/b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261723FF4000000000000016203666F6F3FF5555555555556"}} +{"expression":"a/b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FD999999999999A016103626172016A3FD5555555555556016103626172016B3FD2492492492493016103626172016C3FD0000000000000016103666F6F01693FF0000000000000016103666F6F016A3FE0000000000000016103666F6F016B3FD5555555555556016103666F6F016C3FD000000000000001620362617201693FF0000000000000016203626172016A3FEAAAAAAAAAAAAB016203626172016B3FE6DB6DB6DB6DB7016203626172016C3FE4000000000000016203666F6F01694010000000000000016203666F6F016A4000000000000000016203666F6F016B3FF5555555555556016203666F6F016C3FF0000000000000"}} +{"expression":"a/b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FD00000000000003FCC71C71C71C71D3FC999999999999A3FC745D1745D17463FC55555555555563FC3B13B13B13B143FC24924924924933FE00000000000003FDC71C71C71C71D3FD999999999999A3FD745D1745D17463FD55555555555563FD3B13B13B13B143FD24924924924933FE7FFFFFFFFFFFF3FE55555555555553FE33333333333333FE1745D1745D1743FE00000000000003FDD89D89D89D89D3FDB6DB6DB6DB6DC03666F6F3FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A3FC55555555555563FC24924924924934007FFFFFFFFFFFF3FF7FFFFFFFFFFFF3FF00000000000003FE7FFFFFFFFFFFF3FE33333333333333FE00000000000003FDB6DB6DB6DB6DC401400000000000040040000000000003FFAAAAAAAAAAAAB3FF40000000000003FF00000000000003FEAAAAAAAAAAAAB3FE6DB6DB6DB6DB7"}} +{"expression":"a/b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF00000000000003FD999999999999A3FD55555555555553FD3B13B13B13B143FD2D2D2D2D2D2D30161016A3FE00000000000003FD55555555555563FD33333333333333FD24924924924933FD1C71C71C71C720161016B3FD55555555555563FD24924924924933FD1745D1745D1743FD11111111111113FD0D79435E50D790161016C3FD00000000000003FD00000000000003FD00000000000003FD00000000000003FD0000000000000016201694017FFFFFFFFFFFF3FF66666666666663FEC71C71C71C71D3FE62762762762763FE2D2D2D2D2D2D30162016A4007FFFFFFFFFFFF3FF2AAAAAAAAAAAB3FE999999999999A3FE49249249249253FE1C71C71C71C720162016B40000000000000003FF00000000000003FE745D1745D17463FE33333333333333FE0D79435E50D790162016C3FF7FFFFFFFFFFFF3FEBFFFFFFFFFFFF3FE55555555555563FE20000000000003FE000000000000001630169402600000000000040033333333333333FF71C71C71C71C73FF13B13B13B13B13FEC3C3C3C3C3C3C0163016A401600000000000040000000000000003FF4CCCCCCCCCCCD3FF00000000000003FEAAAAAAAAAAAAA0163016B400D5555555555563FFB6DB6DB6DB6DC3FF2E8BA2E8BA2E83FEDDDDDDDDDDDDD3FE9435E50D794360163016C40060000000000003FF7FFFFFFFFFFFF3FF15555555555563FEBFFFFFFFFFFFF3FE8000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A40000000000000003FF00000000000003FE55555555555563FE00000000000003FD999999999999A4007FFFFFFFFFFFF3FF7FFFFFFFFFFFF3FF00000000000003FE7FFFFFFFFFFFF3FE3333333333333401000000000000040000000000000003FF55555555555563FF00000000000003FE999999999999A401400000000000040040000000000003FFAAAAAAAAAAAAB3FF40000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A3FD55555555555563FD24924924924933FD00000000000003FCC71C71C71C71D3FC999999999999A3FD1745D1745D1743FD00000000000003FCD89D89D89D89D3FCB6DB6DB6DB6DC3FC99999999999993FD00000000000003FCE1E1E1E1E1E1F3FCC71C71C71C71D3FCAF286BCA1AF293FC999999999999A3FCE79E79E79E79E3FCD1745D1745D173FCBD37A6F4DE9BE3FCAAAAAAAAAAAAB3FC999999999999A"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF33333333333333FF2AAAAAAAAAAAB3FF24924924924933FF20000000000003FF38E38E38E38E43FF33333333333333FF2E8BA2E8BA2E83FF2AAAAAAAAAAAB"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A3FC55555555555563FC24924924924933FD00000000000003FCC71C71C71C71D3FC999999999999A3FC745D1745D17463FC55555555555563FC3B13B13B13B143FC24924924924933FC99999999999993FC7FFFFFFFFFFFF3FC69696969696973FC55555555555553FC435E50D79435E3FC33333333333333FC24924924924923FC745D1745D17463FC642C8590B21653FC55555555555563FC47AE147AE147B3FC3B13B13B13B143FC2F684BDA12F683FC24924924924933FC611A7B9611A7C3FC55555555555553FC4A5294A5294A53FC40000000000003FC364D9364D93653FC2D2D2D2D2D2D33FC24924924924924017FFFFFFFFFFFF4007FFFFFFFFFFFF40000000000000003FF7FFFFFFFFFFFF3FF33333333333333FF00000000000003FEB6DB6DB6DB6DC3FEBFFFFFFFFFFFF3FE8E38E38E38E383FE66666666666663FE45D1745D1745C3FE2AAAAAAAAAAAB3FE13B13B13B13B13FE00000000000003FE11111111111113FE00000000000003FDE1E1E1E1E1E1F3FDC71C71C71C71D3FDAF286BCA1AF293FD999999999999A3FD86186186186183FDA2E8BA2E8BA2E3FD90B21642C85913FD80000000000003FD70A3D70A3D70A3FD62762762762763FD55555555555553FD49249249249253FD611A7B9611A7C3FD55555555555553FD4A5294A5294A53FD40000000000003FD364D9364D93653FD2D2D2D2D2D2D33FD249249249249240260000000000004016000000000000400D5555555555564006000000000000400199999999999A3FFD5555555555563FF924924924924A3FF7FFFFFFFFFFFF3FF55555555555553FF33333333333333FF1745D1745D1743FF00000000000003FED89D89D89D89D3FEB6DB6DB6DB6DC3FEBBBBBBBBBBBBC3FEA0000000000003FE87878787878793FE71C71C71C71C73FE5E50D79435E513FE4CCCCCCCCCCCD3FE3CF3CF3CF3CF43FE45D1745D1745C3FE37A6F4DE9BD383FE2AAAAAAAAAAAB3FE1EB851EB851EB3FE13B13B13B13B13FE097B425ED097B3FE00000000000003FE08D3DCB08D3DD3FE00000000000003FDEF7BDEF7BDEF73FDE0000000000003FDD1745D1745D183FDC3C3C3C3C3C3C3FDB6DB6DB6DB6DB"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FE000000000000001610362617A3FD5555555555556016103666F6F3FF00000000000000162036261723FF000000000000001620362617A3FE5555555555556016203666F6F40000000000000000163036261723FF7FFFFFFFFFFFF01630362617A3FF0000000000000016303666F6F4007FFFFFFFFFFFF"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FE000000000000001610362617A3FD5555555555556016103666F6F3FF00000000000000162036261723FD999999999999A01620362617A3FD5555555555556016203666F6F3FE00000000000000163036261723FD7FFFFFFFFFFFF01630362617A3FD5555555555555016303666F6F3FDB6DB6DB6DB6DC"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261723FF4000000000000016203666F6F3FF5555555555556"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FD999999999999A016103626172016A3FD5555555555556016103626172016B3FD2492492492493016103626172016C3FD0000000000000016103666F6F01693FF0000000000000016103666F6F016A3FE0000000000000016103666F6F016B3FD5555555555556016103666F6F016C3FD000000000000001620362617201693FF0000000000000016203626172016A3FEAAAAAAAAAAAAB016203626172016B3FE6DB6DB6DB6DB7016203626172016C3FE4000000000000016203666F6F01694010000000000000016203666F6F016A4000000000000000016203666F6F016B3FF5555555555556016203666F6F016C3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FD00000000000003FCC71C71C71C71D3FC999999999999A3FC745D1745D17463FC55555555555563FC3B13B13B13B143FC24924924924933FE00000000000003FDC71C71C71C71D3FD999999999999A3FD745D1745D17463FD55555555555563FD3B13B13B13B143FD24924924924933FE7FFFFFFFFFFFF3FE55555555555553FE33333333333333FE1745D1745D1743FE00000000000003FDD89D89D89D89D3FDB6DB6DB6DB6DC03666F6F3FF00000000000003FE00000000000003FD55555555555563FD00000000000003FC999999999999A3FC55555555555563FC24924924924934007FFFFFFFFFFFF3FF7FFFFFFFFFFFF3FF00000000000003FE7FFFFFFFFFFFF3FE33333333333333FE00000000000003FDB6DB6DB6DB6DC401400000000000040040000000000003FFAAAAAAAAAAAAB3FF40000000000003FF00000000000003FEAAAAAAAAAAAAB3FE6DB6DB6DB6DB7"}} +{"expression":"join(a,b,f(a,b)(a/b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF00000000000003FD999999999999A3FD55555555555553FD3B13B13B13B143FD2D2D2D2D2D2D30161016A3FE00000000000003FD55555555555563FD33333333333333FD24924924924933FD1C71C71C71C720161016B3FD55555555555563FD24924924924933FD1745D1745D1743FD11111111111113FD0D79435E50D790161016C3FD00000000000003FD00000000000003FD00000000000003FD00000000000003FD0000000000000016201694017FFFFFFFFFFFF3FF66666666666663FEC71C71C71C71D3FE62762762762763FE2D2D2D2D2D2D30162016A4007FFFFFFFFFFFF3FF2AAAAAAAAAAAB3FE999999999999A3FE49249249249253FE1C71C71C71C720162016B40000000000000003FF00000000000003FE745D1745D17463FE33333333333333FE0D79435E50D790162016C3FF7FFFFFFFFFFFF3FEBFFFFFFFFFFFF3FE55555555555563FE20000000000003FE000000000000001630169402600000000000040033333333333333FF71C71C71C71C73FF13B13B13B13B13FEC3C3C3C3C3C3C0163016A401600000000000040000000000000003FF4CCCCCCCCCCCD3FF00000000000003FEAAAAAAAAAAAAA0163016B400D5555555555563FFB6DB6DB6DB6DC3FF2E8BA2E8BA2E83FEDDDDDDDDDDDDD3FE9435E50D794360163016C40060000000000003FF7FFFFFFFFFFFF3FF15555555555563FEBFFFFFFFFFFFF3FE8000000000000"}} +{"expression":"a%b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A000000000000000000000000000000003FC999999999999A3FC999999999999A3FC999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD3333333333333000000000000000000000000000000003FB999999999999C00000000000000003FD999999999999A3FB99999999999983FB99999999999983FC999999999999A3FB99999999999980000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"a%b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FB99999999999983FB99999999999983FB99999999999A03FB99999999999983FC999999999999C3FC99999999999983FC99999999999983FC9999999999998"}} +{"expression":"a%b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FB99999999999963FC999999999999800000000000000003FC99999999999983FB999999999999800000000000000003FE33333333333333FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003C800000000000003FB999999999999C3FC999999999999E3FD33333333333343FB99999999999A03FE00000000000013FD999999999999C3FD99999999999983FD33333333333323FC99999999999983FB999999999999000000000000000003FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000000000000"}} +{"expression":"a%b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F0000000000000000016203626172000000000000000001620362617A3FC999999999999A016203666F6F00000000000000000163036261723FB999999999999801630362617A0000000000000000016303666F6F3FB9999999999998"}} +{"expression":"a%b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F00000000000000000162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"a%b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FB9999999999998016203666F6F3FB999999999999C"}} +{"expression":"a%b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01690000000000000000016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201690000000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B3FB999999999999C016203666F6F016C0000000000000000"}} +{"expression":"a%b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE333333333333303666F6F00000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD33333333333333FD33333333333333FD33333333333333FB99999999999983FB99999999999983FC999999999999A3FB999999999999800000000000000003FE00000000000003FE0000000000000"}} +{"expression":"a%b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016B3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016C3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000016201693FB99999999999963FC99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016A3FC99999999999983FB99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016B000000000000000000000000000000003FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016C3FC99999999999983FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000016301693C800000000000003FC99999999999983FD999999999999A3FB99999999999903FF80000000000000163016A3FB999999999999C00000000000000003FD333333333333400000000000000003FF80000000000000163016B3FC999999999999E3FE00000000000003FC99999999999983FF66666666666663FF80000000000000163016C3FD33333333333343FD99999999999983FB99999999999A03FF66666666666663FF8000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A000000000000000000000000000000003FC999999999999A3FC999999999999A3FC999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD3333333333333000000000000000000000000000000003FB999999999999C00000000000000003FD999999999999A3FB99999999999983FB99999999999983FC999999999999A3FB99999999999980000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FB99999999999983FB99999999999983FB99999999999A03FB99999999999983FC999999999999C3FC99999999999983FC99999999999983FC9999999999998"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FB99999999999963FC999999999999800000000000000003FC99999999999983FB999999999999800000000000000003FE33333333333333FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003C800000000000003FB999999999999C3FC999999999999E3FD33333333333343FB99999999999A03FE00000000000013FD999999999999C3FD99999999999983FD33333333333323FC99999999999983FB999999999999000000000000000003FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F0000000000000000016203626172000000000000000001620362617A3FC999999999999A016203666F6F00000000000000000163036261723FB999999999999801630362617A0000000000000000016303666F6F3FB9999999999998"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F00000000000000000162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FB9999999999998016203666F6F3FB999999999999C"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01690000000000000000016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201690000000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B3FB999999999999C016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE333333333333303666F6F00000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD33333333333333FD33333333333333FD33333333333333FB99999999999983FB99999999999983FC999999999999A3FB999999999999800000000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(a%b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016B3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016C3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000016201693FB99999999999963FC99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016A3FC99999999999983FB99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016B000000000000000000000000000000003FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016C3FC99999999999983FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000016301693C800000000000003FC99999999999983FD999999999999A3FB99999999999903FF80000000000000163016A3FB999999999999C00000000000000003FD333333333333400000000000000003FF80000000000000163016B3FC999999999999E3FE00000000000003FC99999999999983FF66666666666663FF80000000000000163016C3FD33333333333343FD99999999999983FB99999999999A03FF66666666666663FF8000000000000"}} +{"expression":"a^b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FE96B230BCDC434"}} +{"expression":"a^b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE6A09E667F3BCD"}} +{"expression":"a^b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E9"}} +{"expression":"a^b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FEB3E2D38A030B13FE731651F09A68E3FE3BEBDCC9D061B3FE0CF4D9B8C79053FDC9F25C5BFEDD93FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FED32BCC99E79D23FEAA4469FBF12063FE84F1DDC1979893FE62E3E1817C1C43FE43D136248490F3FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD"}} +{"expression":"a^b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD85DE4AA7BFC063FD4BE914A0AC7523FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FD105A8E6ED2C753FCE2EB9881431F93FCAC2449F53F2B03FC7B93ABF4B50DD3FC50854F2C3D2223FCD8BE7091AE7E23FCAF5A24955081F3FC89959ECFD79DC3FC671FA3B35627A3FC47AE147AE147C3FCDDB680117AB123FCBDB8CDADBE11F3FC9FDF8BCCE533E3FC8406003B2AE5D3FC6A09E667F3BCD"}} +{"expression":"a^b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE8C97EF43F72483FE9D5C3DF24FB633FEB5F55FBDF12BA3FED69CF10804E693FF16EDC6D3C743C3FF33333333333333FF55A5A3EBFA9133FF7F592E087B65A"}} +{"expression":"a^b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FC50854F2C3D2223FC2A593BD9B85113FC08819F76D9F8D3FBD5017B9C942F93FB9FCE3BAB663693FB70A3D70A3D70A3FB46D31151C9BBF3FC10CF9FFD671EF3FBF1D96DC4991553FBC6426853D20FD3FB9E7C6E43390B83FB7A31F3A7BECB53FB5914EA110D34B3FB3ADE18A64617E3FC125FBEE2506643FC00000000000003FBDDB680117AB123FBBDB8CDADBE11F3FB9FDF8BCCE533E3FB8406003B2AE5D3FB6A09E667F3BCD3FEE680A48D168723FECE4658B6543243FEB740EC5D2AA1A3FEA160FDC35D2CB3FE8C97EF43F72483FE78D7DD8F4883C3FE6613966362A653FE80E68263B1BFB3FE7369F7D10F6863FE66666666666663FE59D79103A1FBA3FE4DB9608E352C43FE4207E29C0D5E53FE36BF482A783413FE6E5B7D16657E23FE6645DBC0597E73FE5E5DE6318DBC83FE56A29A68AED8E3FE4F12FC15F00C13FE47AE147AE147C3FE4072F24AFB0A73FE96128962B8A153FE91D10418F0C823FE8D9AEA11BD8103FE89701CA9CF25E3FE85507D900A37C3FE813BEEC4AACF63FE7D3252986A5EA3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF02739C65D58BF3FF04ED3B73257833FF076CEBE41BF7A3FF09F2BC99051DD3FF0C7EBC96A56F63FF0F10FB06934B03FF11A98737912E13FF28332F16166A53FF2DA65B57E7F983FF33333333333333FF38DA2F91C82C43FF3E9BCB96FEDF13FF447884AA31CC03FF4A70DA8169F5C3FF7B734C33413AD3FF85899CE90E5E53FF8FE493556F45B3FF9A8602A4B50503FFA56FCA6E7E9C63FFB0A3D70A3D70B3FFBC2421E5F8F004000C58069F8993F4001586C869D8A724001F05FB6735B3840028D86049083C04003300CFDDFFAB14003D823BE552C18400485FAFE93999D4009ED592591221D400B000000000000400C1E044C616F57400D47DE6F15B0FF400E7E0BC7D3E01D400FC10EE66FE364401088B7E0E7B3FF"}} +{"expression":"a^b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FE96B230BCDC43401623FE731651F09A68E01633FE64C8E84C5F4E9"}} +{"expression":"a^b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FE96B230BCDC43401623FE731651F09A68E"}} +{"expression":"a^b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FE731651F09A68E01620362617A3FE3BEBDCC9D061B016203666F6F3FEB3E2D38A030B10163036261723FE926EFF16629A501630362617A3FE64C8E84C5F4E9016303666F6F3FEC5EC42B8B4A19"}} +{"expression":"a^b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FDC9F25C5BFEDD901620362617A3FD85DE4AA7BFC06016203666F6F3FE0CF4D9B8C79050163036261723FD86D691AD2627A01630362617A3FD5A8131B97FD82016303666F6F3FDB8D809C615F41"}} +{"expression":"a^b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FE731651F09A68E016103666F6F3FE96B230BCDC4340162036261723FE8406003B2AE5C016203666F6F3FE84F1DDC197989"}} +{"expression":"a^b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FDC9F25C5BFEDD9016103626172016A3FD85DE4AA7BFC06016103626172016B3FD4BE914A0AC752016103626172016C3FD1A91920AA33D6016103666F6F01693FE96B230BCDC434016103666F6F016A3FE430CD74F6D478016103666F6F016B3FE009B9CF334253016103666F6F016C3FD97A967F7524B301620362617201693FE6A09E667F3BCD016203626172016A3FE51CB453B9536C016203626172016B3FE3B2C47BFF8329016203626172016C3FE2611186BAE674016203666F6F01693FED32BCC99E79D2016203666F6F016A3FEAA4469FBF1206016203666F6F016B3FE84F1DDC197989016203666F6F016C3FE62E3E1817C1C4"}} +{"expression":"a^b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FDEBFB0683CD8533FDC0E78CA02BB173FD999999999999A3FD75BCA3AE52E423FD550387FCC0E6C3FD3727E49ADFAD43FD1BE981346349E3FE543E8FBAE1CEA3FE434CDF6C1F4C83FE33333333333333FE23E6C92173EAA3FE155D686D65B7C3FE078D5A9E4CC763FDF4DACA1DA302703666F6F3FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FDF13F63C03331E3FDB8D809C615F413FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD3FE51CB453B9536C3FE3B2C47BFF8329"}} +{"expression":"a^b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FE96B230BCDC4343FDC9F25C5BFEDD93FD5A8131B97FD823FD3727E49ADFAD43FD3B2C47BFF83290161016A3FE430CD74F6D4783FD85DE4AA7BFC063FD33333333333333FD1BE981346349E3FD2611186BAE6740161016B3FE009B9CF3342533FD4BE914A0AC7523FD105A8E6ED2C753FD030DC4EA03A733FD125FBEE2506640161016C3FD97A967F7524B33FD1A91920AA33D63FCE2EB9881431F93FCD8BE7091AE7E23FD0000000000000016201693FEE680A48D168723FEAC5EB3F7AB2F83FEA2D7BB1B6C0F13FEBE76765499C1E3FF00000000000000162016A3FECE4658B6543243FE9D5C3DF24FB633FE999999999999A3FEB9C8924C99ABC3FF00000000000000162016B3FEB740EC5D2AA1A3FE8EE06AA5599B03FE908FAEDDB9CD13FEB5273C4AE62A13FF00000000000000162016C3FEA160FDC35D2CB3FE80E68263B1BFB3FE87B8D3F012DD53FEB09252A00B5A63FF0000000000000016301693FF02739C65D58BF3FF186F174F884723FF442E9BB77515D3FF8C776772A337F3FFFE077EA4184BA0163016A3FF04ED3B73257833FF1D980099BA1493FF4CCCCCCCCCCCD3FF9A088BB80392C40009912C0E98B3D0163016B3FF076CEBE41BF7A3FF22D937B32C2D33FF55A5A3EBFA9133FFA810898CE7313400148E6190B6C130163016C3FF09F2BC99051DD3FF28332F16166A53FF5EBAB035ACD4C3FFB693721891CFE4002000000000000"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FE96B230BCDC434"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE6A09E667F3BCD"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E9"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FEB3E2D38A030B13FE731651F09A68E3FE3BEBDCC9D061B3FE0CF4D9B8C79053FDC9F25C5BFEDD93FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FED32BCC99E79D23FEAA4469FBF12063FE84F1DDC1979893FE62E3E1817C1C43FE43D136248490F3FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD85DE4AA7BFC063FD4BE914A0AC7523FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FD105A8E6ED2C753FCE2EB9881431F93FCAC2449F53F2B03FC7B93ABF4B50DD3FC50854F2C3D2223FCD8BE7091AE7E23FCAF5A24955081F3FC89959ECFD79DC3FC671FA3B35627A3FC47AE147AE147C3FCDDB680117AB123FCBDB8CDADBE11F3FC9FDF8BCCE533E3FC8406003B2AE5D3FC6A09E667F3BCD"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE8C97EF43F72483FE9D5C3DF24FB633FEB5F55FBDF12BA3FED69CF10804E693FF16EDC6D3C743C3FF33333333333333FF55A5A3EBFA9133FF7F592E087B65A"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FC50854F2C3D2223FC2A593BD9B85113FC08819F76D9F8D3FBD5017B9C942F93FB9FCE3BAB663693FB70A3D70A3D70A3FB46D31151C9BBF3FC10CF9FFD671EF3FBF1D96DC4991553FBC6426853D20FD3FB9E7C6E43390B83FB7A31F3A7BECB53FB5914EA110D34B3FB3ADE18A64617E3FC125FBEE2506643FC00000000000003FBDDB680117AB123FBBDB8CDADBE11F3FB9FDF8BCCE533E3FB8406003B2AE5D3FB6A09E667F3BCD3FEE680A48D168723FECE4658B6543243FEB740EC5D2AA1A3FEA160FDC35D2CB3FE8C97EF43F72483FE78D7DD8F4883C3FE6613966362A653FE80E68263B1BFB3FE7369F7D10F6863FE66666666666663FE59D79103A1FBA3FE4DB9608E352C43FE4207E29C0D5E53FE36BF482A783413FE6E5B7D16657E23FE6645DBC0597E73FE5E5DE6318DBC83FE56A29A68AED8E3FE4F12FC15F00C13FE47AE147AE147C3FE4072F24AFB0A73FE96128962B8A153FE91D10418F0C823FE8D9AEA11BD8103FE89701CA9CF25E3FE85507D900A37C3FE813BEEC4AACF63FE7D3252986A5EA3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF02739C65D58BF3FF04ED3B73257833FF076CEBE41BF7A3FF09F2BC99051DD3FF0C7EBC96A56F63FF0F10FB06934B03FF11A98737912E13FF28332F16166A53FF2DA65B57E7F983FF33333333333333FF38DA2F91C82C43FF3E9BCB96FEDF13FF447884AA31CC03FF4A70DA8169F5C3FF7B734C33413AD3FF85899CE90E5E53FF8FE493556F45B3FF9A8602A4B50503FFA56FCA6E7E9C63FFB0A3D70A3D70B3FFBC2421E5F8F004000C58069F8993F4001586C869D8A724001F05FB6735B3840028D86049083C04003300CFDDFFAB14003D823BE552C18400485FAFE93999D4009ED592591221D400B000000000000400C1E044C616F57400D47DE6F15B0FF400E7E0BC7D3E01D400FC10EE66FE364401088B7E0E7B3FF"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FE96B230BCDC43401623FE731651F09A68E01633FE64C8E84C5F4E9"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FE96B230BCDC43401623FE731651F09A68E"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FE731651F09A68E01620362617A3FE3BEBDCC9D061B016203666F6F3FEB3E2D38A030B10163036261723FE926EFF16629A501630362617A3FE64C8E84C5F4E9016303666F6F3FEC5EC42B8B4A19"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FDC9F25C5BFEDD901620362617A3FD85DE4AA7BFC06016203666F6F3FE0CF4D9B8C79050163036261723FD86D691AD2627A01630362617A3FD5A8131B97FD82016303666F6F3FDB8D809C615F41"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FE731651F09A68E016103666F6F3FE96B230BCDC4340162036261723FE8406003B2AE5C016203666F6F3FE84F1DDC197989"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FDC9F25C5BFEDD9016103626172016A3FD85DE4AA7BFC06016103626172016B3FD4BE914A0AC752016103626172016C3FD1A91920AA33D6016103666F6F01693FE96B230BCDC434016103666F6F016A3FE430CD74F6D478016103666F6F016B3FE009B9CF334253016103666F6F016C3FD97A967F7524B301620362617201693FE6A09E667F3BCD016203626172016A3FE51CB453B9536C016203626172016B3FE3B2C47BFF8329016203626172016C3FE2611186BAE674016203666F6F01693FED32BCC99E79D2016203666F6F016A3FEAA4469FBF1206016203666F6F016B3FE84F1DDC197989016203666F6F016C3FE62E3E1817C1C4"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FDEBFB0683CD8533FDC0E78CA02BB173FD999999999999A3FD75BCA3AE52E423FD550387FCC0E6C3FD3727E49ADFAD43FD1BE981346349E3FE543E8FBAE1CEA3FE434CDF6C1F4C83FE33333333333333FE23E6C92173EAA3FE155D686D65B7C3FE078D5A9E4CC763FDF4DACA1DA302703666F6F3FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FDF13F63C03331E3FDB8D809C615F413FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD3FE51CB453B9536C3FE3B2C47BFF8329"}} +{"expression":"join(a,b,f(a,b)(a^b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FE96B230BCDC4343FDC9F25C5BFEDD93FD5A8131B97FD823FD3727E49ADFAD43FD3B2C47BFF83290161016A3FE430CD74F6D4783FD85DE4AA7BFC063FD33333333333333FD1BE981346349E3FD2611186BAE6740161016B3FE009B9CF3342533FD4BE914A0AC7523FD105A8E6ED2C753FD030DC4EA03A733FD125FBEE2506640161016C3FD97A967F7524B33FD1A91920AA33D63FCE2EB9881431F93FCD8BE7091AE7E23FD0000000000000016201693FEE680A48D168723FEAC5EB3F7AB2F83FEA2D7BB1B6C0F13FEBE76765499C1E3FF00000000000000162016A3FECE4658B6543243FE9D5C3DF24FB633FE999999999999A3FEB9C8924C99ABC3FF00000000000000162016B3FEB740EC5D2AA1A3FE8EE06AA5599B03FE908FAEDDB9CD13FEB5273C4AE62A13FF00000000000000162016C3FEA160FDC35D2CB3FE80E68263B1BFB3FE87B8D3F012DD53FEB09252A00B5A63FF0000000000000016301693FF02739C65D58BF3FF186F174F884723FF442E9BB77515D3FF8C776772A337F3FFFE077EA4184BA0163016A3FF04ED3B73257833FF1D980099BA1493FF4CCCCCCCCCCCD3FF9A088BB80392C40009912C0E98B3D0163016B3FF076CEBE41BF7A3FF22D937B32C2D33FF55A5A3EBFA9133FFA810898CE7313400148E6190B6C130163016C3FF09F2BC99051DD3FF28332F16166A53FF5EBAB035ACD4C3FFB693721891CFE4002000000000000"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FE96B230BCDC434"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE6A09E667F3BCD"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E9"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FEB3E2D38A030B13FE731651F09A68E3FE3BEBDCC9D061B3FE0CF4D9B8C79053FDC9F25C5BFEDD93FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FED32BCC99E79D23FEAA4469FBF12063FE84F1DDC1979893FE62E3E1817C1C43FE43D136248490F3FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD85DE4AA7BFC063FD4BE914A0AC7523FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FD105A8E6ED2C753FCE2EB9881431F93FCAC2449F53F2B03FC7B93ABF4B50DD3FC50854F2C3D2223FCD8BE7091AE7E23FCAF5A24955081F3FC89959ECFD79DC3FC671FA3B35627A3FC47AE147AE147C3FCDDB680117AB123FCBDB8CDADBE11F3FC9FDF8BCCE533E3FC8406003B2AE5D3FC6A09E667F3BCD"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE8C97EF43F72483FE9D5C3DF24FB633FEB5F55FBDF12BA3FED69CF10804E693FF16EDC6D3C743C3FF33333333333333FF55A5A3EBFA9133FF7F592E087B65A"}} +{"expression":"pow(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FC50854F2C3D2223FC2A593BD9B85113FC08819F76D9F8D3FBD5017B9C942F93FB9FCE3BAB663693FB70A3D70A3D70A3FB46D31151C9BBF3FC10CF9FFD671EF3FBF1D96DC4991553FBC6426853D20FD3FB9E7C6E43390B83FB7A31F3A7BECB53FB5914EA110D34B3FB3ADE18A64617E3FC125FBEE2506643FC00000000000003FBDDB680117AB123FBBDB8CDADBE11F3FB9FDF8BCCE533E3FB8406003B2AE5D3FB6A09E667F3BCD3FEE680A48D168723FECE4658B6543243FEB740EC5D2AA1A3FEA160FDC35D2CB3FE8C97EF43F72483FE78D7DD8F4883C3FE6613966362A653FE80E68263B1BFB3FE7369F7D10F6863FE66666666666663FE59D79103A1FBA3FE4DB9608E352C43FE4207E29C0D5E53FE36BF482A783413FE6E5B7D16657E23FE6645DBC0597E73FE5E5DE6318DBC83FE56A29A68AED8E3FE4F12FC15F00C13FE47AE147AE147C3FE4072F24AFB0A73FE96128962B8A153FE91D10418F0C823FE8D9AEA11BD8103FE89701CA9CF25E3FE85507D900A37C3FE813BEEC4AACF63FE7D3252986A5EA3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF02739C65D58BF3FF04ED3B73257833FF076CEBE41BF7A3FF09F2BC99051DD3FF0C7EBC96A56F63FF0F10FB06934B03FF11A98737912E13FF28332F16166A53FF2DA65B57E7F983FF33333333333333FF38DA2F91C82C43FF3E9BCB96FEDF13FF447884AA31CC03FF4A70DA8169F5C3FF7B734C33413AD3FF85899CE90E5E53FF8FE493556F45B3FF9A8602A4B50503FFA56FCA6E7E9C63FFB0A3D70A3D70B3FFBC2421E5F8F004000C58069F8993F4001586C869D8A724001F05FB6735B3840028D86049083C04003300CFDDFFAB14003D823BE552C18400485FAFE93999D4009ED592591221D400B000000000000400C1E044C616F57400D47DE6F15B0FF400E7E0BC7D3E01D400FC10EE66FE364401088B7E0E7B3FF"}} +{"expression":"pow(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FE96B230BCDC43401623FE731651F09A68E01633FE64C8E84C5F4E9"}} +{"expression":"pow(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FE96B230BCDC43401623FE731651F09A68E"}} +{"expression":"pow(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FE731651F09A68E01620362617A3FE3BEBDCC9D061B016203666F6F3FEB3E2D38A030B10163036261723FE926EFF16629A501630362617A3FE64C8E84C5F4E9016303666F6F3FEC5EC42B8B4A19"}} +{"expression":"pow(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FDC9F25C5BFEDD901620362617A3FD85DE4AA7BFC06016203666F6F3FE0CF4D9B8C79050163036261723FD86D691AD2627A01630362617A3FD5A8131B97FD82016303666F6F3FDB8D809C615F41"}} +{"expression":"pow(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FE731651F09A68E016103666F6F3FE96B230BCDC4340162036261723FE8406003B2AE5C016203666F6F3FE84F1DDC197989"}} +{"expression":"pow(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FDC9F25C5BFEDD9016103626172016A3FD85DE4AA7BFC06016103626172016B3FD4BE914A0AC752016103626172016C3FD1A91920AA33D6016103666F6F01693FE96B230BCDC434016103666F6F016A3FE430CD74F6D478016103666F6F016B3FE009B9CF334253016103666F6F016C3FD97A967F7524B301620362617201693FE6A09E667F3BCD016203626172016A3FE51CB453B9536C016203626172016B3FE3B2C47BFF8329016203626172016C3FE2611186BAE674016203666F6F01693FED32BCC99E79D2016203666F6F016A3FEAA4469FBF1206016203666F6F016B3FE84F1DDC197989016203666F6F016C3FE62E3E1817C1C4"}} +{"expression":"pow(a,b)","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FDEBFB0683CD8533FDC0E78CA02BB173FD999999999999A3FD75BCA3AE52E423FD550387FCC0E6C3FD3727E49ADFAD43FD1BE981346349E3FE543E8FBAE1CEA3FE434CDF6C1F4C83FE33333333333333FE23E6C92173EAA3FE155D686D65B7C3FE078D5A9E4CC763FDF4DACA1DA302703666F6F3FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FDF13F63C03331E3FDB8D809C615F413FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD3FE51CB453B9536C3FE3B2C47BFF8329"}} +{"expression":"pow(a,b)","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FE96B230BCDC4343FDC9F25C5BFEDD93FD5A8131B97FD823FD3727E49ADFAD43FD3B2C47BFF83290161016A3FE430CD74F6D4783FD85DE4AA7BFC063FD33333333333333FD1BE981346349E3FD2611186BAE6740161016B3FE009B9CF3342533FD4BE914A0AC7523FD105A8E6ED2C753FD030DC4EA03A733FD125FBEE2506640161016C3FD97A967F7524B33FD1A91920AA33D63FCE2EB9881431F93FCD8BE7091AE7E23FD0000000000000016201693FEE680A48D168723FEAC5EB3F7AB2F83FEA2D7BB1B6C0F13FEBE76765499C1E3FF00000000000000162016A3FECE4658B6543243FE9D5C3DF24FB633FE999999999999A3FEB9C8924C99ABC3FF00000000000000162016B3FEB740EC5D2AA1A3FE8EE06AA5599B03FE908FAEDDB9CD13FEB5273C4AE62A13FF00000000000000162016C3FEA160FDC35D2CB3FE80E68263B1BFB3FE87B8D3F012DD53FEB09252A00B5A63FF0000000000000016301693FF02739C65D58BF3FF186F174F884723FF442E9BB77515D3FF8C776772A337F3FFFE077EA4184BA0163016A3FF04ED3B73257833FF1D980099BA1493FF4CCCCCCCCCCCD3FF9A088BB80392C40009912C0E98B3D0163016B3FF076CEBE41BF7A3FF22D937B32C2D33FF55A5A3EBFA9133FFA810898CE7313400148E6190B6C130163016C3FF09F2BC99051DD3FF28332F16166A53FF5EBAB035ACD4C3FFB693721891CFE4002000000000000"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FE96B230BCDC434"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE6A09E667F3BCD"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E9"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FEB3E2D38A030B13FE731651F09A68E3FE3BEBDCC9D061B3FE0CF4D9B8C79053FDC9F25C5BFEDD93FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FED32BCC99E79D23FEAA4469FBF12063FE84F1DDC1979893FE62E3E1817C1C43FE43D136248490F3FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD85DE4AA7BFC063FD4BE914A0AC7523FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FD105A8E6ED2C753FCE2EB9881431F93FCAC2449F53F2B03FC7B93ABF4B50DD3FC50854F2C3D2223FCD8BE7091AE7E23FCAF5A24955081F3FC89959ECFD79DC3FC671FA3B35627A3FC47AE147AE147C3FCDDB680117AB123FCBDB8CDADBE11F3FC9FDF8BCCE533E3FC8406003B2AE5D3FC6A09E667F3BCD"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FE96B230BCDC4343FE731651F09A68E3FE64C8E84C5F4E93FE62E3E1817C1C43FE8C97EF43F72483FE9D5C3DF24FB633FEB5F55FBDF12BA3FED69CF10804E693FF16EDC6D3C743C3FF33333333333333FF55A5A3EBFA9133FF7F592E087B65A"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FC50854F2C3D2223FC2A593BD9B85113FC08819F76D9F8D3FBD5017B9C942F93FB9FCE3BAB663693FB70A3D70A3D70A3FB46D31151C9BBF3FC10CF9FFD671EF3FBF1D96DC4991553FBC6426853D20FD3FB9E7C6E43390B83FB7A31F3A7BECB53FB5914EA110D34B3FB3ADE18A64617E3FC125FBEE2506643FC00000000000003FBDDB680117AB123FBBDB8CDADBE11F3FB9FDF8BCCE533E3FB8406003B2AE5D3FB6A09E667F3BCD3FEE680A48D168723FECE4658B6543243FEB740EC5D2AA1A3FEA160FDC35D2CB3FE8C97EF43F72483FE78D7DD8F4883C3FE6613966362A653FE80E68263B1BFB3FE7369F7D10F6863FE66666666666663FE59D79103A1FBA3FE4DB9608E352C43FE4207E29C0D5E53FE36BF482A783413FE6E5B7D16657E23FE6645DBC0597E73FE5E5DE6318DBC83FE56A29A68AED8E3FE4F12FC15F00C13FE47AE147AE147C3FE4072F24AFB0A73FE96128962B8A153FE91D10418F0C823FE8D9AEA11BD8103FE89701CA9CF25E3FE85507D900A37C3FE813BEEC4AACF63FE7D3252986A5EA3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF02739C65D58BF3FF04ED3B73257833FF076CEBE41BF7A3FF09F2BC99051DD3FF0C7EBC96A56F63FF0F10FB06934B03FF11A98737912E13FF28332F16166A53FF2DA65B57E7F983FF33333333333333FF38DA2F91C82C43FF3E9BCB96FEDF13FF447884AA31CC03FF4A70DA8169F5C3FF7B734C33413AD3FF85899CE90E5E53FF8FE493556F45B3FF9A8602A4B50503FFA56FCA6E7E9C63FFB0A3D70A3D70B3FFBC2421E5F8F004000C58069F8993F4001586C869D8A724001F05FB6735B3840028D86049083C04003300CFDDFFAB14003D823BE552C18400485FAFE93999D4009ED592591221D400B000000000000400C1E044C616F57400D47DE6F15B0FF400E7E0BC7D3E01D400FC10EE66FE364401088B7E0E7B3FF"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FE96B230BCDC43401623FE731651F09A68E01633FE64C8E84C5F4E9"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FE96B230BCDC43401623FE731651F09A68E"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FE731651F09A68E01620362617A3FE3BEBDCC9D061B016203666F6F3FEB3E2D38A030B10163036261723FE926EFF16629A501630362617A3FE64C8E84C5F4E9016303666F6F3FEC5EC42B8B4A19"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FE430CD74F6D47801610362617A3FE009B9CF334253016103666F6F3FE96B230BCDC4340162036261723FDC9F25C5BFEDD901620362617A3FD85DE4AA7BFC06016203666F6F3FE0CF4D9B8C79050163036261723FD86D691AD2627A01630362617A3FD5A8131B97FD82016303666F6F3FDB8D809C615F41"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FE731651F09A68E016103666F6F3FE96B230BCDC4340162036261723FE8406003B2AE5C016203666F6F3FE84F1DDC197989"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FDC9F25C5BFEDD9016103626172016A3FD85DE4AA7BFC06016103626172016B3FD4BE914A0AC752016103626172016C3FD1A91920AA33D6016103666F6F01693FE96B230BCDC434016103666F6F016A3FE430CD74F6D478016103666F6F016B3FE009B9CF334253016103666F6F016C3FD97A967F7524B301620362617201693FE6A09E667F3BCD016203626172016A3FE51CB453B9536C016203626172016B3FE3B2C47BFF8329016203626172016C3FE2611186BAE674016203666F6F01693FED32BCC99E79D2016203666F6F016A3FEAA4469FBF1206016203666F6F016B3FE84F1DDC197989016203666F6F016C3FE62E3E1817C1C4"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FD1A91920AA33D63FCE11FB92951F8D3FC999999999999A3FC5CB57608026F33FC28DEA7F3AEBA63FBF9796142E702A3FBAE548F8E0C1A43FDEBFB0683CD8533FDC0E78CA02BB173FD999999999999A3FD75BCA3AE52E423FD550387FCC0E6C3FD3727E49ADFAD43FD1BE981346349E3FE543E8FBAE1CEA3FE434CDF6C1F4C83FE33333333333333FE23E6C92173EAA3FE155D686D65B7C3FE078D5A9E4CC763FDF4DACA1DA302703666F6F3FE96B230BCDC4343FE430CD74F6D4783FE009B9CF3342533FD97A967F7524B33FD43D136248490F3FD0137987DD704C3FC98A13577C93C13FEC5EC42B8B4A193FE926EFF16629A53FE64C8E84C5F4E93FE3C5064A1418B73FE186F174F884723FDF13F63C03331E3FDB8D809C615F413FEDDB680117AB123FEBDB8CDADBE1203FE9FDF8BCCE533E3FE8406003B2AE5C3FE6A09E667F3BCD3FE51CB453B9536C3FE3B2C47BFF8329"}} +{"expression":"join(a,b,f(a,b)(pow(a,b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FE96B230BCDC4343FDC9F25C5BFEDD93FD5A8131B97FD823FD3727E49ADFAD43FD3B2C47BFF83290161016A3FE430CD74F6D4783FD85DE4AA7BFC063FD33333333333333FD1BE981346349E3FD2611186BAE6740161016B3FE009B9CF3342533FD4BE914A0AC7523FD105A8E6ED2C753FD030DC4EA03A733FD125FBEE2506640161016C3FD97A967F7524B33FD1A91920AA33D63FCE2EB9881431F93FCD8BE7091AE7E23FD0000000000000016201693FEE680A48D168723FEAC5EB3F7AB2F83FEA2D7BB1B6C0F13FEBE76765499C1E3FF00000000000000162016A3FECE4658B6543243FE9D5C3DF24FB633FE999999999999A3FEB9C8924C99ABC3FF00000000000000162016B3FEB740EC5D2AA1A3FE8EE06AA5599B03FE908FAEDDB9CD13FEB5273C4AE62A13FF00000000000000162016C3FEA160FDC35D2CB3FE80E68263B1BFB3FE87B8D3F012DD53FEB09252A00B5A63FF0000000000000016301693FF02739C65D58BF3FF186F174F884723FF442E9BB77515D3FF8C776772A337F3FFFE077EA4184BA0163016A3FF04ED3B73257833FF1D980099BA1493FF4CCCCCCCCCCCD3FF9A088BB80392C40009912C0E98B3D0163016B3FF076CEBE41BF7A3FF22D937B32C2D33FF55A5A3EBFA9133FFA810898CE7313400148E6190B6C130163016C3FF09F2BC99051DD3FF28332F16166A53FF5EBAB035ACD4C3FFB693721891CFE4002000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF0000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"a==b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"a==b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001620169000000000000000000000000000000000000000000000000000000000000000000000000000000000162016A000000000000000000000000000000000000000000000000000000000000000000000000000000000162016B00000000000000003FF00000000000000000000000000000000000000000000000000000000000000162016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001630169000000000000000000000000000000000000000000000000000000000000000000000000000000000163016A0000000000000000000000000000000000000000000000003FF000000000000000000000000000000163016B000000000000000000000000000000000000000000000000000000000000000000000000000000000163016C00000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF0000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a==b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001620169000000000000000000000000000000000000000000000000000000000000000000000000000000000162016A000000000000000000000000000000000000000000000000000000000000000000000000000000000162016B00000000000000003FF00000000000000000000000000000000000000000000000000000000000000162016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001630169000000000000000000000000000000000000000000000000000000000000000000000000000000000163016A0000000000000000000000000000000000000000000000003FF000000000000000000000000000000163016B000000000000000000000000000000000000000000000000000000000000000000000000000000000163016C00000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A0000000000000000016303666F6F3FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201690000000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C0000000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"a!=b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000016201693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016B3FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A0000000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201690000000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a!=b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000016201693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016B3FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF0000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"a~=b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001620169000000000000000000000000000000000000000000000000000000000000000000000000000000000162016A000000000000000000000000000000000000000000000000000000000000000000000000000000000162016B00000000000000003FF00000000000000000000000000000000000000000000000000000000000000162016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001630169000000000000000000000000000000000000000000000000000000000000000000000000000000000163016A0000000000000000000000000000000000000000000000003FF000000000000000000000000000000163016B000000000000000000000000000000000000000000000000000000000000000000000000000000000163016C00000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF0000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F3FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a~=b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001620169000000000000000000000000000000000000000000000000000000000000000000000000000000000162016A000000000000000000000000000000000000000000000000000000000000000000000000000000000162016B00000000000000003FF00000000000000000000000000000000000000000000000000000000000000162016C0000000000000000000000000000000000000000000000000000000000000000000000000000000001630169000000000000000000000000000000000000000000000000000000000000000000000000000000000163016A0000000000000000000000000000000000000000000000003FF000000000000000000000000000000163016B000000000000000000000000000000000000000000000000000000000000000000000000000000000163016C00000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x0202017803017904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A3FF0000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"a<b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201690000000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C0000000000000000"}} +{"expression":"a<b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000001620169000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016A000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016B000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016C00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016900000000000000000000000000000000000000000000000000000000000000003FF00000000000000163016A00000000000000000000000000000000000000000000000000000000000000003FF00000000000000163016B0000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000163016C0000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x0202017803017904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A3FF0000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201690000000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000001620169000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016A000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016B000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016C00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016900000000000000000000000000000000000000000000000000000000000000003FF00000000000000163016A00000000000000000000000000000000000000000000000000000000000000003FF00000000000000163016B0000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000163016C0000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01693FF0000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a<=b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000001620169000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016A000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016B00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016C00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016900000000000000000000000000000000000000000000000000000000000000003FF00000000000000163016A0000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000163016B0000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000163016C0000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01693FF0000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C3FF000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a<=b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000001620169000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016A000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000000162016B00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016C00000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016900000000000000000000000000000000000000000000000000000000000000003FF00000000000000163016A0000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000163016B0000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000163016C0000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x0202017805017905000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a>b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A0000000000000000016303666F6F3FF0000000000000"}} +{"expression":"a>b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"a>b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201690000000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C0000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a>b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C01610169000000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C00000000000000000000000000000000000000000000000000000000000000000000000000000000016201693FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016A3FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016B3FF000000000000000000000000000000000000000000000000000000000000000000000000000000162016C3FF00000000000000000000000000000000000000000000000000000000000000000000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000163016A3FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000163016B3FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000163016C3FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x0202017805017905000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A0000000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F0000000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201690000000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C01610169000000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C00000000000000000000000000000000000000000000000000000000000000000000000000000000016201693FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016A3FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016B3FF000000000000000000000000000000000000000000000000000000000000000000000000000000162016C3FF00000000000000000000000000000000000000000000000000000000000000000000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000163016A3FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000163016B3FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000163016C3FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A0000000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF0000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F3FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"a>=b","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C00000000000000000000000000000000000000000000000000000000000000000000000000000000016201693FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016A3FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016B3FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016C3FF00000000000000000000000000000000000000000000000000000000000000000000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000163016A3FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000163016B3FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000163016C3FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FF000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FF000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF00000000000000162036261723FF000000000000001620362617A0000000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F3FF0000000000000016203626172000000000000000001620362617A0000000000000000016203666F6F0000000000000000016303626172000000000000000001630362617A0000000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F3FF00000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201690000000000000000016103626172016A0000000000000000016103626172016B0000000000000000016103626172016C0000000000000000016103666F6F01693FF0000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A0000000000000000016203626172016B0000000000000000016203626172016C0000000000000000016203666F6F01693FF0000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A07020362617200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003666F6F3FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a>=b))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FF000000000000000000000000000000000000000000000000000000000000000000000000000000161016A000000000000000000000000000000000000000000000000000000000000000000000000000000000161016B000000000000000000000000000000000000000000000000000000000000000000000000000000000161016C00000000000000000000000000000000000000000000000000000000000000000000000000000000016201693FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016A3FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016B3FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000162016C3FF00000000000000000000000000000000000000000000000000000000000000000000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000163016A3FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000000163016B3FF00000000000003FF00000000000003FF0000000000000000000000000000000000000000000000163016C3FF00000000000003FF00000000000003FF000000000000000000000000000000000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x02000000000000000000","b":"0x02000000000000000000"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780300000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x020101780300000000000000003FF00000000000003FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101790500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x02020178050179050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x0202017805017905000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x020201780401790400000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x020201780301790400000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0202017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178020161000000000000000001623FF0000000000000"},"result":{"expect":"0x01010178020161000000000000000001623FF0000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x0101017903036261723FF00000000000000362617A3FF000000000000003666F6F0000000000000000"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x010201780179060161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x01020179017A080362617201693FF000000000000003626172016A3FF000000000000003626172016B000000000000000003626172016C3FF000000000000003666F6F0169000000000000000003666F6F016A3FF000000000000003666F6F016B3FF000000000000003666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B0000000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B0000000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C0000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x030101790101780302036261723FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF0000000000000","b":"0x0301017901017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000003666F6F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"a&&b","inputs":{"a":"0x030101780101790503016100000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000001623FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000001633FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0301017A0101790504016900000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000016B3FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000161016A00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000161016B000000000000000000000000000000003FF0000000000000000000000000000000000000000000000161016C00000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000001620169000000000000000000000000000000003FF0000000000000000000000000000000000000000000000162016A3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016B3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000162016C000000000000000000000000000000003FF0000000000000000000000000000000000000000000000163016900000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000163016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000163016B3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000163016C00000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x02000000000000000000","b":"0x02000000000000000000"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780300000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x020101780300000000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101790500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x02020178050179050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x0202017805017905000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x020201780401790400000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x020201780301790400000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0202017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178020161000000000000000001623FF0000000000000"},"result":{"expect":"0x01010178020161000000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x0101017903036261723FF00000000000000362617A3FF000000000000003666F6F0000000000000000"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"},"result":{"expect":"0x01020178017909016103626172000000000000000001610362617A0000000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x010201780179060161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x01020179017A080362617201693FF000000000000003626172016A3FF000000000000003626172016B000000000000000003626172016C3FF000000000000003666F6F0169000000000000000003666F6F016A3FF000000000000003666F6F016B3FF000000000000003666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B0000000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A0000000000000000016103666F6F016B0000000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B0000000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B0000000000000000016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x030101790101780302036261723FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF0000000000000","b":"0x0301017901017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000003666F6F000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a&&b))","inputs":{"a":"0x030101780101790503016100000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000001623FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000001633FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0301017A0101790504016900000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000016B3FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000161016A00000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000161016B000000000000000000000000000000003FF0000000000000000000000000000000000000000000000161016C00000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000001620169000000000000000000000000000000003FF0000000000000000000000000000000000000000000000162016A3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000162016B3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000162016C000000000000000000000000000000003FF0000000000000000000000000000000000000000000000163016900000000000000003FF0000000000000000000000000000000000000000000003FF00000000000000163016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000163016B3FF0000000000000000000000000000000000000000000003FF000000000000000000000000000000163016C00000000000000003FF0000000000000000000000000000000000000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x02000000000000000000","b":"0x02000000000000000000"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"a||b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780300000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x020101780300000000000000003FF00000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101790500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x020201780401790400000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x020201780301790400000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0202017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178020161000000000000000001623FF0000000000000"},"result":{"expect":"0x01010178020161000000000000000001623FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x0101017903036261723FF00000000000000362617A3FF000000000000003666F6F0000000000000000"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x010201780179060161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F00000000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x01020179017A080362617201693FF000000000000003626172016A3FF000000000000003626172016B000000000000000003626172016C3FF000000000000003666F6F0169000000000000000003666F6F016A3FF000000000000003666F6F016B3FF000000000000003666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C0000000000000000"}} +{"expression":"a||b","inputs":{"a":"0x030101790101780302036261723FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF0000000000000","b":"0x0301017901017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"a||b","inputs":{"a":"0x030101780101790503016100000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000001623FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000001633FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0301017A0101790504016900000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000016B3FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016201693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016B3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000162016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x02000000000000000000","b":"0x02000000000000000000"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101780300000000000000003FF00000000000003FF0000000000000"},"result":{"expect":"0x020101780300000000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020101790500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x020101780500000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000","b":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x020201780501790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x020201780401790400000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x020201780301790400000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x020201780301790500000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0202017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"},"result":{"expect":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x01010178020161000000000000000001623FF0000000000000"},"result":{"expect":"0x01010178020161000000000000000001623FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x0101017903036261723FF00000000000000362617A3FF000000000000003666F6F0000000000000000"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x01010178030161000000000000000001623FF000000000000001633FF0000000000000","b":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F00000000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F0000000000000000"},"result":{"expect":"0x010201780179090161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F3FF00000000000000163036261723FF000000000000001630362617A3FF0000000000000016303666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x010201780179060161036261723FF0000000000000016103666F6F00000000000000000162036261720000000000000000016203666F6F3FF00000000000000163036261723FF0000000000000016303666F6F3FF0000000000000"},"result":{"expect":"0x010201780179040161036261723FF0000000000000016103666F6F00000000000000000162036261723FF0000000000000016203666F6F3FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x010201780179060161036261723FF000000000000001610362617A3FF0000000000000016103666F6F00000000000000000162036261723FF000000000000001620362617A3FF0000000000000016203666F6F0000000000000000","b":"0x01020179017A080362617201693FF000000000000003626172016A3FF000000000000003626172016B000000000000000003626172016C3FF000000000000003666F6F0169000000000000000003666F6F016A3FF000000000000003666F6F016B3FF000000000000003666F6F016C0000000000000000"},"result":{"expect":"0x010301780179017A1001610362617201693FF0000000000000016103626172016A3FF0000000000000016103626172016B3FF0000000000000016103626172016C3FF0000000000000016103666F6F01690000000000000000016103666F6F016A3FF0000000000000016103666F6F016B3FF0000000000000016103666F6F016C000000000000000001620362617201693FF0000000000000016203626172016A3FF0000000000000016203626172016B3FF0000000000000016203626172016C3FF0000000000000016203666F6F01690000000000000000016203666F6F016A3FF0000000000000016203666F6F016B3FF0000000000000016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x030101790101780302036261723FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF0000000000000","b":"0x0301017901017A0702036261723FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000"},"result":{"expect":"0x0301017902017803017A0702036261723FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF000000000000003666F6F00000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"join(a,b,f(a,b)(a||b))","inputs":{"a":"0x030101780101790503016100000000000000003FF00000000000003FF000000000000000000000000000003FF000000000000001623FF000000000000000000000000000003FF00000000000003FF0000000000000000000000000000001633FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000","b":"0x0301017A0101790504016900000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF0000000000000016B3FF000000000000000000000000000003FF00000000000003FF00000000000000000000000000000016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FF00000000000003FF000000000000000000000000000003FF00000000000000161016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000161016C00000000000000003FF00000000000003FF000000000000000000000000000003FF0000000000000016201693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016A3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000162016B3FF000000000000000000000000000003FF00000000000003FF000000000000000000000000000000162016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000016301693FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016A3FF00000000000003FF000000000000000000000000000003FF00000000000003FF00000000000000163016B3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000000163016C3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF0000000000000"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FE921FB54442D183FE921FB54442D183FE921FB54442D183FE921FB54442D183FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FE921FB54442D183FE921FB54442D183FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FF1B6E192EBBE443FE921FB54442D183FE2D0EAD60663963FDDAC670561BB4F3FD85A376B677DC03FF3FC176B7A85603FEF730BD281F69B3FE921FB54442D183FE4978FA3269EE13FE14B1DD5F90CE13FF5368C951E9CFD3FF1B6E192EBBE443FEDAC670561BB503FE921FB54442D183FE5977A5103EA933FF5F973152548573FF30B6D796A4DA83FF07C6C6947A6A83FECAC7C57846F9E3FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FD4978FA3269EE23FD1CFA95F7A8DCF3FCF5B75F92C80DD3FCBFD581196F5C23FC94441F8F7260C3FD10A4608E628493FCF5B75F92C80DD3FCD07BEA194B9913FCB051B394C33AB3FC94441F8F7260B3FCF5B75F92C80DD3FCD94610502338C3FCBFD581196F5C23FCA8F3C814A92D73FC94441F8F7260C3FCDEB4BEABF5A573FCC9AE19AA8FE1E3FCB665729A20CE23FCA4A6567A8DCF43FC94441F8F7260B"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FE921FB54442D183FE921FB54442D183FE921FB54442D183FE921FB54442D183FEC08AAE496EFA63FEB96E5A78C5C513FEB434EE31013FD3FEB034F38649C873FEC5277A4A086A23FEC08AAE496EFA63FEBCB1321414BE03FEB96E5A78C5C51"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FC52397843C9ADE3FC229AEC47638DD3FCF5B75F92C80DD3FCBFD581196F5C23FC94441F8F7260C3FC7057081D704E63FC52397843C9ADE3FC38A03609B65453FC229AEC47638DD3FC94441F8F7260B3FC7B97B4BCE5B023FC65BA89B2161AB3FC52397843C9ADD3FC40B87C210A2E53FC30ED367D7CD043FC229AEC47638DC3FC7057081D704E63FC60A593E8618943FC52397843C9ADE3FC44ED0CD36E62E3FC38A03609B65453FC2D376AB2BDC173FC229AEC47638DD3FC5DAA6C2C7EF143FC52397843C9ADD3FC47808811538043FC3D6EEE8C6626C3FC33F5EF6C590243FC2B08797D7AFC63FC229AEC47638DD3FF67D8863BC99BD3FF3FC176B7A85603FF1B6E192EBBE443FEF730BD281F69B3FEC08AAE496EFA63FE921FB54442D183FE6AD1100FBFDDF3FE700A7C57846333FE5274400EEA72A3FE38B112D7BD4AD3FE222A54FDE6FA73FE0E5FC62BB05C33FDF9CBC4269AB2A3FDDAC670561BB4F3FDF5B75F92C80DE3FDDAC670561BB4F3FDC266181253B883FDAC42FFA7BCBCF3FD9816449B6FD543FD85A376B677DC03FD74B6E64A9083C3FD8DA36C0BE6CAA3FD7DF07E4BC36343FD6F61941E4DEF13FD61D9527631EA93FD553DFE7B697BA3FD4978FA3269EE13FD3E765551408AD3FD540765A5B20A23FD4978FA3269EE13FD3F87F84C579703FD362773707EBCC3FD2D4BD36A057653FD24EAAB4C991EE3FD1CFA95F7A8DCE3FF7AEA38C1ACBD13FF6414D44094C7C3FF4DF69D20AA3063FF38D6A6CE133533FF24E83FA9B4E483FF124A857547B083FF010A8AC54F5453FEF730BD281F69B3FEDAC670561BB4F3FEC08AAE496EFA63FEA85EE761A35A13FE921FB54442D183FE7DA79F20CC4433FE6AD1100FBFDDF3FE6D9D4BC9D58283FE5D58987169B183FE4E41E9E3C36163FE403F933FEDF173FE3339C815096583FE271AA72553ED53FE1BCE31303A0353FE222A54FDE6FA73FE17F4B4FADFC703FE0E5FC62BB05C33FE055EB9AF3EB4A3FDF9CBC4269AB2A3FDE9D53842EF0533FDDAC670561BB4F3FDE8CD3A58C421F3FDDAC670561BB4F3FDCD7A29A45A6ED3FDC0DB4C94EC9EF3FDB4DDD66A37B403FDA976C28F401F63FD9E9BF3D20DC71"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FE921FB54442D1801623FE921FB54442D1801633FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FE921FB54442D1801623FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FDDAC670561BB4F01610362617A3FD4978FA3269EE2016103666F6F3FE921FB54442D180162036261723FE921FB54442D1801620362617A3FE2D0EAD6066396016203666F6F3FF1B6E192EBBE440163036261723FEF730BD281F69B01630362617A3FE921FB54442D18016303666F6F3FF3FC176B7A8560"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FDDAC670561BB4F01610362617A3FD4978FA3269EE2016103666F6F3FE921FB54442D180162036261723FD85A376B677DC001620362617A3FD4978FA3269EE2016203666F6F3FDDAC670561BB4F0163036261723FD6F61941E4DEF001630362617A3FD4978FA3269EE1016303666F6F3FD9E9BF3D20DC71"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FE921FB54442D18016103666F6F3FE921FB54442D180162036261723FECAC7C57846F9E016203666F6F3FEDAC670561BB50"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FD85A376B677DC0016103626172016A3FD4978FA3269EE2016103626172016B3FD1CFA95F7A8DCF016103626172016C3FCF5B75F92C80DD016103666F6F01693FE921FB54442D18016103666F6F016A3FDDAC670561BB4F016103666F6F016B3FD4978FA3269EE2016103666F6F016C3FCF5B75F92C80DD01620362617201693FE921FB54442D18016203626172016A3FE63B4BC3F16A8B016203626172016B3FE3D91573350661016203626172016C3FE1E00BABDEFEB4016203666F6F01693FF5368C951E9CFD016203666F6F016A3FF1B6E192EBBE44016203666F6F016B3FEDAC670561BB50016203666F6F016C3FE921FB54442D18"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FCF5B75F92C80DD3FCBFD581196F5C23FC94441F8F7260C3FC7057081D704E63FC52397843C9ADE3FC38A03609B65453FC229AEC47638DD3FDDAC670561BB4F3FDAC42FFA7BCBCF3FD85A376B677DC03FD652439D8BE7153FD4978FA3269EE23FD31A9B43436DE13FD1CFA95F7A8DCF3FE4978FA3269EE13FE2D0EAD60663953FE14B1DD5F90CE13FDFF54BF3BEC8423FDDAC670561BB4F3FDBAC91A9A723ED3FD9E9BF3D20DC7103666F6F3FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FC52397843C9ADE3FC229AEC47638DD3FF3FC176B7A85603FEF730BD281F69B3FE921FB54442D183FE4978FA3269EE13FE14B1DD5F90CE13FDDAC670561BB4F3FD9E9BF3D20DC713FF5F973152548573FF30B6D796A4DA83FF07C6C6947A6A83FECAC7C57846F9E3FE921FB54442D183FE63B4BC3F16A8B3FE3D91573350661"}} +{"expression":"atan2(a,b)","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FE921FB54442D183FD85A376B677DC03FD4978FA3269EE13FD31A9B43436DE13FD24EAAB4C991EE0161016A3FDDAC670561BB4F3FD4978FA3269EE23FD2A73A661EAF063FD1CFA95F7A8DCF3FD15731754A18210161016B3FD4978FA3269EE23FD1CFA95F7A8DCF3FD10A4608E628493FD0ADB5A7741C043FD077FDE3124EAA0161016C3FCF5B75F92C80DD3FCF5B75F92C80DD3FCF5B75F92C80DD3FCF5B75F92C80DD3FCF5B75F92C80DD016201693FF67D8863BC99BD3FEE6AE1355353CF3FE740A77023BDA93FE3609F33CE6BDF3FE103E230EBECF30162016A3FF3FC176B7A85603FEB96E5A78C5C513FE5977A5103EA933FE2486589DBA9E03FE03A26A486E6310162016B3FF1B6E192EBBE443FE921FB54442D183FE41F1963C0045F3FE14B1DD5F90CE13FDF01AFB73642BE0162016C3FEF730BD281F69B3FE700A7C57846333FE2D0EAD60663963FE0657E94DB30D03FDDAC670561BB4F016301693FF7AEA38C1ACBD13FF2D0EAD60663953FEEE35774B9EE523FEA514023A34D203FE722A598D15D3A0163016A3FF6414D44094C7C3FF1B6E192EBBE443FED488143AD8C443FE921FB54442D183FE63B4BC3F16A8A0163016B3FF4DF69D20AA3063FF0AEFD22E6AA373FEBCB1321414BE03FE8079C6293AEDF3FE562A07DC47C8F0163016C3FF38D6A6CE133533FEF730BD281F69B3FEA697CB67B95EE3FE700A7C57846333FE4978FA3269EE1"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FE921FB54442D183FE921FB54442D183FE921FB54442D183FE921FB54442D183FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FE921FB54442D183FE921FB54442D183FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FF1B6E192EBBE443FE921FB54442D183FE2D0EAD60663963FDDAC670561BB4F3FD85A376B677DC03FF3FC176B7A85603FEF730BD281F69B3FE921FB54442D183FE4978FA3269EE13FE14B1DD5F90CE13FF5368C951E9CFD3FF1B6E192EBBE443FEDAC670561BB503FE921FB54442D183FE5977A5103EA933FF5F973152548573FF30B6D796A4DA83FF07C6C6947A6A83FECAC7C57846F9E3FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FD4978FA3269EE23FD1CFA95F7A8DCF3FCF5B75F92C80DD3FCBFD581196F5C23FC94441F8F7260C3FD10A4608E628493FCF5B75F92C80DD3FCD07BEA194B9913FCB051B394C33AB3FC94441F8F7260B3FCF5B75F92C80DD3FCD94610502338C3FCBFD581196F5C23FCA8F3C814A92D73FC94441F8F7260C3FCDEB4BEABF5A573FCC9AE19AA8FE1E3FCB665729A20CE23FCA4A6567A8DCF43FC94441F8F7260B"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FE921FB54442D183FE921FB54442D183FE921FB54442D183FE921FB54442D183FEC08AAE496EFA63FEB96E5A78C5C513FEB434EE31013FD3FEB034F38649C873FEC5277A4A086A23FEC08AAE496EFA63FEBCB1321414BE03FEB96E5A78C5C51"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FC52397843C9ADE3FC229AEC47638DD3FCF5B75F92C80DD3FCBFD581196F5C23FC94441F8F7260C3FC7057081D704E63FC52397843C9ADE3FC38A03609B65453FC229AEC47638DD3FC94441F8F7260B3FC7B97B4BCE5B023FC65BA89B2161AB3FC52397843C9ADD3FC40B87C210A2E53FC30ED367D7CD043FC229AEC47638DC3FC7057081D704E63FC60A593E8618943FC52397843C9ADE3FC44ED0CD36E62E3FC38A03609B65453FC2D376AB2BDC173FC229AEC47638DD3FC5DAA6C2C7EF143FC52397843C9ADD3FC47808811538043FC3D6EEE8C6626C3FC33F5EF6C590243FC2B08797D7AFC63FC229AEC47638DD3FF67D8863BC99BD3FF3FC176B7A85603FF1B6E192EBBE443FEF730BD281F69B3FEC08AAE496EFA63FE921FB54442D183FE6AD1100FBFDDF3FE700A7C57846333FE5274400EEA72A3FE38B112D7BD4AD3FE222A54FDE6FA73FE0E5FC62BB05C33FDF9CBC4269AB2A3FDDAC670561BB4F3FDF5B75F92C80DE3FDDAC670561BB4F3FDC266181253B883FDAC42FFA7BCBCF3FD9816449B6FD543FD85A376B677DC03FD74B6E64A9083C3FD8DA36C0BE6CAA3FD7DF07E4BC36343FD6F61941E4DEF13FD61D9527631EA93FD553DFE7B697BA3FD4978FA3269EE13FD3E765551408AD3FD540765A5B20A23FD4978FA3269EE13FD3F87F84C579703FD362773707EBCC3FD2D4BD36A057653FD24EAAB4C991EE3FD1CFA95F7A8DCE3FF7AEA38C1ACBD13FF6414D44094C7C3FF4DF69D20AA3063FF38D6A6CE133533FF24E83FA9B4E483FF124A857547B083FF010A8AC54F5453FEF730BD281F69B3FEDAC670561BB4F3FEC08AAE496EFA63FEA85EE761A35A13FE921FB54442D183FE7DA79F20CC4433FE6AD1100FBFDDF3FE6D9D4BC9D58283FE5D58987169B183FE4E41E9E3C36163FE403F933FEDF173FE3339C815096583FE271AA72553ED53FE1BCE31303A0353FE222A54FDE6FA73FE17F4B4FADFC703FE0E5FC62BB05C33FE055EB9AF3EB4A3FDF9CBC4269AB2A3FDE9D53842EF0533FDDAC670561BB4F3FDE8CD3A58C421F3FDDAC670561BB4F3FDCD7A29A45A6ED3FDC0DB4C94EC9EF3FDB4DDD66A37B403FDA976C28F401F63FD9E9BF3D20DC71"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FE921FB54442D1801623FE921FB54442D1801633FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FE921FB54442D1801623FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FDDAC670561BB4F01610362617A3FD4978FA3269EE2016103666F6F3FE921FB54442D180162036261723FE921FB54442D1801620362617A3FE2D0EAD6066396016203666F6F3FF1B6E192EBBE440163036261723FEF730BD281F69B01630362617A3FE921FB54442D18016303666F6F3FF3FC176B7A8560"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FDDAC670561BB4F01610362617A3FD4978FA3269EE2016103666F6F3FE921FB54442D180162036261723FD85A376B677DC001620362617A3FD4978FA3269EE2016203666F6F3FDDAC670561BB4F0163036261723FD6F61941E4DEF001630362617A3FD4978FA3269EE1016303666F6F3FD9E9BF3D20DC71"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FE921FB54442D18016103666F6F3FE921FB54442D180162036261723FECAC7C57846F9E016203666F6F3FEDAC670561BB50"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FD85A376B677DC0016103626172016A3FD4978FA3269EE2016103626172016B3FD1CFA95F7A8DCF016103626172016C3FCF5B75F92C80DD016103666F6F01693FE921FB54442D18016103666F6F016A3FDDAC670561BB4F016103666F6F016B3FD4978FA3269EE2016103666F6F016C3FCF5B75F92C80DD01620362617201693FE921FB54442D18016203626172016A3FE63B4BC3F16A8B016203626172016B3FE3D91573350661016203626172016C3FE1E00BABDEFEB4016203666F6F01693FF5368C951E9CFD016203666F6F016A3FF1B6E192EBBE44016203666F6F016B3FEDAC670561BB50016203666F6F016C3FE921FB54442D18"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FCF5B75F92C80DD3FCBFD581196F5C23FC94441F8F7260C3FC7057081D704E63FC52397843C9ADE3FC38A03609B65453FC229AEC47638DD3FDDAC670561BB4F3FDAC42FFA7BCBCF3FD85A376B677DC03FD652439D8BE7153FD4978FA3269EE23FD31A9B43436DE13FD1CFA95F7A8DCF3FE4978FA3269EE13FE2D0EAD60663953FE14B1DD5F90CE13FDFF54BF3BEC8423FDDAC670561BB4F3FDBAC91A9A723ED3FD9E9BF3D20DC7103666F6F3FE921FB54442D183FDDAC670561BB4F3FD4978FA3269EE23FCF5B75F92C80DD3FC94441F8F7260C3FC52397843C9ADE3FC229AEC47638DD3FF3FC176B7A85603FEF730BD281F69B3FE921FB54442D183FE4978FA3269EE13FE14B1DD5F90CE13FDDAC670561BB4F3FD9E9BF3D20DC713FF5F973152548573FF30B6D796A4DA83FF07C6C6947A6A83FECAC7C57846F9E3FE921FB54442D183FE63B4BC3F16A8B3FE3D91573350661"}} +{"expression":"join(a,b,f(a,b)(atan2(a,b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FE921FB54442D183FD85A376B677DC03FD4978FA3269EE13FD31A9B43436DE13FD24EAAB4C991EE0161016A3FDDAC670561BB4F3FD4978FA3269EE23FD2A73A661EAF063FD1CFA95F7A8DCF3FD15731754A18210161016B3FD4978FA3269EE23FD1CFA95F7A8DCF3FD10A4608E628493FD0ADB5A7741C043FD077FDE3124EAA0161016C3FCF5B75F92C80DD3FCF5B75F92C80DD3FCF5B75F92C80DD3FCF5B75F92C80DD3FCF5B75F92C80DD016201693FF67D8863BC99BD3FEE6AE1355353CF3FE740A77023BDA93FE3609F33CE6BDF3FE103E230EBECF30162016A3FF3FC176B7A85603FEB96E5A78C5C513FE5977A5103EA933FE2486589DBA9E03FE03A26A486E6310162016B3FF1B6E192EBBE443FE921FB54442D183FE41F1963C0045F3FE14B1DD5F90CE13FDF01AFB73642BE0162016C3FEF730BD281F69B3FE700A7C57846333FE2D0EAD60663963FE0657E94DB30D03FDDAC670561BB4F016301693FF7AEA38C1ACBD13FF2D0EAD60663953FEEE35774B9EE523FEA514023A34D203FE722A598D15D3A0163016A3FF6414D44094C7C3FF1B6E192EBBE443FED488143AD8C443FE921FB54442D183FE63B4BC3F16A8A0163016B3FF4DF69D20AA3063FF0AEFD22E6AA373FEBCB1321414BE03FE8079C6293AEDF3FE562A07DC47C8F0163016C3FF38D6A6CE133533FEF730BD281F69B3FEA697CB67B95EE3FE700A7C57846333FE4978FA3269EE1"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FF999999999999A40000000000000004000000000000000400000000000000040000000000000004000000000000000"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF199999999999A40033333333333334004CCCCCCCCCCCD4006666666666666"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FF33333333333333FF33333333333333FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A40000000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000003FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE66666666666663FE66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A400999999999999A400999999999999A400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD40100000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000003FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF33333333333333FF3333333333333400333333333333340033333333333334003333333333333400333333333333340033333333333334004CCCCCCCCCCCD4004CCCCCCCCCCCD4004CCCCCCCCCCCD4004CCCCCCCCCCCD4004CCCCCCCCCCCD4014CCCCCCCCCCCD4014CCCCCCCCCCCD40166666666666664016666666666666401666666666666640166666666666664016666666666666401666666666666640166666666666664018000000000000402800000000000040280000000000004028000000000000402800000000000040280000000000004028000000000000"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FB999999999999A01623FC999999999999A"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FE0000000000000016203666F6F3FD999999999999A"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201693FE0000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01693FD999999999999A016203666F6F016A3FD999999999999A016203666F6F016B3FD999999999999A016203666F6F016C3FD999999999999A"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE33333333333333FE33333333333333FF33333333333333FF33333333333333FF33333333333333FF33333333333333FF333333333333303666F6F3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"ldexp(a,b)","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FC999999999999A3FD33333333333333FE999999999999A3FF00000000000000161016A3FB999999999999A3FC999999999999A3FE33333333333333FE999999999999A3FF00000000000000161016B3FB999999999999A3FC999999999999A3FE33333333333333FE999999999999A3FF00000000000000161016C3FB999999999999A3FC999999999999A3FE33333333333333FE999999999999A4000000000000000016201693FE33333333333333FE66666666666663FE999999999999A3FFCCCCCCCCCCCCD40000000000000000162016A3FE33333333333333FE66666666666663FF999999999999A3FFCCCCCCCCCCCCD40000000000000000162016B3FE33333333333333FE66666666666663FF999999999999A3FFCCCCCCCCCCCCD40000000000000000162016C3FE33333333333333FE66666666666663FF999999999999A3FFCCCCCCCCCCCCD4010000000000000016301693FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD400666666666666640080000000000000163016A3FF199999999999A3FF33333333333334004CCCCCCCCCCCD400666666666666640080000000000000163016B3FF199999999999A3FF33333333333334004CCCCCCCCCCCD400666666666666640080000000000000163016C3FF199999999999A3FF33333333333334004CCCCCCCCCCCD40066666666666664018000000000000"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FF999999999999A40000000000000004000000000000000400000000000000040000000000000004000000000000000"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF199999999999A40033333333333334004CCCCCCCCCCCD4006666666666666"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FF33333333333333FF33333333333333FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A40000000000000004010000000000000401000000000000040100000000000004010000000000000401000000000000040100000000000003FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE66666666666663FE66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A3FF999999999999A400999999999999A400999999999999A400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD400CCCCCCCCCCCCD40100000000000004020000000000000402000000000000040200000000000004020000000000000402000000000000040200000000000003FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF33333333333333FF3333333333333400333333333333340033333333333334003333333333333400333333333333340033333333333334004CCCCCCCCCCCD4004CCCCCCCCCCCD4004CCCCCCCCCCCD4004CCCCCCCCCCCD4004CCCCCCCCCCCD4014CCCCCCCCCCCD4014CCCCCCCCCCCD40166666666666664016666666666666401666666666666640166666666666664016666666666666401666666666666640166666666666664018000000000000402800000000000040280000000000004028000000000000402800000000000040280000000000004028000000000000"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FB999999999999A01623FC999999999999A"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FE0000000000000016203666F6F3FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201693FE0000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01693FD999999999999A016203666F6F016A3FD999999999999A016203666F6F016B3FD999999999999A016203666F6F016C3FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE33333333333333FE33333333333333FF33333333333333FF33333333333333FF33333333333333FF33333333333333FF333333333333303666F6F3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(ldexp(a,b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FC999999999999A3FD33333333333333FE999999999999A3FF00000000000000161016A3FB999999999999A3FC999999999999A3FE33333333333333FE999999999999A3FF00000000000000161016B3FB999999999999A3FC999999999999A3FE33333333333333FE999999999999A3FF00000000000000161016C3FB999999999999A3FC999999999999A3FE33333333333333FE999999999999A4000000000000000016201693FE33333333333333FE66666666666663FE999999999999A3FFCCCCCCCCCCCCD40000000000000000162016A3FE33333333333333FE66666666666663FF999999999999A3FFCCCCCCCCCCCCD40000000000000000162016B3FE33333333333333FE66666666666663FF999999999999A3FFCCCCCCCCCCCCD40000000000000000162016C3FE33333333333333FE66666666666663FF999999999999A3FFCCCCCCCCCCCCD4010000000000000016301693FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD400666666666666640080000000000000163016A3FF199999999999A3FF33333333333334004CCCCCCCCCCCD400666666666666640080000000000000163016B3FF199999999999A3FF33333333333334004CCCCCCCCCCCD400666666666666640080000000000000163016C3FF199999999999A3FF33333333333334004CCCCCCCCCCCD40066666666666664018000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A000000000000000000000000000000003FC999999999999A3FC999999999999A3FC999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD3333333333333000000000000000000000000000000003FB999999999999C00000000000000003FD999999999999A3FB99999999999983FB99999999999983FC999999999999A3FB99999999999980000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FB99999999999983FB99999999999983FB99999999999A03FB99999999999983FC999999999999C3FC99999999999983FC99999999999983FC9999999999998"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FB99999999999963FC999999999999800000000000000003FC99999999999983FB999999999999800000000000000003FE33333333333333FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003C800000000000003FB999999999999C3FC999999999999E3FD33333333333343FB99999999999A03FE00000000000013FD999999999999C3FD99999999999983FD33333333333323FC99999999999983FB999999999999000000000000000003FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F0000000000000000016203626172000000000000000001620362617A3FC999999999999A016203666F6F00000000000000000163036261723FB999999999999801630362617A0000000000000000016303666F6F3FB9999999999998"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F00000000000000000162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FB9999999999998016203666F6F3FB999999999999C"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01690000000000000000016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201690000000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B3FB999999999999C016203666F6F016C0000000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE333333333333303666F6F00000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD33333333333333FD33333333333333FD33333333333333FB99999999999983FB99999999999983FC999999999999A3FB999999999999800000000000000003FE00000000000003FE0000000000000"}} +{"expression":"fmod(a,b)","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016B3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016C3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000016201693FB99999999999963FC99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016A3FC99999999999983FB99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016B000000000000000000000000000000003FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016C3FC99999999999983FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000016301693C800000000000003FC99999999999983FD999999999999A3FB99999999999903FF80000000000000163016A3FB999999999999C00000000000000003FD333333333333400000000000000003FF80000000000000163016B3FC999999999999E3FE00000000000003FC99999999999983FF66666666666663FF80000000000000163016C3FD33333333333343FD99999999999983FB99999999999A03FF66666666666663FF8000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02000000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020101780500000000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x0201017803000000000000000000000000000000000000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A000000000000000000000000000000003FC999999999999A3FC999999999999A3FC999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD3333333333333000000000000000000000000000000003FB999999999999C00000000000000003FD999999999999A3FB99999999999983FB99999999999983FC999999999999A3FB99999999999980000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x020201780501790500000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x020201780301790400000000000000000000000000000000000000000000000000000000000000003FB99999999999983FB99999999999983FB99999999999A03FB99999999999983FC999999999999C3FC99999999999983FC99999999999983FC9999999999998"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A0700000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FB99999999999963FC999999999999800000000000000003FC99999999999983FB999999999999800000000000000003FE33333333333333FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003C800000000000003FB999999999999C3FC999999999999E3FD33333333333343FB99999999999A03FE00000000000013FD999999999999C3FD99999999999983FD33333333333323FC99999999999983FB999999999999000000000000000003FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x0101017803016100000000000000000162000000000000000001630000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x01010178020161000000000000000001620000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F0000000000000000016203626172000000000000000001620362617A3FC999999999999A016203666F6F00000000000000000163036261723FB999999999999801630362617A0000000000000000016303666F6F3FB9999999999998"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F00000000000000000162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261720000000000000000016103666F6F00000000000000000162036261723FB9999999999998016203666F6F3FB999999999999C"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01690000000000000000016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201690000000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01690000000000000000016203666F6F016A0000000000000000016203666F6F016B3FB999999999999C016203666F6F016C0000000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE333333333333303666F6F00000000000000003FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB99999999999983FB999999999999800000000000000003FD33333333333333FD33333333333333FD33333333333333FD33333333333333FB99999999999983FB99999999999983FC999999999999A3FB999999999999800000000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(fmod(a,b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C0161016900000000000000003FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016B3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016C3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000016201693FB99999999999963FC99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016A3FC99999999999983FB99999999999983FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016B000000000000000000000000000000003FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016C3FC99999999999983FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000016301693C800000000000003FC99999999999983FD999999999999A3FB99999999999903FF80000000000000163016A3FB999999999999C00000000000000003FD333333333333400000000000000003FF80000000000000163016B3FC999999999999E3FE00000000000003FC99999999999983FF66666666666663FF80000000000000163016C3FD33333333333343FD99999999999983FB99999999999A03FF66666666666663FF8000000000000"}} +{"expression":"min(a,b)","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"min(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"min(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"min(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FB999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FD999999999999A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"min(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"min(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF3333333333333"}} +{"expression":"min(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE33333333333333FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000000000000"}} +{"expression":"min(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"min(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FB999999999999A01623FC999999999999A"}} +{"expression":"min(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FB999999999999A0163036261723FC999999999999A01630362617A3FD3333333333333016303666F6F3FB999999999999A"}} +{"expression":"min(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"min(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD3333333333333"}} +{"expression":"min(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201693FE0000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01693FB999999999999A016203666F6F016A3FC999999999999A016203666F6F016B3FD3333333333333016203666F6F016C3FD999999999999A"}} +{"expression":"min(a,b)","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE333333333333303666F6F3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"min(a,b)","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016B3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016C3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000016201693FB999999999999A3FE00000000000003FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016A3FC999999999999A3FE33333333333333FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016B3FD33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016C3FD999999999999A3FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000016301693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF80000000000000163016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FF80000000000000163016B3FD33333333333333FE66666666666663FF199999999999A3FF66666666666663FF80000000000000163016C3FD999999999999A3FE999999999999A3FF33333333333333FF66666666666663FF8000000000000"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FB999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FD999999999999A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF3333333333333"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE33333333333333FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE66666666666663FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FE999999999999A3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FECCCCCCCCCCCCD3FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FF00000000000003FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF66666666666663FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF80000000000003FF8000000000000"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FB999999999999A01623FC999999999999A"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FB999999999999A0163036261723FC999999999999A01630362617A3FD3333333333333016303666F6F3FB999999999999A"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FB999999999999A01610362617A3FB999999999999A016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FC999999999999A016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FC999999999999A016103626172016A3FC999999999999A016103626172016B3FC999999999999A016103626172016C3FC999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FB999999999999A016103666F6F016B3FB999999999999A016103666F6F016C3FB999999999999A01620362617201693FE0000000000000016203626172016A3FE0000000000000016203626172016B3FE0000000000000016203626172016C3FE0000000000000016203666F6F01693FB999999999999A016203666F6F016A3FC999999999999A016203666F6F016B3FD3333333333333016203666F6F016C3FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FC999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE333333333333303666F6F3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FB999999999999A3FC999999999999A3FD33333333333333FD33333333333333FD33333333333333FD33333333333333FD33333333333333FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(min(a,b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016A3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016B3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000000161016C3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000016201693FB999999999999A3FE00000000000003FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016A3FC999999999999A3FE33333333333333FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016B3FD33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000000162016C3FD999999999999A3FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF0000000000000016301693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FF80000000000000163016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FF80000000000000163016B3FD33333333333333FE66666666666663FF199999999999A3FF66666666666663FF80000000000000163016C3FD999999999999A3FE999999999999A3FF33333333333333FF66666666666663FF8000000000000"}} +{"expression":"max(a,b)","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"max(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"max(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"max(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FC999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FE00000000000003FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"max(a,b)","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"}} +{"expression":"max(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666"}} +{"expression":"max(a,b)","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C0000000000003FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C0000000000003FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF33333333333333FF33333333333333FF33333333333333FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"}} +{"expression":"max(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"max(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FB999999999999A01623FC999999999999A"}} +{"expression":"max(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FD3333333333333016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"max(a,b)","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"}} +{"expression":"max(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FE0000000000000016203666F6F3FD999999999999A"}} +{"expression":"max(a,b)","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FE0000000000000016203626172016A3FE3333333333333016203626172016B3FE6666666666666016203626172016C3FE999999999999A016203666F6F01693FD999999999999A016203666F6F016A3FD999999999999A016203666F6F016B3FD999999999999A016203666F6F016C3FD999999999999A"}} +{"expression":"max(a,b)","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE33333333333333FE6666666666666"}} +{"expression":"max(a,b)","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201693FE33333333333333FE66666666666663FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330162016A3FE33333333333333FE66666666666663FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0162016B3FE33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660162016C3FE33333333333333FE999999999999A3FF33333333333333FF999999999999A4000000000000000016301693FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FFB3333333333330163016A3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FFCCCCCCCCCCCCD0163016B3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF80000000000003FFE6666666666660163016C3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF999999999999A4000000000000000"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02003FB999999999999A"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FC999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FE00000000000003FD999999999999A3FD999999999999A3FD999999999999A3FD999999999999A3FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE0000000000000"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF6666666666666"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C0000000000003FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C0000000000003FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF199999999999A3FF33333333333333FF33333333333333FF33333333333333FF33333333333333FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201613FB999999999999A01623FC999999999999A"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FC999999999999A01620362617A3FD3333333333333016203666F6F3FC999999999999A0163036261723FD333333333333301630362617A3FD3333333333333016303666F6F3FD3333333333333"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FE0000000000000016203666F6F3FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A1001610362617201693FE0000000000000016103626172016A3FE3333333333333016103626172016B3FE6666666666666016103626172016C3FE999999999999A016103666F6F01693FB999999999999A016103666F6F016A3FC999999999999A016103666F6F016B3FD3333333333333016103666F6F016C3FD999999999999A01620362617201693FE0000000000000016203626172016A3FE3333333333333016203626172016B3FE6666666666666016203626172016C3FE999999999999A016203666F6F01693FD999999999999A016203666F6F016A3FD999999999999A016203666F6F016B3FD999999999999A016203666F6F016C3FD999999999999A"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FD33333333333333FD33333333333333FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE00000000000003FE33333333333333FE6666666666666"}} +{"expression":"join(a,b,f(a,b)(max(a,b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330161016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0161016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660161016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000016201693FE33333333333333FE66666666666663FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB3333333333330162016A3FE33333333333333FE66666666666663FF00000000000003FF66666666666663FFCCCCCCCCCCCCD0162016B3FE33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE6666666666660162016C3FE33333333333333FE999999999999A3FF33333333333333FF999999999999A4000000000000000016301693FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FFB3333333333330163016A3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FFCCCCCCCCCCCCD0163016B3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF80000000000003FFE6666666666660163016C3FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF999999999999A4000000000000000"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02003FB999999999999A","b":"0x02003FB999999999999A"},"result":{"expect":"0x02004033FFFFFFFFFFFF"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02010178054033FFFFFFFFFFFF4023FFFFFFFFFFFF401AAAAAAAAAAAAB4013FFFFFFFFFFFF4010000000000000"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010178033FB999999999999A3FC999999999999A3FD3333333333333"},"result":{"expect":"0x02010178034033FFFFFFFFFFFF4023FFFFFFFFFFFF401AAAAAAAAAAAAB"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02010179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000"},"result":{"expect":"0x02020178050179054033FFFFFFFFFFFF402E000000000000402AAAAAAAAAAAAB4028FFFFFFFFFFFF4027FFFFFFFFFFFF402E0000000000004023FFFFFFFFFFFF4020AAAAAAAAAAAB401E000000000000401BFFFFFFFFFFFF402AAAAAAAAAAAAB4020AAAAAAAAAAAB401AAAAAAAAAAAAB401755555555555540155555555555564028FFFFFFFFFFFF401E00000000000040175555555555554013FFFFFFFFFFFF40120000000000004027FFFFFFFFFFFF401BFFFFFFFFFFFF401555555555555640120000000000004010000000000000"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02010178053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE0000000000000","b":"0x02020178050179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A400266666666666640033333333333334004000000000000"},"result":{"expect":"0x02020178050179054033FFFFFFFFFFFF402E000000000000402AAAAAAAAAAAAB4028FFFFFFFFFFFF4027FFFFFFFFFFFF401AAAAAAAAAAAAB4019B6DB6DB6DB6E4018FFFFFFFFFFFF401871C71C71C71C4017FFFFFFFFFFFF4010F83E0F83E0F84010AAAAAAAAAAAB4010690690690691401030C30C30C30C40100000000000014008FFFFFFFFFFFF4008B4B4B4B4B4B5400871C71C71C71C400835E50D79435E4007FFFFFFFFFFFF4003CF3CF3CF3CF44003A2E8BA2E8BA340037A6F4DE9BD3840035555555555554003333333333333"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x02020178040179043FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A"},"result":{"expect":"0x02020178030179044033FFFFFFFFFFFF4023FFFFFFFFFFFF401AAAAAAAAAAAAB4013FFFFFFFFFFFF400D5555555555564008C30C30C30C3040056DB6DB6DB6DC4002E38E38E38E394000295FAD40A57E3FFD5555555555563FFADA67D508F3783FF8C30C30C30C30"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x02020178030179053FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0202017905017A073FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF80000000000003FF999999999999A3FFB3333333333333FFCCCCCCCCCCCCD3FFE66666666666640000000000000004000CCCCCCCCCCCD400199999999999A4002666666666666400333333333333340040000000000004004CCCCCCCCCCCD400599999999999A4006666666666666400733333333333340080000000000004008CCCCCCCCCCCD400999999999999A400A666666666666400B333333333333400C000000000000"},"result":{"expect":"0x0203017803017905017A074033FFFFFFFFFFFF402E000000000000402AAAAAAAAAAAAB4028FFFFFFFFFFFF4027FFFFFFFFFFFF40275555555555554026DB6DB6DB6DB74018FFFFFFFFFFFF401871C71C71C71C4017FFFFFFFFFFFF4017A2E8BA2E8BA24017555555555555401713B13B13B13B4016DB6DB6DB6DB74010000000000001400FAAAAAAAAAAAC400F5F5F5F5F5F5F400F1C71C71C71C7400EE08FB823EE09400EAAAAAAAAAAAA400E79E79E79E79E4007A2E8BA2E8BA240077A6F4DE9BD3840075555555555554007333333333333400713B13B13B13B4006F684BDA12F684006DB6DB6DB6DB74002C234F72C234F4002AAAAAAAAAAAB400294A5294A5295400280000000000040026C9B26C9B26D40025A5A5A5A5A5A40024924924924924027555555555555401AAAAAAAAAAAAB40140000000000004010AAAAAAAAAAAB400D555555555556400AAAAAAAAAAAAB4008C30C30C30C3040056DB6DB6DB6DC400451451451451540036DB6DB6DB6DC4002B3884FCACE214002186186186186400195195195195240012492492492493FFEAAAAAAAAAAA93FFE0000000000003FFD6969696969693FFCE38E38E38E383FFC6BCA1AF286BD3FFBFFFFFFFFFFFF3FFB9E79E79E79E83FF90CEDE62433B73FF8BBFB0D9A96E13FF871C71C71C71C3FF82D82D82D82D83FF7EE7EE7EE7EE73FF7B425ED097B423FF77DF7DF7DF7DF3FF58469EE58469F3FF55555555555553FF5294A5294A5293FF50000000000003FF4D9364D9364D93FF4B4B4B4B4B4B53FF49249249249254025D1745D1745D24017A2E8BA2E8BA24010F83E0F83E0F8400B45D1745D1745400745D1745D174640049B26C9B26C9B4002B3884FCACE214000AAAAAAAAAAAB3FFF1C71C71C71C73FFD5555555555563FFBE0F83E0F83E03FFAAAAAAAAAAAAB3FF9A41A41A41A413FF8C30C30C30C303FF6F96F96F96F963FF64EC4EC4EC4ED3FF5B82E55B82E563FF53253253253253FF4BA8F07414BAA3FF44EC4EC4EC4EC3FF3ED3ED3ED3ED43FF2B3884FCACE213FF262957741314B3FF21861861861863FF1D41D41D41D423FF19519519519523FF15AC056B015AC3FF12492492492493FF02F149902F14A3FF00000000000003FEFA7E9FA7E9FA73FEF5555555555543FEF07C1F07C1F093FEEBEBEBEBEBEC03FEE79E79E79E79E"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333"},"result":{"expect":"0x010101780301614033FFFFFFFFFFFF01624023FFFFFFFFFFFF0163401AAAAAAAAAAAAB"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010101780201613FB999999999999A01623FC999999999999A"},"result":{"expect":"0x010101780201614033FFFFFFFFFFFF01624023FFFFFFFFFFFF"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x0101017903036261723FC999999999999A0362617A3FD333333333333303666F6F3FB999999999999A"},"result":{"expect":"0x01020178017909016103626172402E00000000000001610362617A402AAAAAAAAAAAAB016103666F6F4033FFFFFFFFFFFF0162036261724023FFFFFFFFFFFF01620362617A4020AAAAAAAAAAAB016203666F6F402E0000000000000163036261724020AAAAAAAAAAAB01630362617A401AAAAAAAAAAAAB016303666F6F402AAAAAAAAAAAAB"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x010101780301613FB999999999999A01623FC999999999999A01633FD3333333333333","b":"0x010201780179090161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A0163036261723FE999999999999A01630362617A3FECCCCCCCCCCCCD016303666F6F3FE6666666666666"},"result":{"expect":"0x01020178017909016103626172402E00000000000001610362617A402AAAAAAAAAAAAB016103666F6F4033FFFFFFFFFFFF016203626172401BFFFFFFFFFFFF01620362617A401AAAAAAAAAAAAB016203666F6F401E000000000000016303626172401255555555555601630362617A4011C71C71C71C71016303666F6F40130C30C30C30C3"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x010201780179060161036261723FC999999999999A016103666F6F3FB999999999999A0162036261723FD999999999999A016203666F6F3FD33333333333330163036261723FE3333333333333016303666F6F3FE0000000000000"},"result":{"expect":"0x010201780179040161036261724023FFFFFFFFFFFF016103666F6F4033FFFFFFFFFFFF0162036261724012000000000000016203666F6F4017555555555555"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x010201780179060161036261723FC999999999999A01610362617A3FD3333333333333016103666F6F3FB999999999999A0162036261723FE000000000000001620362617A3FE3333333333333016203666F6F3FD999999999999A","b":"0x01020179017A080362617201693FE000000000000003626172016A3FE333333333333303626172016B3FE666666666666603626172016C3FE999999999999A03666F6F01693FB999999999999A03666F6F016A3FC999999999999A03666F6F016B3FD333333333333303666F6F016C3FD999999999999A"},"result":{"expect":"0x010301780179017A100161036261720169401BFFFFFFFFFFFF016103626172016A401AAAAAAAAAAAAB016103626172016B4019B6DB6DB6DB6E016103626172016C4018FFFFFFFFFFFF016103666F6F01694033FFFFFFFFFFFF016103666F6F016A402E000000000000016103666F6F016B402AAAAAAAAAAAAB016103666F6F016C4028FFFFFFFFFFFF01620362617201694010000000000000016203626172016A400D555555555556016203626172016B400B6DB6DB6DB6DC016203626172016C400A000000000000016203666F6F01694028FFFFFFFFFFFF016203666F6F016A401E000000000000016203666F6F016B4017555555555555016203666F6F016C4013FFFFFFFFFFFF"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x030101790101780302036261723FC999999999999A3FD999999999999A3FE333333333333303666F6F3FB999999999999A3FD33333333333333FE0000000000000","b":"0x0301017901017A0702036261723FE999999999999A3FECCCCCCCCCCCCD3FF00000000000003FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF666666666666603666F6F3FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE00000000000003FE33333333333333FE6666666666666"},"result":{"expect":"0x0301017902017803017A0702036261724018FFFFFFFFFFFF401871C71C71C71C4017FFFFFFFFFFFF4017A2E8BA2E8BA24017555555555555401713B13B13B13B4016DB6DB6DB6DB7400E000000000000400CE38E38E38E38400BFFFFFFFFFFFF400B45D1745D1745400AAAAAAAAAAAAB400A2762762762774009B6DB6DB6DB6E4007555555555555400638E38E38E38E400555555555555640049B26C9B26C9B400400000000000040037CB7CB7CB7CB40030C30C30C30C303666F6F4033FFFFFFFFFFFF402E000000000000402AAAAAAAAAAAAB4028FFFFFFFFFFFF4027FFFFFFFFFFFF40275555555555554026DB6DB6DB6DB7402AAAAAAAAAAAAB4020AAAAAAAAAAAB401AAAAAAAAAAAAB40175555555555554015555555555556401400000000000040130C30C30C30C34027FFFFFFFFFFFF401BFFFFFFFFFFFF401555555555555640120000000000004010000000000000400D555555555556400B6DB6DB6DB6DC"}} +{"expression":"join(a,b,f(a,b)((a+b)/(a*b)))","inputs":{"a":"0x03010178010179050301613FB999999999999A3FC999999999999A3FD33333333333333FD999999999999A3FE000000000000001623FE33333333333333FE66666666666663FE999999999999A3FECCCCCCCCCCCCD3FF000000000000001633FF199999999999A3FF33333333333333FF4CCCCCCCCCCCD3FF66666666666663FF8000000000000","b":"0x0301017A010179050401693FB999999999999A3FE00000000000003FECCCCCCCCCCCCD3FF4CCCCCCCCCCCD3FFB333333333333016A3FC999999999999A3FE33333333333333FF00000000000003FF66666666666663FFCCCCCCCCCCCCD016B3FD33333333333333FE66666666666663FF199999999999A3FF80000000000003FFE666666666666016C3FD999999999999A3FE999999999999A3FF33333333333333FF999999999999A4000000000000000"},"result":{"expect":"0x03020178017A010179050C016101694033FFFFFFFFFFFF401BFFFFFFFFFFFF4011C71C71C71C71400A2762762762774004B4B4B4B4B4B50161016A402E000000000000401AAAAAAAAAAAAB40115555555555564009B6DB6DB6DB6E400471C71C71C71C0161016B402AAAAAAAAAAAAB4019B6DB6DB6DB6E4010F83E0F83E0F84009555555555554400435E50D79435E0161016C4028FFFFFFFFFFFF4018FFFFFFFFFFFF4010AAAAAAAAAAAB4008FFFFFFFFFFFF4004000000000000016201694027555555555555400B6DB6DB6DB6DC4002E38E38E38E393FFE15E15E15E15E3FF969696969696A0162016A401AAAAAAAAAAAAB4008C30C30C30C3040020000000000003FFD34D34D34D34D3FF8E38E38E38E380162016B40140000000000004006DB6DB6DB6DB7400145D1745D17463FFC71C71C71C71C3FF86BCA1AF286BD0162016C4010AAAAAAAAAAAB40056DB6DB6DB6DC4000AAAAAAAAAAAB3FFBC71C71C71C713FF8000000000000016301694025D1745D1745D24006AAAAAAAAAAAB3FFE15E15E15E15E3FF7BC7BC7BC7BC93FF41414141414150163016A4017A2E8BA2E8BA240040000000000003FFC4EC4EC4EC4EB3FF6DB6DB6DB6DB73FF38E38E38E38E30163016B4010F83E0F83E0F840021861861861863FFADA67D508F3783FF61861861861873FF31674C59D31680163016C400B45D1745D17454000AAAAAAAAAAAB3FF9A41A41A41A413FF56DB6DB6DB6DC3FF2AAAAAAAAAAAB"}} +{"expression":"reduce(a*b,sum)","inputs":{"a":"0x0201017803400000000000000040080000000000004014000000000000","b":"0x0201017803401C0000000000004026000000000000402A000000000000"},"result":{"expect":"0x0200405C000000000000"}} +{"expression":"reduce(a*b,sum)","inputs":{"a":"0x020101780240000000000000004008000000000000","b":"0x0201017803401C0000000000004026000000000000402A000000000000"},"result":{"expect":"0x02004047800000000000"}} +{"expression":"reduce(a*b,sum)","inputs":{"a":"0x0201017803400000000000000040080000000000004014000000000000","b":"0x0201017802401C0000000000004026000000000000"},"result":{"expect":"0x02004047800000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x02004024000000000000","b":"0x02004034000000000000"},"result":{"expect":"0x020101780240240000000000004034000000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x02010178014024000000000000","b":"0x02004034000000000000"},"result":{"expect":"0x020101780240240000000000004034000000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x02004024000000000000","b":"0x02010178014034000000000000"},"result":{"expect":"0x020101780240240000000000004034000000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x02010178033FF000000000000040000000000000004008000000000000","b":"0x020101780240100000000000004014000000000000"},"result":{"expect":"0x02010178053FF00000000000004000000000000000400800000000000040100000000000004014000000000000"}} +{"expression":"concat(a,b,y)","inputs":{"a":"0x02020178020179023FF0000000000000400000000000000040080000000000004010000000000000","b":"0x020101790240140000000000004018000000000000"},"result":{"expect":"0x02020178020179043FF00000000000004000000000000000401400000000000040180000000000004008000000000000401000000000000040140000000000004018000000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x02020178020179023FF0000000000000400000000000000040080000000000004010000000000000","b":"0x020101780240140000000000004018000000000000"},"result":{"expect":"0x02020178040179023FF00000000000004000000000000000400800000000000040100000000000004014000000000000401400000000000040180000000000004018000000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x0201017A033FF000000000000040000000000000004008000000000000","b":"0x020101790240100000000000004014000000000000"},"result":{"expect":"0x0203017802017902017A033FF0000000000000400000000000000040080000000000003FF000000000000040000000000000004008000000000000401000000000000040100000000000004010000000000000401400000000000040140000000000004014000000000000"}} +{"expression":"concat(a,b,x)","inputs":{"a":"0x02010179033FF000000000000040000000000000004008000000000000","b":"0x020101790240100000000000004014000000000000"},"result":{"expect":"0x02020178020179023FF0000000000000400000000000000040100000000000004014000000000000"}} +{"expression":"rename(a,x,y)","inputs":{"a":"0x02010178053FF00000000000004000000000000000400800000000000040100000000000004014000000000000"},"result":{"expect":"0x02010179053FF00000000000004000000000000000400800000000000040100000000000004014000000000000"}} +{"expression":"rename(a,y,x)","inputs":{"a":"0x0202017905017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x0202017805017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"}} +{"expression":"rename(a,z,x)","inputs":{"a":"0x0202017905017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x02020178050179053FF000000000000040180000000000004026000000000000403000000000000040350000000000004000000000000000401C00000000000040280000000000004031000000000000403600000000000040080000000000004020000000000000402A0000000000004032000000000000403700000000000040100000000000004022000000000000402C0000000000004033000000000000403800000000000040140000000000004024000000000000402E00000000000040340000000000004039000000000000"}} +{"expression":"rename(a,x,z)","inputs":{"a":"0x02020178050179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x0202017905017A053FF000000000000040180000000000004026000000000000403000000000000040350000000000004000000000000000401C00000000000040280000000000004031000000000000403600000000000040080000000000004020000000000000402A0000000000004032000000000000403700000000000040100000000000004022000000000000402C0000000000004033000000000000403800000000000040140000000000004024000000000000402E00000000000040340000000000004039000000000000"}} +{"expression":"rename(a,y,z)","inputs":{"a":"0x02020178050179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x0202017805017A053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"}} +{"expression":"rename(a,(x,y),(y,x))","inputs":{"a":"0x02020178050179053FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E0000000000004030000000000000403100000000000040320000000000004033000000000000403400000000000040350000000000004036000000000000403700000000000040380000000000004039000000000000"},"result":{"expect":"0x02020178050179053FF000000000000040180000000000004026000000000000403000000000000040350000000000004000000000000000401C00000000000040280000000000004031000000000000403600000000000040080000000000004020000000000000402A0000000000004032000000000000403700000000000040100000000000004022000000000000402C0000000000004033000000000000403800000000000040140000000000004024000000000000402E00000000000040340000000000004039000000000000"}} +{"expression":"tensor(x[10])(x+1)","inputs":{},"result":{"expect":"0x020101780A3FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C000000000000402000000000000040220000000000004024000000000000"}} +{"expression":"tensor(x[5],y[4])(x*4+(y+1))","inputs":{},"result":{"expect":"0x02020178050179043FF000000000000040000000000000004008000000000000401000000000000040140000000000004018000000000000401C00000000000040200000000000004022000000000000402400000000000040260000000000004028000000000000402A000000000000402C000000000000402E00000000000040300000000000004031000000000000403200000000000040330000000000004034000000000000"}} +{"expression":"tensor(x[5],y[4])(x==y)","inputs":{},"result":{"expect":"0x02020178050179043FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF000000000000000000000000000000000000000000000000000000000000000000000000000003FF00000000000000000000000000000000000000000000000000000000000000000000000000000"}} +{"num_tests":1208} diff --git a/eval/src/vespa/eval/eval/test/tensor_conformance.cpp b/eval/src/vespa/eval/eval/test/tensor_conformance.cpp index bd8bdf8cd11..8e9c117756b 100644 --- a/eval/src/vespa/eval/eval/test/tensor_conformance.cpp +++ b/eval/src/vespa/eval/eval/test/tensor_conformance.cpp @@ -12,6 +12,7 @@ #include <vespa/vespalib/objects/nbostream.h> #include <vespa/vespalib/data/slime/slime.h> #include <vespa/vespalib/io/mapped_file_input.h> +#include "tensor_model.hpp" namespace vespalib { namespace eval { @@ -22,237 +23,6 @@ using slime::Cursor; using slime::Inspector; using slime::JsonFormat; -// Random access sequence of numbers -struct Sequence { - virtual double operator[](size_t i) const = 0; - virtual ~Sequence() {} -}; - -// Sequence of natural numbers (starting at 1) -struct N : Sequence { - double operator[](size_t i) const override { return (1.0 + i); } -}; - -// Sequence of another sequence divided by 10 -struct Div10 : Sequence { - const Sequence &seq; - Div10(const Sequence &seq_in) : seq(seq_in) {} - double operator[](size_t i) const override { return (seq[i] / 10.0); } -}; - -// Sequence of another sequence minus 2 -struct Sub2 : Sequence { - const Sequence &seq; - Sub2(const Sequence &seq_in) : seq(seq_in) {} - double operator[](size_t i) const override { return (seq[i] - 2.0); } -}; - -// Sequence of a unary operator applied to a sequence -struct OpSeq : Sequence { - const Sequence &seq; - const UnaryOperation &op; - OpSeq(const Sequence &seq_in, const UnaryOperation &op_in) : seq(seq_in), op(op_in) {} - double operator[](size_t i) const override { return op.eval(seq[i]); } -}; - -// Sequence of applying sigmoid to another sequence -struct Sigmoid : Sequence { - const Sequence &seq; - Sigmoid(const Sequence &seq_in) : seq(seq_in) {} - double operator[](size_t i) const override { return operation::Sigmoid().eval(seq[i]); } -}; - -// pre-defined sequence of numbers -struct Seq : Sequence { - std::vector<double> seq; - Seq() : seq() {} - Seq(const std::vector<double> &seq_in) : seq(seq_in) {} - double operator[](size_t i) const override { - ASSERT_LESS(i, seq.size()); - return seq[i]; - } -}; - -// Random access bit mask -struct Mask { - virtual bool operator[](size_t i) const = 0; - virtual ~Mask() {} -}; - -// Mask with all bits set -struct All : Mask { - bool operator[](size_t) const override { return true; } -}; - -// Mask with no bits set -struct None : Mask { - bool operator[](size_t) const override { return false; } -}; - -// Mask with false for each Nth index -struct SkipNth : Mask { - size_t n; - SkipNth(size_t n_in) : n(n_in) {} - bool operator[](size_t i) const override { return (i % n) != 0; } -}; - -// pre-defined mask -struct Bits : Mask { - std::vector<bool> bits; - Bits(const std::vector<bool> &bits_in) : bits(bits_in) {} - ~Bits() { } - bool operator[](size_t i) const override { - ASSERT_LESS(i, bits.size()); - return bits[i]; - } -}; - -// A mask converted to a sequence of two unique values (mapped from true and false) -struct Mask2Seq : Sequence { - const Mask &mask; - double true_value; - double false_value; - Mask2Seq(const Mask &mask_in, double true_value_in = 1.0, double false_value_in = 0.0) - : mask(mask_in), true_value(true_value_in), false_value(false_value_in) {} - double operator[](size_t i) const override { return mask[i] ? true_value : false_value; } -}; - -// custom op1 -struct MyOp : CustomUnaryOperation { - double eval(double a) const override { return ((a + 1) * 2); } -}; - -// A collection of labels for a single dimension -struct Domain { - vespalib::string dimension; - size_t size; // indexed - std::vector<vespalib::string> keys; // mapped - Domain(const vespalib::string &dimension_in, size_t size_in) - : dimension(dimension_in), size(size_in), keys() {} - Domain(const vespalib::string &dimension_in, const std::vector<vespalib::string> &keys_in) - : dimension(dimension_in), size(0), keys(keys_in) {} - ~Domain(); -}; - -Domain::~Domain() { } - -using Layout = std::vector<Domain>; - -Domain x() { return Domain("x", {}); } -Domain x(size_t size) { return Domain("x", size); } -Domain x(const std::vector<vespalib::string> &keys) { return Domain("x", keys); } - -Domain y() { return Domain("y", {}); } -Domain y(size_t size) { return Domain("y", size); } -Domain y(const std::vector<vespalib::string> &keys) { return Domain("y", keys); } - -Domain z(size_t size) { return Domain("z", size); } -Domain z(const std::vector<vespalib::string> &keys) { return Domain("z", keys); } - -// Infer the tensor type spanned by the given spaces -vespalib::string infer_type(const Layout &layout) { - if (layout.empty()) { - return "double"; - } - std::vector<ValueType::Dimension> dimensions; - for (const auto &domain: layout) { - if (domain.size == 0) { - dimensions.emplace_back(domain.dimension); // mapped - } else { - dimensions.emplace_back(domain.dimension, domain.size); // indexed - } - } - return ValueType::tensor_type(dimensions).to_spec(); -} - -// Wrapper for the things needed to generate a tensor -struct Source { - using Address = TensorSpec::Address; - - const Layout &layout; - const Sequence &seq; - const Mask &mask; - Source(const Layout &layout_in, const Sequence &seq_in, const Mask &mask_in) - : layout(layout_in), seq(seq_in), mask(mask_in) {} -}; - -// Mix layout with a number sequence to make a tensor spec -class TensorSpecBuilder -{ -private: - using Label = TensorSpec::Label; - using Address = TensorSpec::Address; - - Source _source; - TensorSpec _spec; - Address _addr; - size_t _idx; - - void generate(size_t layout_idx) { - if (layout_idx == _source.layout.size()) { - if (_source.mask[_idx]) { - _spec.add(_addr, _source.seq[_idx]); - } - ++_idx; - } else { - const Domain &domain = _source.layout[layout_idx]; - if (domain.size > 0) { // indexed - for (size_t i = 0; i < domain.size; ++i) { - _addr.emplace(domain.dimension, Label(i)).first->second = Label(i); - generate(layout_idx + 1); - } - } else { // mapped - for (const vespalib::string &key: domain.keys) { - _addr.emplace(domain.dimension, Label(key)).first->second = Label(key); - generate(layout_idx + 1); - } - } - } - } - -public: - TensorSpecBuilder(const Layout &layout, const Sequence &seq, const Mask &mask) - : _source(layout, seq, mask), _spec(infer_type(layout)), _addr(), _idx(0) {} - TensorSpec build() { - generate(0); - return _spec; - } -}; -TensorSpec spec(const Layout &layout, const Sequence &seq, const Mask &mask) { - return TensorSpecBuilder(layout, seq, mask).build(); -} -TensorSpec spec(const Layout &layout, const Sequence &seq) { - return spec(layout, seq, All()); -} -TensorSpec spec(const Layout &layout) { - return spec(layout, Seq(), None()); -} -TensorSpec spec(const Domain &domain, const Sequence &seq, const Mask &mask) { - return spec(Layout({domain}), seq, mask); -} -TensorSpec spec(const Domain &domain, const Sequence &seq) { - return spec(Layout({domain}), seq); -} -TensorSpec spec(const Domain &domain) { - return spec(Layout({domain})); -} -TensorSpec spec(double value) { - return spec(Layout({}), Seq({value})); -} -TensorSpec spec() { - return spec(Layout({})); -} - -TensorSpec spec(const vespalib::string &type, - const std::vector<std::pair<TensorSpec::Address, TensorSpec::Value>> &cells) { - TensorSpec spec("tensor(" + type + ")"); - - for (const auto &cell : cells) { - spec.add(cell.first, cell.second); - } - return spec; -} - double as_double(const TensorSpec &spec) { return spec.cells().empty() ? 0.0 : spec.cells().begin()->second.value; } diff --git a/eval/src/vespa/eval/eval/test/tensor_model.hpp b/eval/src/vespa/eval/eval/test/tensor_model.hpp new file mode 100644 index 00000000000..8f031174289 --- /dev/null +++ b/eval/src/vespa/eval/eval/test/tensor_model.hpp @@ -0,0 +1,247 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include <vespa/vespalib/testkit/test_kit.h> +#include <vespa/eval/eval/tensor_spec.h> +#include <vespa/eval/eval/value_type.h> +#include <vespa/eval/eval/operation.h> + +namespace vespalib { +namespace eval { +namespace test { + +// Random access sequence of numbers +struct Sequence { + virtual double operator[](size_t i) const = 0; + virtual ~Sequence() {} +}; + +// Sequence of natural numbers (starting at 1) +struct N : Sequence { + double operator[](size_t i) const override { return (1.0 + i); } +}; + +// Sequence of another sequence divided by 10 +struct Div10 : Sequence { + const Sequence &seq; + Div10(const Sequence &seq_in) : seq(seq_in) {} + double operator[](size_t i) const override { return (seq[i] / 10.0); } +}; + +// Sequence of another sequence minus 2 +struct Sub2 : Sequence { + const Sequence &seq; + Sub2(const Sequence &seq_in) : seq(seq_in) {} + double operator[](size_t i) const override { return (seq[i] - 2.0); } +}; + +// Sequence of a unary operator applied to a sequence +struct OpSeq : Sequence { + const Sequence &seq; + const UnaryOperation &op; + OpSeq(const Sequence &seq_in, const UnaryOperation &op_in) : seq(seq_in), op(op_in) {} + double operator[](size_t i) const override { return op.eval(seq[i]); } +}; + +// Sequence of applying sigmoid to another sequence +struct Sigmoid : Sequence { + const Sequence &seq; + Sigmoid(const Sequence &seq_in) : seq(seq_in) {} + double operator[](size_t i) const override { return operation::Sigmoid().eval(seq[i]); } +}; + +// pre-defined sequence of numbers +struct Seq : Sequence { + std::vector<double> seq; + Seq() : seq() {} + Seq(const std::vector<double> &seq_in) : seq(seq_in) {} + double operator[](size_t i) const override { + ASSERT_LESS(i, seq.size()); + return seq[i]; + } +}; + +// Random access bit mask +struct Mask { + virtual bool operator[](size_t i) const = 0; + virtual ~Mask() {} +}; + +// Mask with all bits set +struct All : Mask { + bool operator[](size_t) const override { return true; } +}; + +// Mask with no bits set +struct None : Mask { + bool operator[](size_t) const override { return false; } +}; + +// Mask with false for each Nth index +struct SkipNth : Mask { + size_t n; + SkipNth(size_t n_in) : n(n_in) {} + bool operator[](size_t i) const override { return (i % n) != 0; } +}; + +// pre-defined mask +struct Bits : Mask { + std::vector<bool> bits; + Bits(const std::vector<bool> &bits_in) : bits(bits_in) {} + ~Bits() { } + bool operator[](size_t i) const override { + ASSERT_LESS(i, bits.size()); + return bits[i]; + } +}; + +// A mask converted to a sequence of two unique values (mapped from true and false) +struct Mask2Seq : Sequence { + const Mask &mask; + double true_value; + double false_value; + Mask2Seq(const Mask &mask_in, double true_value_in = 1.0, double false_value_in = 0.0) + : mask(mask_in), true_value(true_value_in), false_value(false_value_in) {} + double operator[](size_t i) const override { return mask[i] ? true_value : false_value; } +}; + +// custom op1 +struct MyOp : CustomUnaryOperation { + double eval(double a) const override { return ((a + 1) * 2); } +}; + +// A collection of labels for a single dimension +struct Domain { + vespalib::string dimension; + size_t size; // indexed + std::vector<vespalib::string> keys; // mapped + Domain(const Domain &); + Domain(const vespalib::string &dimension_in, size_t size_in) + : dimension(dimension_in), size(size_in), keys() {} + Domain(const vespalib::string &dimension_in, const std::vector<vespalib::string> &keys_in) + : dimension(dimension_in), size(0), keys(keys_in) {} + ~Domain(); +}; +Domain::Domain(const Domain &) = default; +Domain::~Domain() {} + +using Layout = std::vector<Domain>; + +Domain x() { return Domain("x", {}); } +Domain x(size_t size) { return Domain("x", size); } +Domain x(const std::vector<vespalib::string> &keys) { return Domain("x", keys); } + +Domain y() { return Domain("y", {}); } +Domain y(size_t size) { return Domain("y", size); } +Domain y(const std::vector<vespalib::string> &keys) { return Domain("y", keys); } + +Domain z() { return Domain("z", {}); } +Domain z(size_t size) { return Domain("z", size); } +Domain z(const std::vector<vespalib::string> &keys) { return Domain("z", keys); } + +// Infer the tensor type spanned by the given spaces +vespalib::string infer_type(const Layout &layout) { + if (layout.empty()) { + return "double"; + } + std::vector<ValueType::Dimension> dimensions; + for (const auto &domain: layout) { + if (domain.size == 0) { + dimensions.emplace_back(domain.dimension); // mapped + } else { + dimensions.emplace_back(domain.dimension, domain.size); // indexed + } + } + return ValueType::tensor_type(dimensions).to_spec(); +} + +// Wrapper for the things needed to generate a tensor +struct Source { + using Address = TensorSpec::Address; + + const Layout &layout; + const Sequence &seq; + const Mask &mask; + Source(const Layout &layout_in, const Sequence &seq_in, const Mask &mask_in) + : layout(layout_in), seq(seq_in), mask(mask_in) {} +}; + +// Mix layout with a number sequence to make a tensor spec +class TensorSpecBuilder +{ +private: + using Label = TensorSpec::Label; + using Address = TensorSpec::Address; + + Source _source; + TensorSpec _spec; + Address _addr; + size_t _idx; + + void generate(size_t layout_idx) { + if (layout_idx == _source.layout.size()) { + if (_source.mask[_idx]) { + _spec.add(_addr, _source.seq[_idx]); + } + ++_idx; + } else { + const Domain &domain = _source.layout[layout_idx]; + if (domain.size > 0) { // indexed + for (size_t i = 0; i < domain.size; ++i) { + _addr.emplace(domain.dimension, Label(i)).first->second = Label(i); + generate(layout_idx + 1); + } + } else { // mapped + for (const vespalib::string &key: domain.keys) { + _addr.emplace(domain.dimension, Label(key)).first->second = Label(key); + generate(layout_idx + 1); + } + } + } + } + +public: + TensorSpecBuilder(const Layout &layout, const Sequence &seq, const Mask &mask) + : _source(layout, seq, mask), _spec(infer_type(layout)), _addr(), _idx(0) {} + TensorSpec build() { + generate(0); + return _spec; + } +}; +TensorSpec spec(const Layout &layout, const Sequence &seq, const Mask &mask) { + return TensorSpecBuilder(layout, seq, mask).build(); +} +TensorSpec spec(const Layout &layout, const Sequence &seq) { + return spec(layout, seq, All()); +} +TensorSpec spec(const Layout &layout) { + return spec(layout, Seq(), None()); +} +TensorSpec spec(const Domain &domain, const Sequence &seq, const Mask &mask) { + return spec(Layout({domain}), seq, mask); +} +TensorSpec spec(const Domain &domain, const Sequence &seq) { + return spec(Layout({domain}), seq); +} +TensorSpec spec(const Domain &domain) { + return spec(Layout({domain})); +} +TensorSpec spec(double value) { + return spec(Layout({}), Seq({value})); +} +TensorSpec spec() { + return spec(Layout({})); +} + +TensorSpec spec(const vespalib::string &type, + const std::vector<std::pair<TensorSpec::Address, TensorSpec::Value>> &cells) { + TensorSpec spec("tensor(" + type + ")"); + + for (const auto &cell : cells) { + spec.add(cell.first, cell.second); + } + return spec; +} + +} // namespace vespalib::eval::test +} // namespace vespalib::eval +} // namespace vespalib diff --git a/filedistribution/src/vespa/filedistribution/distributor/filedownloader.cpp b/filedistribution/src/vespa/filedistribution/distributor/filedownloader.cpp index 9668e09bcc8..b917bc015ec 100644 --- a/filedistribution/src/vespa/filedistribution/distributor/filedownloader.cpp +++ b/filedistribution/src/vespa/filedistribution/distributor/filedownloader.cpp @@ -285,7 +285,7 @@ FileDownloader::pathToCompletedFile(const std::string& fileReference) const { boost::optional<FileDownloader::ResumeDataBuffer> FileDownloader::getResumeData(const std::string& fileReference) { - LOG(debug, ("Reading resume data for " + fileReference).c_str()); + LOG(debug, "Reading resume data for '%s'", fileReference.c_str()); try { fs::path path = (_dbPath / fileReference).string() + resumeDataSuffix; if (fs::exists(path)) { @@ -294,7 +294,7 @@ FileDownloader::getResumeData(const std::string& fileReference) { std::istream_iterator<char> iterator(file), end; std::copy(iterator, end, std::back_inserter(result)); - LOG(debug, ("Successfully retrieved resume data for " + fileReference).c_str()); + LOG(debug, "Successfully retrieved resume data for '%s'", fileReference.c_str()); if (result.size() < 50) { LOG(info, "Very small resume file %zu bytes.", result.size()); } @@ -303,7 +303,7 @@ FileDownloader::getResumeData(const std::string& fileReference) { } } catch(...) { //resume data is only an optimization - LOG(info, ("Error while reading resume data for " + fileReference).c_str()); + LOG(info, "Error while reading resume data for '%s'", fileReference.c_str()); } return boost::optional<ResumeDataBuffer>(); } diff --git a/filedistribution/src/vespa/filedistribution/distributor/filedownloadermanager.cpp b/filedistribution/src/vespa/filedistribution/distributor/filedownloadermanager.cpp index 669cc550003..1763b798f03 100644 --- a/filedistribution/src/vespa/filedistribution/distributor/filedownloadermanager.cpp +++ b/filedistribution/src/vespa/filedistribution/distributor/filedownloadermanager.cpp @@ -14,10 +14,10 @@ using filedistribution::Path; namespace { void logStartDownload(const std::set<std::string> & filesToDownload) { std::ostringstream msg; - msg <<"StartDownloads:" <<std::endl; + msg << "StartDownloads:" << std::endl; std::copy(filesToDownload.begin(), filesToDownload.end(), std::ostream_iterator<std::string>(msg, "\n")); - LOG(debug, msg.str().c_str()); + LOG(debug, "%s", msg.str().c_str()); } } //anonymous namespace diff --git a/filedistribution/src/vespa/filedistribution/model/filedistributionmodelimpl.cpp b/filedistribution/src/vespa/filedistribution/model/filedistributionmodelimpl.cpp index 9ce31e0dd3a..e0338cffd52 100644 --- a/filedistribution/src/vespa/filedistribution/model/filedistributionmodelimpl.cpp +++ b/filedistribution/src/vespa/filedistribution/model/filedistributionmodelimpl.cpp @@ -13,11 +13,11 @@ LOG_SETUP(".filedistributionmodel"); namespace fs = boost::filesystem; using filedistribution::ZKFileDBModel; +using std::make_shared; namespace { //peer format: hostName:port - void addPeerEntry(const std::string& peer, filedistribution::FileDistributionModelImpl::PeerEntries& result) { @@ -73,8 +73,7 @@ struct FileDistributionModelImpl::DeployedFilesChangedCallback : std::weak_ptr<FileDistributionModelImpl> _parent; - DeployedFilesChangedCallback( - const std::shared_ptr<FileDistributionModelImpl> & parent) + DeployedFilesChangedCallback(const std::shared_ptr<FileDistributionModelImpl> & parent) :_parent(parent) {} @@ -111,7 +110,7 @@ FileDistributionModelImpl::getPeers(const std::string& fileReference, size_t max LOG(debug, "Found %zu peers for path '%s'", result.size(), path.string().c_str()); return result; } catch(ZKNodeDoesNotExistsException&) { - LOG(debug, ("No peer entries available for " + fileReference).c_str()); + LOG(debug, "No peer entries available for '%s'", fileReference.c_str()); return PeerEntries(); } } @@ -119,8 +118,7 @@ FileDistributionModelImpl::getPeers(const std::string& fileReference, size_t max fs::path FileDistributionModelImpl::getPeerEntryPath(const std::string& fileReference) { std::ostringstream entry; - entry <<_hostName - <<ZKFileDBModel::_peerEntrySeparator <<_port; + entry <<_hostName << ZKFileDBModel::_peerEntrySeparator <<_port; return _fileDBModel.getPeersPath(fileReference) / entry.str(); } @@ -167,8 +165,7 @@ std::set<std::string> FileDistributionModelImpl::getFilesToDownload() { DeployedFilesToDownload d(_zk.get()); std::vector<std::string> deployed = d.getDeployedFilesToDownload(_hostName, - DeployedFilesChangedCallback::SP( - new DeployedFilesChangedCallback(shared_from_this()))); + make_shared<DeployedFilesChangedCallback>(shared_from_this())); std::set<std::string> result(deployed.begin(), deployed.end()); @@ -187,8 +184,7 @@ FileDistributionModelImpl::updateActiveFileReferences( std::sort(sortedFileReferences.begin(), sortedFileReferences.end()); LockGuard guard(_activeFileReferencesMutex); - bool changed = - sortedFileReferences != _activeFileReferences; + bool changed = sortedFileReferences != _activeFileReferences; sortedFileReferences.swap(_activeFileReferences); return changed; diff --git a/logforwarder/src/apps/vespa-logforwarder-start/CMakeLists.txt b/logforwarder/src/apps/vespa-logforwarder-start/CMakeLists.txt index 9a402bb58da..aa5584ec108 100644 --- a/logforwarder/src/apps/vespa-logforwarder-start/CMakeLists.txt +++ b/logforwarder/src/apps/vespa-logforwarder-start/CMakeLists.txt @@ -3,6 +3,7 @@ vespa_add_executable(logforwarder-start_app SOURCES main.cpp cf-handler.cpp + child-handler.cpp OUTPUT_NAME vespa-logforwarder-start INSTALL bin DEPENDS diff --git a/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp b/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp index e34a83030e8..5517017eefa 100644 --- a/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp +++ b/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.cpp @@ -3,6 +3,7 @@ #include "cf-handler.h" #include <dirent.h> #include <stdio.h> +#include <unistd.h> #include <sys/stat.h> #include <sys/types.h> #include <vespa/defaults.h> @@ -25,21 +26,35 @@ CfHandler::subscribe(const std::string & configId, uint64_t timeoutMS) } namespace { -std::string -cfFilePath() { - std::string path = vespa::Defaults::underVespaHome("var/db/vespa/splunk"); + +bool fixDir(const vespalib::string &path) { + if (path.size() == 0) return true; + size_t lastSlash = path.rfind('/'); + if (lastSlash != vespalib::string::npos) { + vespalib::string parent = path.substr(0, lastSlash); + if (!fixDir(parent)) return false; + } DIR *dp = opendir(path.c_str()); if (dp == NULL) { if (errno != ENOENT || mkdir(path.c_str(), 0755) != 0) { perror(path.c_str()); + return false; } } else { closedir(dp); } + return true; +} + +vespalib::string +cfFilePath(const vespalib::string &parent) { + vespalib::string path = parent + "/etc/system/local"; + fixDir(path); path += "/deploymentclient.conf"; return path; } -} + +} // namespace <unnamed> void CfHandler::doConfigure() @@ -47,8 +62,8 @@ CfHandler::doConfigure() std::unique_ptr<LogforwarderConfig> cfg(_handle->getConfig()); const LogforwarderConfig& config(*cfg); - std::string path = cfFilePath(); - std::string tmpPath = path + ".new"; + vespalib::string path = cfFilePath(config.splunkHome); + vespalib::string tmpPath = path + ".new"; FILE *fp = fopen(tmpPath.c_str(), "w"); if (fp == NULL) return; @@ -60,6 +75,14 @@ CfHandler::doConfigure() fclose(fp); rename(tmpPath.c_str(), path.c_str()); + + if (config.clientName.size() == 0 || + config.deploymentServer.size() == 0) + { + childHandler.stopChild(config.splunkHome); + } else { + childHandler.startChild(config.splunkHome); + } } void diff --git a/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.h b/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.h index 99f0a6cd6d5..0dcf2be7058 100644 --- a/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.h +++ b/logforwarder/src/apps/vespa-logforwarder-start/cf-handler.h @@ -3,11 +3,13 @@ #include <vespa/config/config.h> #include <vespa/config-logforwarder.h> +#include "child-handler.h" using cloud::config::LogforwarderConfig; class CfHandler { private: + ChildHandler childHandler; config::ConfigSubscriber _subscriber; config::ConfigHandle<LogforwarderConfig>::UP _handle; void subscribe(const std::string & configId, uint64_t timeoutMS); diff --git a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp new file mode 100644 index 00000000000..6ed209cbe5b --- /dev/null +++ b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.cpp @@ -0,0 +1,87 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "child-handler.h" + +#include <stdio.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/wait.h> + +#include <vespa/log/log.h> +LOG_SETUP(".child-handler"); + +ChildHandler::ChildHandler() : _childRunning(false) {} + +namespace { + +void +runSplunk(const vespalib::string &prefix, const char *a1, const char *a2 = 0) +{ + const char *argv[] = { 0, a1, a2, 0 }; + vespalib::string path = prefix + "/bin/splunk"; + argv[0] = path.c_str(); + LOG(debug, "starting splunk forwarder with command: '%s' '%s' '%s'", + argv[0], argv[1], argv[2]); + fflush(stdout); + pid_t child = fork(); + if (child == -1) { + perror("fork()"); + return; + } + if (child == 0) { + vespalib::string env = "SPLUNK_HOME=" + prefix; + char *cenv = const_cast<char *>(env.c_str()); // safe cast + putenv(cenv); + LOG(debug, "added to environment: '%s'", cenv); + char **cargv = const_cast<char **>(argv); // safe cast + execv(argv[0], cargv); + // if execv fails: + perror(argv[0]); + exit(1); + } + LOG(debug, "child running with pid %d", (int)child); + int waitStatus = 0; + if (waitpid(child, &waitStatus, 0) == -1) { + perror("waitpid()"); + return; + } + if (WIFEXITED(waitStatus) && WEXITSTATUS(waitStatus) == 0) { + // all OK + LOG(debug, "child ran ok, exit status 0"); + return; + } + if (WIFEXITED(waitStatus)) { + LOG(warning, "failed starting splunk forwarder (exit status %d)", + WEXITSTATUS(waitStatus)); + } else if (WIFSIGNALED(waitStatus)) { + LOG(warning, "failed starting splunk forwarder (exit on signal %d)", + WTERMSIG(waitStatus)); + } else { + LOG(warning, "failed starting splunk forwarder (abnormal exit status %d)", + waitStatus); + } +} + +} // namespace <unnamed> + + +void +ChildHandler::startChild(const vespalib::string &prefix) +{ + if (! _childRunning) { + runSplunk(prefix, "start", "--accept-license"); + _childRunning = true; + // it is possible that splunk was already running, and + // then the above won't do anything, so we need to + // *also* do the restart below, after a small delay. + sleep(1); + } + runSplunk(prefix, "restart"); +} + +void +ChildHandler::stopChild(const vespalib::string &prefix) +{ + runSplunk(prefix, "stop"); + _childRunning = false; +} diff --git a/logforwarder/src/apps/vespa-logforwarder-start/child-handler.h b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.h new file mode 100644 index 00000000000..0c07b208871 --- /dev/null +++ b/logforwarder/src/apps/vespa-logforwarder-start/child-handler.h @@ -0,0 +1,13 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include <vespa/vespalib/stllike/string.h> + +class ChildHandler { +private: + bool _childRunning; +public: + void startChild(const vespalib::string &prefix); + void stopChild(const vespalib::string &prefix); + ChildHandler(); +}; diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java index e7ce155503a..24ae73d0a81 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/maintenance/retire/RetireIPv4OnlyNodes.java @@ -39,6 +39,8 @@ public class RetireIPv4OnlyNodes implements RetirementPolicy { return zone.environment() == Environment.prod; } else if (zone.region().equals(RegionName.from("ap-northeast-1"))) { return zone.environment() == Environment.prod; + } else if (zone.region().equals(RegionName.from("eu-west-1"))) { + return zone.environment() == Environment.prod; } } @@ -37,6 +37,18 @@ <url>git@github.com:vespa-engine/vespa.git</url> </scm> + <repositories> + <!-- Required for Athenz libraries --> + <repository> + <snapshots> + <enabled>false</enabled> + </snapshots> + <id>bintray-yahoo-maven</id> + <name>bintray</name> + <url>http://yahoo.bintray.com/maven</url> + </repository> + </repositories> + <build> <finalName>${project.artifactId}</finalName> <extensions> @@ -898,6 +910,16 @@ <artifactId>icu4j</artifactId> <version>57.1</version> </dependency> + <dependency> + <groupId>com.yahoo.athenz</groupId> + <artifactId>athenz-zms-java-client</artifactId> + <version>${athenz.version}</version> + </dependency> + <dependency> + <groupId>com.yahoo.athenz</groupId> + <artifactId>athenz-zts-java-client</artifactId> + <version>${athenz.version}</version> + </dependency> </dependencies> </dependencyManagement> @@ -908,6 +930,8 @@ <aries.spifly.version>1.0.8</aries.spifly.version> <aries.util.version>1.0.0</aries.util.version> <asm-debug-all.version>5.0.3</asm-debug-all.version> + <!-- Athenz dependencies. Make sure these dependencies matches those in Vespa's internal repositories --> + <athenz.version>1.7.28</athenz.version> <bouncycastle.version>1.49</bouncycastle.version> <commons-lang.version>2.6</commons-lang.version> <!-- WARNING: If you change curator version, you also need to update diff --git a/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp b/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp index 315fb7e86eb..87efd74659d 100644 --- a/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp +++ b/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp @@ -9,7 +9,6 @@ #include <vespa/searchcore/proton/documentmetastore/documentmetastore.h> #include <vespa/searchcore/proton/documentmetastore/lidreusedelayer.h> #include <vespa/searchcore/proton/matching/error_constant_value.h> -#include <vespa/searchcore/proton/metrics/feed_metrics.h> #include <vespa/searchcore/proton/index/index_writer.h> #include <vespa/searchcore/proton/index/indexmanager.h> #include <vespa/searchcore/proton/reprocessing/attribute_reprocessing_initializer.h> @@ -47,7 +46,7 @@ using proton::matching::SessionManager; using searchcorespi::IndexSearchable; using searchcorespi::index::IThreadingService; using proton::test::MockGidToLidChangeHandler; - +using std::make_shared; using CCR = DocumentDBConfig::ComparisonResult; using Configurer = SearchableDocSubDBConfigurer; @@ -178,14 +177,8 @@ Fixture::Fixture() vespalib::rmdir(BASE_DIR, true); vespalib::mkdir(BASE_DIR); initViewSet(_views); - _configurer.reset(new Configurer(_views._summaryMgr, - _views.searchView, - _views.feedView, - _queryLimiter, - _constantValueRepo, - _clock, - "test", - 0)); + _configurer.reset(new Configurer(_views._summaryMgr, _views.searchView, _views.feedView, _queryLimiter, + _constantValueRepo, _clock, "test", 0)); } Fixture::~Fixture() {} @@ -193,53 +186,33 @@ void Fixture::initViewSet(ViewSet &views) { Matchers::SP matchers(new Matchers(_clock, _queryLimiter, _constantValueRepo)); - IndexManager::SP indexMgr(new IndexManager(BASE_DIR, searchcorespi::index::WarmupConfig(), - 2, 0, Schema(), 1, views._reconfigurer, - views._writeService, _summaryExecutor, TuneFileIndexManager(), - TuneFileAttributes(), views._fileHeaderContext)); - AttributeManager::SP attrMgr(new AttributeManager(BASE_DIR, - "test.subdb", - TuneFileAttributes(), - views._fileHeaderContext, - views._writeService. - attributeFieldWriter(), - views._hwInfo)); + auto indexMgr = make_shared<IndexManager>(BASE_DIR, searchcorespi::index::WarmupConfig(), 2, 0, Schema(), 1, + views._reconfigurer, views._writeService, _summaryExecutor, + TuneFileIndexManager(), TuneFileAttributes(), views._fileHeaderContext); + auto attrMgr = make_shared<AttributeManager>(BASE_DIR, "test.subdb", TuneFileAttributes(), views._fileHeaderContext, + views._writeService.attributeFieldWriter(),views._hwInfo); ProtonConfig protonCfg; - SummaryManager::SP summaryMgr( - new SummaryManager(_summaryExecutor, search::LogDocumentStore::Config(), - GrowStrategy(), BASE_DIR, views._docTypeName, - TuneFileSummary(), views._fileHeaderContext, - views._noTlSyncer, search::IBucketizer::SP())); - SessionManager::SP sesMgr( - new SessionManager(protonCfg.grouping.sessionmanager.maxentries)); - DocumentMetaStoreContext::SP metaStore( - new DocumentMetaStoreContext(std::make_shared<BucketDBOwner>())); + auto summaryMgr = make_shared<SummaryManager> + (_summaryExecutor, search::LogDocumentStore::Config(), GrowStrategy(), BASE_DIR, views._docTypeName, + TuneFileSummary(), views._fileHeaderContext,views._noTlSyncer, search::IBucketizer::SP()); + auto sesMgr = make_shared<SessionManager>(protonCfg.grouping.sessionmanager.maxentries); + auto metaStore = make_shared<DocumentMetaStoreContext>(make_shared<BucketDBOwner>()); IIndexWriter::SP indexWriter(new IndexWriter(indexMgr)); AttributeWriter::SP attrWriter(new AttributeWriter(attrMgr)); ISummaryAdapter::SP summaryAdapter(new SummaryAdapter(summaryMgr)); - views._gidToLidChangeHandler = std::make_shared<MockGidToLidChangeHandler>(); + views._gidToLidChangeHandler = make_shared<MockGidToLidChangeHandler>(); Schema::SP schema(new Schema()); views._summaryMgr = summaryMgr; views._dmsc = metaStore; - views._lidReuseDelayer.reset( - new documentmetastore::LidReuseDelayer(views._writeService, - metaStore->get())); + views._lidReuseDelayer.reset(new documentmetastore::LidReuseDelayer(views._writeService, metaStore->get())); IndexSearchable::SP indexSearchable; - MatchView::SP matchView(new MatchView(matchers, indexSearchable, attrMgr, - sesMgr, metaStore, views._docIdLimit)); - views.searchView.set( - SearchView::SP( - new SearchView( - summaryMgr->createSummarySetup(SummaryConfig(), - SummarymapConfig(), - JuniperrcConfig(), - views.repo, - attrMgr), - matchView))); - PerDocTypeFeedMetrics metrics(0); + MatchView::SP matchView(new MatchView(matchers, indexSearchable, attrMgr, sesMgr, metaStore, views._docIdLimit)); + views.searchView.set(make_shared<SearchView> + (summaryMgr->createSummarySetup(SummaryConfig(), SummarymapConfig(), + JuniperrcConfig(), views.repo, attrMgr), + matchView)); views.feedView.set( - SearchableFeedView::SP( - new SearchableFeedView(StoreOnlyFeedView::Context(summaryAdapter, + make_shared<SearchableFeedView>(StoreOnlyFeedView::Context(summaryAdapter, schema, views.searchView.get()->getDocumentMetaStore(), *views._gidToLidChangeHandler, @@ -251,11 +224,10 @@ Fixture::initViewSet(ViewSet &views) views.serialNum, views.serialNum, views._docTypeName, - metrics, 0u /* subDbId */, SubDbType::READY), FastAccessFeedView::Context(attrWriter, views._docIdLimit), - SearchableFeedView::Context(indexWriter)))); + SearchableFeedView::Context(indexWriter))); } @@ -263,7 +235,6 @@ using MySummaryAdapter = test::MockSummaryAdapter; struct MyFastAccessFeedView { - PerDocTypeFeedMetrics _metrics; DummyFileHeaderContext _fileHeaderContext; DocIdLimit _docIdLimit; IThreadingService &_writeService; @@ -276,13 +247,12 @@ struct MyFastAccessFeedView VarHolder<FastAccessFeedView::SP> _feedView; MyFastAccessFeedView(IThreadingService &writeService) - : _metrics(0), - _fileHeaderContext(), + : _fileHeaderContext(), _docIdLimit(0), _writeService(writeService), _hwInfo(), _dmsc(), - _gidToLidChangeHandler(std::make_shared<DummyGidToLidChangeHandler>()), + _gidToLidChangeHandler(make_shared<DummyGidToLidChangeHandler>()), _lidReuseDelayer(), _commitTimeTracker(TimeStamp()), _feedView() @@ -295,30 +265,21 @@ struct MyFastAccessFeedView void init() { ISummaryAdapter::SP summaryAdapter(new MySummaryAdapter()); Schema::SP schema(new Schema()); - DocumentMetaStoreContext::SP docMetaCtx( - new DocumentMetaStoreContext(std::make_shared<BucketDBOwner>())); - _dmsc = docMetaCtx; - _lidReuseDelayer.reset( - new documentmetastore::LidReuseDelayer(_writeService, - docMetaCtx->get())); + _dmsc = make_shared<DocumentMetaStoreContext>(std::make_shared<BucketDBOwner>()); + _lidReuseDelayer.reset(new documentmetastore::LidReuseDelayer(_writeService, _dmsc->get())); DocumentTypeRepo::SP repo = createRepo(); - StoreOnlyFeedView::Context storeOnlyCtx(summaryAdapter, schema, docMetaCtx, *_gidToLidChangeHandler, repo, _writeService, *_lidReuseDelayer, _commitTimeTracker); - StoreOnlyFeedView::PersistentParams params(1, 1, DocTypeName(DOC_TYPE), _metrics, 0, SubDbType::NOTREADY); - AttributeManager::SP mgr(new AttributeManager(BASE_DIR, "test.subdb", - TuneFileAttributes(), - _fileHeaderContext, - _writeService. - attributeFieldWriter(), - _hwInfo)); + StoreOnlyFeedView::Context storeOnlyCtx(summaryAdapter, schema, _dmsc, *_gidToLidChangeHandler, repo, + _writeService, *_lidReuseDelayer, _commitTimeTracker); + StoreOnlyFeedView::PersistentParams params(1, 1, DocTypeName(DOC_TYPE), 0, SubDbType::NOTREADY); + auto mgr = make_shared<AttributeManager>(BASE_DIR, "test.subdb", TuneFileAttributes(), _fileHeaderContext, + _writeService.attributeFieldWriter(), _hwInfo); IAttributeWriter::SP writer(new AttributeWriter(mgr)); FastAccessFeedView::Context fastUpdateCtx(writer, _docIdLimit); - _feedView.set(FastAccessFeedView::SP(new FastAccessFeedView(storeOnlyCtx, - params, fastUpdateCtx)));; + _feedView.set(FastAccessFeedView::SP(new FastAccessFeedView(storeOnlyCtx, params, fastUpdateCtx)));; } }; -MyFastAccessFeedView::~MyFastAccessFeedView() { -} +MyFastAccessFeedView::~MyFastAccessFeedView() = default; struct FastAccessFixture { @@ -328,8 +289,7 @@ struct FastAccessFixture FastAccessFixture() : _writeService(), _view(_writeService), - _configurer(_view._feedView, - IAttributeWriterFactory::UP(new AttributeWriterFactory), "test") + _configurer(_view._feedView, IAttributeWriterFactory::UP(new AttributeWriterFactory), "test") { vespalib::rmdir(BASE_DIR, true); vespalib::mkdir(BASE_DIR); @@ -339,11 +299,10 @@ struct FastAccessFixture } }; - DocumentDBConfig::SP createConfig() { - return test::DocumentDBConfigBuilder(0, std::make_shared<Schema>(), "client", DOC_TYPE). + return test::DocumentDBConfigBuilder(0, make_shared<Schema>(), "client", DOC_TYPE). repo(createRepo()).build(); } diff --git a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp index cccbbededd1..b0b06a238c9 100644 --- a/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedhandler/feedhandler_test.cpp @@ -14,7 +14,6 @@ #include <vespa/searchcore/proton/feedoperation/removeoperation.h> #include <vespa/searchcore/proton/feedoperation/updateoperation.h> #include <vespa/searchcore/proton/feedoperation/wipehistoryoperation.h> -#include <vespa/searchcore/proton/metrics/feed_metrics.h> #include <vespa/searchcore/proton/persistenceengine/i_resource_write_filter.h> #include <vespa/searchcore/proton/server/configstore.h> #include <vespa/searchcore/proton/server/ddbstate.h> @@ -306,7 +305,7 @@ struct MyTransport : public FeedToken::ITransport { bool documentWasFound; MyTransport(); ~MyTransport(); - virtual void send(Reply::UP, ResultUP res, bool documentWasFound_, double) override { + void send(ResultUP res, bool documentWasFound_) override { result = std::move(res); documentWasFound = documentWasFound_; gate.countDown(); @@ -316,21 +315,12 @@ struct MyTransport : public FeedToken::ITransport { MyTransport::MyTransport() : gate(), result(), documentWasFound(false) {} MyTransport::~MyTransport() {} -Reply::UP getReply(uint32_t type) { - if (type == DocumentProtocol::REPLY_REMOVEDOCUMENT) { - return Reply::UP(new RemoveDocumentReply); - } else if (type == DocumentProtocol::REPLY_UPDATEDOCUMENT) { - return Reply::UP(new UpdateDocumentReply); - } - return Reply::UP(new DocumentReply(type)); -} - struct FeedTokenContext { MyTransport transport; FeedToken::UP token_ap; FeedToken &token; - FeedTokenContext(uint32_t type = 0); + FeedTokenContext(); ~FeedTokenContext(); bool await(uint32_t timeout = 80000) { return transport.gate.await(timeout); } const Result *getResult() { @@ -341,24 +331,23 @@ struct FeedTokenContext { } }; -FeedTokenContext::FeedTokenContext(uint32_t type) +FeedTokenContext::FeedTokenContext() : transport(), - token_ap(new FeedToken(transport, getReply(type))), + token_ap(new FeedToken(transport)), token(*token_ap) { - token.getReply().getTrace().setLevel(9); } -FeedTokenContext::~FeedTokenContext() {} + +FeedTokenContext::~FeedTokenContext() = default; struct PutContext { FeedTokenContext tokenCtx; DocumentContext docCtx; typedef std::shared_ptr<PutContext> SP; PutContext(const vespalib::string &docId, DocBuilder &builder) : - tokenCtx(DocumentProtocol::REPLY_PUTDOCUMENT), + tokenCtx(), docCtx(docId, builder) - { - } + {} }; @@ -372,12 +361,10 @@ struct PutHandler { builder(db), timestamp(0), puts() - { - } + {} void put(const vespalib::string &docId) { PutContext::SP pc(new PutContext(docId, builder)); - FeedOperation::UP op(new PutOperation(pc->docCtx.bucketId, - timestamp, pc->docCtx.doc)); + FeedOperation::UP op(new PutOperation(pc->docCtx.bucketId, timestamp, pc->docCtx.doc)); handler.handleOperation(pc->tokenCtx.token, std::move(op)); timestamp = Timestamp(timestamp + 1); puts.push_back(pc); @@ -393,18 +380,6 @@ struct PutHandler { }; -struct MyFeedMetrics : public metrics::MetricSet -{ - PerDocTypeFeedMetrics _feed; - - MyFeedMetrics() - : metrics::MetricSet("myfeedmetrics", "", "My feed metrics", NULL), - _feed(this) - { - } -}; - - struct MyTlsWriter : TlsWriter { int store_count; int erase_count; @@ -419,7 +394,6 @@ struct MyTlsWriter : TlsWriter { } }; - struct FeedHandlerFixture { DummyFileHeaderContext _fileHeaderContext; @@ -432,7 +406,6 @@ struct FeedHandlerFixture DDBState _state; MyReplayConfig replayConfig; MyFeedView feedView; - MyFeedMetrics feedMetrics; MyTlsWriter tls_writer; BucketDBOwner _bucketDB; bucketdb::BucketDBHandler _bucketDBHandler; @@ -449,8 +422,8 @@ struct FeedHandlerFixture feedView(schema.getRepo()), _bucketDB(), _bucketDBHandler(_bucketDB), - handler(writeService, tlsSpec, schema.getDocType(), - feedMetrics._feed, _state, owner, writeFilter, replayConfig, tls, &tls_writer) + handler(writeService, tlsSpec, schema.getDocType(), _state, owner, + writeFilter, replayConfig, tls, &tls_writer) { _state.enterLoadState(); _state.enterReplayTransactionLogState(); @@ -507,12 +480,10 @@ TEST_F("require that heartBeat calls FeedView's heartBeat", TEST_F("require that outdated remove is ignored", FeedHandlerFixture) { DocumentContext doc_context("doc:test:foo", *f.schema.builder); - FeedOperation::UP op(new RemoveOperation(doc_context.bucketId, - Timestamp(10), - doc_context.doc->getId())); + FeedOperation::UP op(new RemoveOperation(doc_context.bucketId, Timestamp(10), doc_context.doc->getId())); static_cast<DocumentOperation &>(*op).setPrevDbDocumentId(DbDocumentId(4)); static_cast<DocumentOperation &>(*op).setPrevTimestamp(Timestamp(10000)); - FeedTokenContext token_context(DocumentProtocol::REPLY_REMOVEDOCUMENT); + FeedTokenContext token_context; f.handler.performOperation(std::move(token_context.token_ap), std::move(op)); EXPECT_EQUAL(0, f.feedView.remove_count); EXPECT_EQUAL(0, f.tls_writer.store_count); @@ -599,28 +570,21 @@ TEST_F("require that flush cannot unprune", FeedHandlerFixture) EXPECT_EQUAL(10u, f.handler.getPrunedSerialNum()); } -TEST_F("require that remove of unknown document with known data type " - "stores remove", FeedHandlerFixture) +TEST_F("require that remove of unknown document with known data type stores remove", FeedHandlerFixture) { - DocumentContext doc_context("id:test:searchdocument::foo", - *f.schema.builder); - FeedOperation::UP op(new RemoveOperation(doc_context.bucketId, - Timestamp(10), - doc_context.doc->getId())); - FeedTokenContext token_context(DocumentProtocol::REPLY_REMOVEDOCUMENT); + DocumentContext doc_context("id:test:searchdocument::foo", *f.schema.builder); + FeedOperation::UP op(new RemoveOperation(doc_context.bucketId, Timestamp(10), doc_context.doc->getId())); + FeedTokenContext token_context; f.handler.performOperation(std::move(token_context.token_ap), std::move(op)); EXPECT_EQUAL(1, f.feedView.remove_count); EXPECT_EQUAL(1, f.tls_writer.store_count); } -TEST_F("require that partial update for non-existing document is tagged as such", - FeedHandlerFixture) +TEST_F("require that partial update for non-existing document is tagged as such", FeedHandlerFixture) { UpdateContext upCtx("id:test:searchdocument::foo", *f.schema.builder); - FeedOperation::UP op(new UpdateOperation(upCtx.bucketId, - Timestamp(10), - upCtx.update)); - FeedTokenContext token_context(DocumentProtocol::REPLY_UPDATEDOCUMENT); + FeedOperation::UP op(new UpdateOperation(upCtx.bucketId, Timestamp(10), upCtx.update)); + FeedTokenContext token_context; f.handler.performOperation(std::move(token_context.token_ap), std::move(op)); const UpdateResult *result = static_cast<const UpdateResult *>(token_context.getResult()); @@ -631,18 +595,14 @@ TEST_F("require that partial update for non-existing document is tagged as such" EXPECT_EQUAL(0, f.tls_writer.store_count); } -TEST_F("require that partial update for non-existing document is created if specified", - FeedHandlerFixture) +TEST_F("require that partial update for non-existing document is created if specified", FeedHandlerFixture) { f.handler.setSerialNum(15); UpdateContext upCtx("id:test:searchdocument::foo", *f.schema.builder); upCtx.update->setCreateIfNonExistent(true); - f.feedView.metaStore.insert(upCtx.update->getId().getGlobalId(), - MyDocumentMetaStore::Entry(5, 5, Timestamp(10))); - FeedOperation::UP op(new UpdateOperation(upCtx.bucketId, - Timestamp(10), - upCtx.update)); - FeedTokenContext token_context(DocumentProtocol::REPLY_UPDATEDOCUMENT); + f.feedView.metaStore.insert(upCtx.update->getId().getGlobalId(), MyDocumentMetaStore::Entry(5, 5, Timestamp(10))); + FeedOperation::UP op(new UpdateOperation(upCtx.bucketId, Timestamp(10), upCtx.update)); + FeedTokenContext token_context; f.handler.performOperation(std::move(token_context.token_ap), std::move(op)); const UpdateResult *result = static_cast<const UpdateResult *>(token_context.getResult()); @@ -678,7 +638,7 @@ TEST_F("require that update is rejected if resource limit is reached", FeedHandl UpdateContext updCtx("id:test:searchdocument::foo", *f.schema.builder); FeedOperation::UP op = std::make_unique<UpdateOperation>(updCtx.bucketId, Timestamp(10), updCtx.update); - FeedTokenContext token(DocumentProtocol::REPLY_UPDATEDOCUMENT); + FeedTokenContext token; f.handler.performOperation(std::move(token.token_ap), std::move(op)); EXPECT_EQUAL(0, f.feedView.update_count); EXPECT_TRUE(dynamic_cast<const UpdateResult *>(token.getResult())); @@ -694,7 +654,7 @@ TEST_F("require that remove is NOT rejected if resource limit is reached", FeedH DocumentContext docCtx("id:test:searchdocument::foo", *f.schema.builder); FeedOperation::UP op = std::make_unique<RemoveOperation>(docCtx.bucketId, Timestamp(10), docCtx.doc->getId()); - FeedTokenContext token(DocumentProtocol::REPLY_REMOVEDOCUMENT); + FeedTokenContext token; f.handler.performOperation(std::move(token.token_ap), std::move(op)); EXPECT_EQUAL(1, f.feedView.remove_count); EXPECT_EQUAL(Result::NONE, token.getResult()->getErrorCode()); diff --git a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp index c820a9f392c..4eefbed0a53 100644 --- a/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp +++ b/searchcore/src/tests/proton/documentdb/feedview/feedview_test.cpp @@ -10,7 +10,6 @@ #include <vespa/searchcore/proton/common/feedtoken.h> #include <vespa/searchcore/proton/documentmetastore/lidreusedelayer.h> #include <vespa/searchcore/proton/index/i_index_writer.h> -#include <vespa/searchcore/proton/metrics/feed_metrics.h> #include <vespa/searchcore/proton/server/executorthreadingservice.h> #include <vespa/searchcore/proton/server/ifrozenbuckethandler.h> #include <vespa/searchcore/proton/server/isummaryadapter.h> @@ -30,9 +29,6 @@ #include <vespa/searchlib/docstore/cachestats.h> #include <vespa/searchlib/docstore/idocumentstore.h> #include <vespa/searchlib/index/docbuilder.h> -#include <vespa/vespalib/testkit/testapp.h> -#include <vespa/vespalib/util/blockingthreadstackexecutor.h> -#include <mutex> #include <vespa/log/log.h> LOG_SETUP("feedview_test"); @@ -132,8 +128,6 @@ struct MyTracer struct ParamsContext { DocTypeName _docTypeName; - FeedMetrics _feedMetrics; - PerDocTypeFeedMetrics _metrics; SearchableFeedView::PersistentParams _params; ParamsContext(const vespalib::string &docType, const vespalib::string &baseDir); @@ -143,9 +137,7 @@ struct ParamsContext ParamsContext::ParamsContext(const vespalib::string &docType, const vespalib::string &baseDir) : _docTypeName(docType), - _feedMetrics(), - _metrics(&_feedMetrics), - _params(0, 0, _docTypeName, _metrics, subdb_id, SubDbType::READY) + _params(0, 0, _docTypeName, subdb_id, SubDbType::READY) { (void) baseDir; } @@ -420,11 +412,7 @@ struct MyTransport : public FeedToken::ITransport MyTracer &_tracer; MyTransport(MyTracer &tracer); ~MyTransport(); - virtual void send(mbus::Reply::UP reply, - ResultUP result, - bool documentWasFound, - double latency_ms) override { - (void) reply; (void) documentWasFound, (void) latency_ms; + void send(ResultUP result, bool ) override { lastResult = std::move(result); _tracer.traceAck(lastResult); _gate.countDown(); @@ -492,36 +480,20 @@ DocumentContext::DocumentContext(const vespalib::string &docId, uint64_t timesta {} DocumentContext::~DocumentContext() {} -namespace { - -mbus::Reply::UP -createReply(MessageType mtype) -{ - if (mtype == DocumentProtocol::REPLY_UPDATEDOCUMENT) { - return mbus::Reply::UP(new documentapi::UpdateDocumentReply); - } else if (mtype == DocumentProtocol::REPLY_REMOVEDOCUMENT) { - return mbus::Reply::UP(new documentapi::RemoveDocumentReply); - } else { - return mbus::Reply::UP(new documentapi::DocumentReply(mtype)); - } -} - -} // namespace - struct FeedTokenContext { MyTransport mt; FeedToken ft; typedef std::shared_ptr<FeedTokenContext> SP; typedef std::vector<SP> List; - FeedTokenContext(MyTracer &tracer, MessageType mtype); + FeedTokenContext(MyTracer &tracer); ~FeedTokenContext(); }; -FeedTokenContext::FeedTokenContext(MyTracer &tracer, MessageType mtype) - : mt(tracer), ft(mt, createReply(mtype)) +FeedTokenContext::FeedTokenContext(MyTracer &tracer) + : mt(tracer), ft(mt) {} -FeedTokenContext::~FeedTokenContext() {} +FeedTokenContext::~FeedTokenContext() = default; struct FixtureBase { @@ -612,7 +584,7 @@ struct FixtureBase } void putAndWait(const DocumentContext &docCtx) { - FeedTokenContext token(_tracer, DocumentProtocol::REPLY_PUTDOCUMENT); + FeedTokenContext token(_tracer); PutOperation op(docCtx.bid, docCtx.ts, docCtx.doc); runInMaster([&] () { performPut(&token.ft, op); }); } @@ -624,7 +596,7 @@ struct FixtureBase } void updateAndWait(const DocumentContext &docCtx) { - FeedTokenContext token(_tracer, DocumentProtocol::REPLY_UPDATEDOCUMENT); + FeedTokenContext token(_tracer); UpdateOperation op(docCtx.bid, docCtx.ts, docCtx.upd); runInMaster([&] () { performUpdate(&token.ft, op); }); } @@ -636,13 +608,13 @@ struct FixtureBase getFeedView().handleRemove(token, op); } else { if (token != NULL) { - token->ack(op.getType(), pc._metrics); + token->ack(); } } } void removeAndWait(const DocumentContext &docCtx) { - FeedTokenContext token(_tracer, DocumentProtocol::REPLY_REMOVEDOCUMENT); + FeedTokenContext token(_tracer); RemoveOperation op(docCtx.bid, docCtx.ts, docCtx.doc->getId()); runInMaster([&] () { performRemove(&token.ft, op); }); } diff --git a/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp b/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp index 1ec201fdbd2..bbdabe2d0ef 100644 --- a/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp +++ b/searchcore/src/tests/proton/documentdb/storeonlyfeedview/storeonlyfeedview_test.cpp @@ -1,13 +1,10 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/document/base/documentid.h> -#include <vespa/document/base/globalid.h> -#include <vespa/document/bucket/bucketid.h> #include <vespa/document/datatype/datatype.h> #include <vespa/searchcommon/common/schema.h> #include <vespa/searchcore/proton/common/commit_time_tracker.h> #include <vespa/searchcore/proton/documentmetastore/lidreusedelayer.h> -#include <vespa/searchcore/proton/metrics/feed_metrics.h> #include <vespa/searchcore/proton/server/executorthreadingservice.h> #include <vespa/searchcore/proton/server/putdonecontext.h> #include <vespa/searchcore/proton/server/removedonecontext.h> @@ -15,8 +12,6 @@ #include <vespa/searchcore/proton/reference/dummy_gid_to_lid_change_handler.h> #include <vespa/searchcore/proton/test/mock_summary_adapter.h> #include <vespa/searchcore/proton/test/thread_utils.h> -#include <vespa/searchlib/common/idestructorcallback.h> -#include <vespa/searchlib/common/serialnum.h> #include <vespa/searchlib/index/docbuilder.h> #include <vespa/vespalib/testkit/testapp.h> @@ -225,8 +220,7 @@ struct FixtureBase { commitTimeTracker(fastos::TimeStamp()), feedview() { - PerDocTypeFeedMetrics metrics(0); - StoreOnlyFeedView::PersistentParams params(0, 0, DocTypeName("foo"), metrics, subdb_id, subDbType); + StoreOnlyFeedView::PersistentParams params(0, 0, DocTypeName("foo"), subdb_id, subDbType); metaStore->constructFreeList(); ISummaryAdapter::SP adapter = std::make_unique<MySummaryAdapter>(removeCount, putCount, heartbeatCount); feedview = std::make_unique<FeedViewType>(adapter, metaStore, writeService, lidReuseDelayer, diff --git a/searchcore/src/tests/proton/feedtoken/feedtoken.cpp b/searchcore/src/tests/proton/feedtoken/feedtoken.cpp index 9df65ae3437..530c9ebef39 100644 --- a/searchcore/src/tests/proton/feedtoken/feedtoken.cpp +++ b/searchcore/src/tests/proton/feedtoken/feedtoken.cpp @@ -1,57 +1,39 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/messagebus/emptyreply.h> -#include <vespa/messagebus/testlib/receptor.h> -#include <vespa/documentapi/messagebus/messages/removedocumentreply.h> -#include <vespa/searchcore/proton/common/feedtoken.h> #include <vespa/vespalib/testkit/testapp.h> +#include <vespa/searchcore/proton/common/feedtoken.h> #include <vespa/vespalib/util/exceptions.h> using namespace proton; class LocalTransport : public FeedToken::ITransport { private: - mbus::Receptor _receptor; - double _latency_ms; + size_t _receivedCount; public: LocalTransport() - : _receptor(), - _latency_ms(0.0) - { - // empty - } - - void send(mbus::Reply::UP reply, ResultUP, bool, double latency_ms) override { - _receptor.handleReply(std::move(reply)); - _latency_ms = latency_ms; - } + : _receivedCount(0) + { } - mbus::Reply::UP getReply() { - return _receptor.getReply(); + void send(ResultUP, bool) override { + _receivedCount++; } - double getLatencyMs() const { - return _latency_ms; - } + size_t getReceivedCount() const { return _receivedCount; } }; class Test : public vespalib::TestApp { private: void testAck(); - void testAutoReply(); void testFail(); void testHandover(); - void testIntegrity(); public: int Main() override { TEST_INIT("feedtoken_test"); testAck(); TEST_FLUSH(); -// testAutoReply(); TEST_FLUSH(); testFail(); TEST_FLUSH(); testHandover(); TEST_FLUSH(); -// testIntegrity(); TEST_FLUSH(); TEST_DONE(); } @@ -63,41 +45,18 @@ void Test::testAck() { LocalTransport transport; - mbus::Reply::UP msg(new documentapi::RemoveDocumentReply()); - FeedToken token(transport, std::move(msg)); + FeedToken token(transport); token.ack(); - mbus::Reply::UP reply = transport.getReply(); - ASSERT_TRUE(reply.get() != NULL); - EXPECT_TRUE(!reply->hasErrors()); -} - -void -Test::testAutoReply() -{ - mbus::Receptor receptor; - mbus::Reply::UP reply(new documentapi::RemoveDocumentReply()); - reply->pushHandler(receptor); - { - LocalTransport transport; - FeedToken token(transport, std::move(reply)); - } - reply = receptor.getReply(0); - ASSERT_TRUE(reply.get() != NULL); - EXPECT_TRUE(reply->hasErrors()); + EXPECT_EQUAL(1u, transport.getReceivedCount()); } void Test::testFail() { LocalTransport transport; - mbus::Reply::UP reply(new documentapi::RemoveDocumentReply()); - FeedToken token(transport, std::move(reply)); - token.fail(69, "6699"); - reply = transport.getReply(); - ASSERT_TRUE(reply.get() != NULL); - EXPECT_EQUAL(1u, reply->getNumErrors()); - EXPECT_EQUAL(69u, reply->getError(0).getCode()); - EXPECT_EQUAL("6699", reply->getError(0).getMessage()); + FeedToken token(transport); + token.fail(); + EXPECT_EQUAL(1u, transport.getReceivedCount()); } void @@ -110,25 +69,11 @@ Test::testHandover() }; LocalTransport transport; - mbus::Reply::UP reply(new documentapi::RemoveDocumentReply()); - FeedToken token(transport, std::move(reply)); + FeedToken token(transport); token = MyHandover::handover(token); token.ack(); - reply = transport.getReply(); - ASSERT_TRUE(reply.get() != NULL); - EXPECT_TRUE(!reply->hasErrors()); + EXPECT_EQUAL(1u, transport.getReceivedCount()); } -void -Test::testIntegrity() -{ - LocalTransport transport; - try { - FeedToken token(transport, mbus::Reply::UP()); - EXPECT_TRUE(false); // should throw an exception - } catch (vespalib::IllegalArgumentException &e) { - (void)e; // expected - } -} diff --git a/searchcore/src/vespa/searchcore/fdispatch/search/nodemanager.cpp b/searchcore/src/vespa/searchcore/fdispatch/search/nodemanager.cpp index fd60b16ee70..10f70b2e518 100644 --- a/searchcore/src/vespa/searchcore/fdispatch/search/nodemanager.cpp +++ b/searchcore/src/vespa/searchcore/fdispatch/search/nodemanager.cpp @@ -239,10 +239,11 @@ FastS_NodeManager::SetCollDesc(FastS_DataSetCollDesc *configDesc, break; FastOS_Thread::Sleep(100); }; - if (allup) + if (allup) { LOG(debug, "All new engines up after %d ms", rwait); - else + } else { LOG(debug, "Some new engines still down after %d ms", rwait); + } } gencnt = SetDataSetCollection(newCollection); diff --git a/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h b/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h index 7455ccda5a3..abcf132d537 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h +++ b/searchcore/src/vespa/searchcore/proton/attribute/i_attribute_writer.h @@ -9,11 +9,7 @@ #include <vespa/searchcore/proton/attribute/i_attribute_manager.h> #include <vespa/searchcore/proton/feedoperation/lidvectorcontext.h> -namespace search { - -class IDestructorCallback; - -} +namespace search { class IDestructorCallback; } namespace proton { diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp index 545a303cb16..008fafa332b 100644 --- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp +++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.cpp @@ -1,93 +1,53 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "feedtoken.h" -#include <vespa/searchcore/proton/metrics/feed_metrics.h> namespace proton { -FeedToken::FeedToken(ITransport &transport, mbus::Reply::UP reply) : - _state(new State(transport, std::move(reply), 1)) +FeedToken::FeedToken(ITransport &transport) : + _state(new State(transport, 1)) { } -FeedToken::State::State(ITransport & transport, mbus::Reply::UP reply, uint32_t numAcksRequired) : +FeedToken::State::State(ITransport & transport, uint32_t numAcksRequired) : _transport(transport), - _reply(std::move(reply)), _result(new storage::spi::Result()), _documentWasFound(false), - _unAckedCount(numAcksRequired), - _lock(), - _startTime() + _unAckedCount(numAcksRequired) { - assert(_reply); - _startTime.SetNow(); + assert(_unAckedCount > 0); } FeedToken::State::~State() { - assert(!_reply); + assert(_unAckedCount == 0); } void FeedToken::State::ack() { - assert(_reply); uint32_t prev(_unAckedCount--); if (prev == 1) { - _transport.send(std::move(_reply), std::move(_result), _documentWasFound, _startTime.MilliSecsToNow()); + _transport.send(std::move(_result), _documentWasFound); } assert(prev >= 1); } - -void -FeedToken::State::ack(const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics) -{ - assert(_reply); - uint32_t prev(_unAckedCount--); - if (prev == 1) { - _transport.send(std::move(_reply), std::move(_result), _documentWasFound, _startTime.MilliSecsToNow()); - switch (opType) { - case FeedOperation::PUT: - metrics.RegisterPut(_startTime); - break; - case FeedOperation::REMOVE: - case FeedOperation::REMOVE_BATCH: - metrics.RegisterRemove(_startTime); - break; - case FeedOperation::UPDATE_42: - case FeedOperation::UPDATE: - metrics.RegisterUpdate(_startTime); - break; - case FeedOperation::MOVE: - metrics.RegisterMove(_startTime); - break; - default: - ; - } - } - assert(prev >= 1); -} - - void FeedToken::State::incNeededAcks() { - assert(_reply); uint32_t prev(_unAckedCount++); assert(prev >= 1); (void) prev; } - void -FeedToken::State::fail(uint32_t errNum, const vespalib::string &errMsg) +FeedToken::State::fail() { - assert(_reply); - vespalib::LockGuard guard(_lock); - _reply->addError(mbus::Error(errNum, errMsg)); - _transport.send(std::move(_reply), std::move(_result), _documentWasFound, _startTime.MilliSecsToNow()); + uint32_t prev = _unAckedCount.exchange(0); + if (prev > 0) { + _transport.send(std::move(_result), _documentWasFound); + } } } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h index 722827ded87..856c8a22652 100644 --- a/searchcore/src/vespa/searchcore/proton/common/feedtoken.h +++ b/searchcore/src/vespa/searchcore/proton/common/feedtoken.h @@ -1,16 +1,13 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once -#include <vespa/messagebus/reply.h> #include <vespa/persistence/spi/persistenceprovider.h> #include <vespa/vespalib/util/exception.h> #include <vespa/vespalib/util/sync.h> -#include <vespa/searchcore/proton/feedoperation/feedoperation.h> #include <atomic> namespace proton { -class PerDocTypeFeedMetrics; typedef std::unique_ptr<storage::spi::Result> ResultUP; /** @@ -23,10 +20,7 @@ public: class ITransport { public: virtual ~ITransport() { } - virtual void send(mbus::Reply::UP reply, - ResultUP result, - bool documentWasFound, - double latency_ms) = 0; + virtual void send(ResultUP result, bool documentWasFound) = 0; }; private: @@ -34,30 +28,21 @@ private: public: State(const State &) = delete; State & operator = (const State &) = delete; - State(ITransport & transport, mbus::Reply::UP reply, uint32_t numAcksRequired); + State(ITransport & transport, uint32_t numAcksRequired); ~State(); - void ack(); - - void ack(const FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics); - void incNeededAcks(); - - void fail(uint32_t errNum, const vespalib::string &errMsg); - mbus::Reply & getReply() { return *_reply; } + void ack(); + void fail(); void setResult(ResultUP result, bool documentWasFound) { _documentWasFound = documentWasFound; _result = std::move(result); } const storage::spi::Result &getResult() { return *_result; } - FastOS_Time getStartTime() const { return _startTime; } private: - ITransport &_transport; - mbus::Reply::UP _reply; - ResultUP _result; - bool _documentWasFound; + ITransport &_transport; + ResultUP _result; + bool _documentWasFound; std::atomic<uint32_t> _unAckedCount; - vespalib::Lock _lock; - FastOS_Time _startTime; }; std::shared_ptr<State> _state; @@ -72,9 +57,8 @@ public: * vespalib::IllegalArgumentException. * * @param transport The transport to pass the reply to. - * @param reply The mbus::Reply corresponding to this operation. */ - FeedToken(ITransport &transport, mbus::Reply::UP reply); + FeedToken(ITransport &transport); FeedToken(FeedToken &&) = default; FeedToken & operator =(FeedToken &&) = default; @@ -89,10 +73,6 @@ public: */ void ack() const { _state->ack(); } - void ack(const FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics) const { - _state->ack(opType, metrics); - } - void incNeededAcks() const { _state->incNeededAcks(); } @@ -105,14 +85,7 @@ public: * @param errNum A numerical representation of the error. * @param errMsg A readable string detailing the error. */ - void fail(uint32_t errNum, const vespalib::string &errMsg) const { _state->fail(errNum, errMsg); } - - /** - * Gives you access to the underlying reply message. - * - * @return The reply - */ - mbus::Reply & getReply() const { return _state->getReply(); } + void fail() const { _state->fail(); } /** * Gives you access to the underlying result. @@ -127,8 +100,6 @@ public: void setResult(ResultUP result, bool documentWasFound) { _state->setResult(std::move(result), documentWasFound); } - - FastOS_Time getStartTime() const { return _state->getStartTime(); } }; } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt index 9f599208aa2..95d5f153f35 100644 --- a/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt +++ b/searchcore/src/vespa/searchcore/proton/metrics/CMakeLists.txt @@ -7,7 +7,6 @@ vespa_add_library(searchcore_proton_metrics STATIC documentdb_metrics_collection.cpp documentdb_tagged_metrics.cpp executor_metrics.cpp - feed_metrics.cpp job_load_sampler.cpp job_tracker.cpp job_tracked_flush_target.cpp diff --git a/searchcore/src/vespa/searchcore/proton/metrics/feed_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/feed_metrics.cpp deleted file mode 100644 index 06b2f8a5fca..00000000000 --- a/searchcore/src/vespa/searchcore/proton/metrics/feed_metrics.cpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#include "feed_metrics.h" - -using vespalib::LockGuard; - -namespace proton { - -FeedMetrics::FeedMetrics() - : metrics::MetricSet("feed", "", "Feed metrics", 0), - count("count", "logdefault", "Feed messages handled", this), - latency("latency", "logdefault", "Feed message latency", this) -{ -} - -FeedMetrics::~FeedMetrics() {} - -PerDocTypeFeedMetrics::PerDocTypeFeedMetrics(MetricSet *parent) - : MetricSet("feedmetrics", "", "Feed metrics", parent), - _update_lock(), - _puts("puts", "", "Number of feed put operations", this), - _updates("updates", "", "Number of feed update operations", this), - _removes("removes", "", "Number of feed remove operations", this), - _moves("moves", "", "Number of feed move operations", this), - _put_latency("put_latency", "", "Latency for feed puts", this), - _update_latency("update_latency", "", "Latency for feed updates", this), - _remove_latency("remove_latency", "", "Latency for feed removes", this), - _move_latency("move_latency", "", "Latency for feed moves", this) -{ -} - -PerDocTypeFeedMetrics::~PerDocTypeFeedMetrics() {} - -void PerDocTypeFeedMetrics::RegisterPut(const FastOS_Time &start_time) { - LockGuard lock(_update_lock); - _puts.inc(1); - _put_latency.addValue(start_time.MilliSecsToNow() / 1000.0); -} - -void PerDocTypeFeedMetrics::RegisterUpdate(const FastOS_Time &start_time) { - LockGuard lock(_update_lock); - _updates.inc(1); - _update_latency.addValue(start_time.MilliSecsToNow() / 1000.0); -} - -void PerDocTypeFeedMetrics::RegisterRemove(const FastOS_Time &start_time) { - LockGuard lock(_update_lock); - _removes.inc(1); - _remove_latency.addValue(start_time.MilliSecsToNow() / 1000.0); -} - -void -PerDocTypeFeedMetrics::RegisterMove(const FastOS_Time &start_time) -{ - LockGuard lock(_update_lock); - _moves.inc(1); - _move_latency.addValue(start_time.MilliSecsToNow() / 1000.0); -} - -} // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/metrics/feed_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/feed_metrics.h deleted file mode 100644 index 8d8a8bcbb88..00000000000 --- a/searchcore/src/vespa/searchcore/proton/metrics/feed_metrics.h +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -#include <vespa/metrics/metrics.h> -#include <vespa/vespalib/util/sync.h> - -namespace proton { - -struct FeedMetrics : metrics::MetricSet -{ - vespalib::Lock updateLock; - metrics::LongCountMetric count; - metrics::DoubleAverageMetric latency; - - FeedMetrics(); - ~FeedMetrics(); -}; - -class PerDocTypeFeedMetrics : metrics::MetricSet { - vespalib::Lock _update_lock; - metrics::LongCountMetric _puts; - metrics::LongCountMetric _updates; - metrics::LongCountMetric _removes; - metrics::LongCountMetric _moves; - metrics::DoubleAverageMetric _put_latency; - metrics::DoubleAverageMetric _update_latency; - metrics::DoubleAverageMetric _remove_latency; - metrics::DoubleAverageMetric _move_latency; - -public: - PerDocTypeFeedMetrics(metrics::MetricSet *parent); - ~PerDocTypeFeedMetrics(); - void RegisterPut(const FastOS_Time &start_time); - void RegisterUpdate(const FastOS_Time &start_time); - void RegisterRemove(const FastOS_Time &start_time); - void RegisterMove(const FastOS_Time &start_time); -}; - -} // namespace proton - diff --git a/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.cpp index d324c4a7373..2c753d24c69 100644 --- a/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.cpp +++ b/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.cpp @@ -152,7 +152,6 @@ LegacyDocumentDBMetrics::LegacyDocumentDBMetrics(const std::string &docTypeName, executor("executor", this), indexExecutor("indexexecutor", this), summaryExecutor("summaryexecutor", this), - feed(this), sessionManager(this), ready("ready", this), notReady("notready", this), diff --git a/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h index 78a13002d7a..0abad83a3a6 100644 --- a/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h +++ b/searchcore/src/vespa/searchcore/proton/metrics/legacy_documentdb_metrics.h @@ -6,7 +6,6 @@ #include "executor_metrics.h" #include <vespa/metrics/metrics.h> #include "sessionmanager_metrics.h" -#include "feed_metrics.h" #include <vespa/searchcore/proton/matching/matching_stats.h> namespace proton { @@ -117,7 +116,6 @@ struct LegacyDocumentDBMetrics : metrics::MetricSet ExecutorMetrics executor; ExecutorMetrics indexExecutor; ExecutorMetrics summaryExecutor; - PerDocTypeFeedMetrics feed; search::grouping::SessionManagerMetrics sessionManager; SubDBMetrics ready; SubDBMetrics notReady; diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp index 69a3a902af8..feebbf4cf2a 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/persistenceengine.cpp @@ -182,17 +182,14 @@ PersistenceEngine::getHandlerSnapshot(document::BucketSpace bucketSpace) const } PersistenceEngine::HandlerSnapshot::UP -PersistenceEngine::getHandlerSnapshot(document::BucketSpace bucketSpace, - const DocumentId &id) const +PersistenceEngine::getHandlerSnapshot(document::BucketSpace bucketSpace, const DocumentId &id) const { LockGuard guard(_lock); return _handlers.getHandlerSnapshot(bucketSpace, id); } -PersistenceEngine::PersistenceEngine(IPersistenceEngineOwner &owner, - const IResourceWriteFilter &writeFilter, - ssize_t defaultSerializedSize, - bool ignoreMaxBytes) +PersistenceEngine::PersistenceEngine(IPersistenceEngineOwner &owner, const IResourceWriteFilter &writeFilter, + ssize_t defaultSerializedSize, bool ignoreMaxBytes) : AbstractPersistenceProvider(), _defaultSerializedSize(defaultSerializedSize), _ignoreMaxBytes(ignoreMaxBytes), @@ -216,8 +213,7 @@ PersistenceEngine::~PersistenceEngine() IPersistenceHandler::SP -PersistenceEngine::putHandler(document::BucketSpace bucketSpace, - const DocTypeName &docType, +PersistenceEngine::putHandler(document::BucketSpace bucketSpace, const DocTypeName &docType, const IPersistenceHandler::SP &handler) { LockGuard guard(_lock); @@ -226,8 +222,7 @@ PersistenceEngine::putHandler(document::BucketSpace bucketSpace, IPersistenceHandler::SP -PersistenceEngine::getHandler(document::BucketSpace bucketSpace, - const DocTypeName &docType) const +PersistenceEngine::getHandler(document::BucketSpace bucketSpace, const DocTypeName &docType) const { LockGuard guard(_lock); return _handlers.getHandler(bucketSpace, docType); @@ -235,8 +230,7 @@ PersistenceEngine::getHandler(document::BucketSpace bucketSpace, IPersistenceHandler::SP -PersistenceEngine::removeHandler(document::BucketSpace bucketSpace, - const DocTypeName &docType) +PersistenceEngine::removeHandler(document::BucketSpace bucketSpace, const DocTypeName &docType) { // TODO: Grab bucket list and treat them as modified LockGuard guard(_lock); @@ -367,8 +361,7 @@ PersistenceEngine::put(const Bucket& b, Timestamp t, const document::Document::S docType.toString().c_str())); } TransportLatch latch(1); - FeedToken token(latch, mbus::Reply::UP(new documentapi::FeedReply( - documentapi::DocumentProtocol::REPLY_PUTDOCUMENT))); + FeedToken token(latch); handler->handlePut(token, b, t, doc); latch.await(); return latch.getResult(); @@ -390,7 +383,7 @@ PersistenceEngine::remove(const Bucket& b, Timestamp t, const DocumentId& did, C TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch, Reply::UP(new RemoveDocumentReply)); + FeedToken token(latch); handler->handleRemove(token, b, t, did); } latch.await(); @@ -421,7 +414,7 @@ PersistenceEngine::update(const Bucket& b, Timestamp t, const DocumentUpdate::SP IPersistenceHandler::SP handler = getHandler(b.getBucketSpace(), docType); TransportLatch latch(1); if (handler.get() != NULL) { - FeedToken token(latch, mbus::Reply::UP(new documentapi::UpdateDocumentReply())); + FeedToken token(latch); LOG(debug, "update = %s", upd->toXml().c_str()); handler->handleUpdate(token, b, t, upd); latch.await(); @@ -433,10 +426,7 @@ PersistenceEngine::update(const Bucket& b, Timestamp t, const DocumentUpdate::SP PersistenceEngine::GetResult -PersistenceEngine::get(const Bucket& b, - const document::FieldSet& fields, - const DocumentId& did, - Context& context) const +PersistenceEngine::get(const Bucket& b, const document::FieldSet& fields, const DocumentId& did, Context& context) const { std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex); HandlerSnapshot::UP snapshot = getHandlerSnapshot(b.getBucketSpace()); @@ -465,11 +455,8 @@ PersistenceEngine::get(const Bucket& b, PersistenceEngine::CreateIteratorResult -PersistenceEngine::createIterator(const Bucket &bucket, - const document::FieldSet& fields, - const Selection &selection, - IncludedVersions versions, - Context & context) +PersistenceEngine::createIterator(const Bucket &bucket, const document::FieldSet& fields, const Selection &selection, + IncludedVersions versions, Context & context) { std::shared_lock<std::shared_timed_mutex> rguard(_rwMutex); HandlerSnapshot::UP snapshot = getHandlerSnapshot(bucket.getBucketSpace()); @@ -552,7 +539,7 @@ PersistenceEngine::createBucket(const Bucket &b, Context &) TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch, Reply::UP(new DocumentReply(0))); + FeedToken token(latch); handler->handleCreateBucket(token, b); } latch.await(); @@ -569,7 +556,7 @@ PersistenceEngine::deleteBucket(const Bucket& b, Context&) TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch, Reply::UP(new DocumentReply(0))); + FeedToken token(latch); handler->handleDeleteBucket(token, b); } latch.await(); @@ -612,7 +599,7 @@ PersistenceEngine::split(const Bucket& source, const Bucket& target1, const Buck TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch, Reply::UP(new DocumentReply(0))); + FeedToken token(latch); handler->handleSplit(token, source, target1, target2); } latch.await(); @@ -631,7 +618,7 @@ PersistenceEngine::join(const Bucket& source1, const Bucket& source2, const Buck TransportLatch latch(snap->size()); for (; snap->handlers().valid(); snap->handlers().next()) { IPersistenceHandler *handler = snap->handlers().get(); - FeedToken token(latch, Reply::UP(new DocumentReply(0))); + FeedToken token(latch); handler->handleJoin(token, source1, source2, target); } latch.await(); diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp index e719a0aa962..e0d512ae6e0 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.cpp @@ -16,16 +16,11 @@ TransportLatch::TransportLatch(uint32_t cnt) TransportLatch::~TransportLatch() {} void -TransportLatch::send(mbus::Reply::UP reply, - ResultUP result, - bool documentWasFound, - double latency_ms) +TransportLatch::send(ResultUP result, bool documentWasFound) { - (void) reply; - (void) latency_ms; { vespalib::LockGuard guard(_lock); - if (!_result.get()) { + if (!_result) { _result = std::move(result); } else if (result->hasError()) { _result.reset(new Result(mergeErrorResults(*_result, *result))); @@ -40,9 +35,7 @@ Result TransportLatch::mergeErrorResults(const Result &lhs, const Result &rhs) { Result::ErrorType error = (lhs.getErrorCode() > rhs.getErrorCode() ? lhs : rhs).getErrorCode(); - return Result(error, vespalib::make_string("%s, %s", - lhs.getErrorMessage().c_str(), - rhs.getErrorMessage().c_str())); + return Result(error, vespalib::make_string("%s, %s", lhs.getErrorMessage().c_str(), rhs.getErrorMessage().c_str())); } } // proton diff --git a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h index 747c95358b4..12f92722dfa 100644 --- a/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h +++ b/searchcore/src/vespa/searchcore/proton/persistenceengine/transport_latch.h @@ -20,10 +20,7 @@ private: public: TransportLatch(uint32_t cnt); ~TransportLatch(); - virtual void send(mbus::Reply::UP reply, - ResultUP result, - bool documentWasFound, - double latency_ms) override; + void send(ResultUP result, bool documentWasFound) override; void await() { _latch.await(); } diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp index cffa014534e..4198803d1fe 100644 --- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp @@ -125,9 +125,7 @@ DocumentDB::DocumentDB(const vespalib::string &baseDir, _state(), _dmUsageForwarder(_writeService.master()), _writeFilter(), - _feedHandler(_writeService, tlsSpec, docTypeName, - getMetricsCollection().getLegacyMetrics().feed, - _state, *this, _writeFilter, *this, tlsDirectWriter), + _feedHandler(_writeService, tlsSpec, docTypeName, _state, *this, _writeFilter, *this, tlsDirectWriter), _subDBs(*this, *this, _feedHandler, _docTypeName, _writeService, warmupExecutor, summaryExecutor, fileHeaderContext, metricsWireService, getMetricsCollection(), queryLimiter, clock, _configMutex, _baseDir, protonCfg, hwInfo), @@ -138,7 +136,7 @@ DocumentDB::DocumentDB(const vespalib::string &baseDir, _lastDocStoreCacheStats(), _calc() { - assert(configSnapshot.get() != NULL); + assert(configSnapshot); LOG(debug, "DocumentDB(%s): Creating database in directory '%s'", _docTypeName.toString().c_str(), _baseDir.c_str()); @@ -277,7 +275,7 @@ DocumentDB::newConfigSnapshot(DocumentDBConfig::SP snapshot) _pendingConfigSnapshot.set(snapshot); { lock_guard guard(_configMutex); - if (_activeConfigSnapshot.get() == NULL) { + if ( ! _activeConfigSnapshot) { LOG(debug, "DocumentDB(%s): Ignoring new available config snapshot. " "The document database does not have" diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp index e46caca4fba..2b2849d025c 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.cpp @@ -36,11 +36,8 @@ FastAccessFeedView::getUpdateScope(const DocumentUpdate &upd) * Otherwise we can drop it and ack the operation right away. */ void -FastAccessFeedView::putAttributes(SerialNum serialNum, - search::DocumentIdT lid, - const Document &doc, - bool immediateCommit, - OnPutDoneType onWriteDone) +FastAccessFeedView::putAttributes(SerialNum serialNum, search::DocumentIdT lid, const Document &doc, + bool immediateCommit, OnPutDoneType onWriteDone) { _attributeWriter->put(serialNum, doc, lid, immediateCommit, onWriteDone); if (immediateCommit && onWriteDone) { @@ -49,29 +46,22 @@ FastAccessFeedView::putAttributes(SerialNum serialNum, } void -FastAccessFeedView::updateAttributes(SerialNum serialNum, - search::DocumentIdT lid, - const DocumentUpdate &upd, - bool immediateCommit, - OnOperationDoneType onWriteDone) +FastAccessFeedView::updateAttributes(SerialNum serialNum, search::DocumentIdT lid, const DocumentUpdate &upd, + bool immediateCommit, OnOperationDoneType onWriteDone) { _attributeWriter->update(serialNum, upd, lid, immediateCommit, onWriteDone); } void -FastAccessFeedView::removeAttributes(SerialNum serialNum, - search::DocumentIdT lid, - bool immediateCommit, - OnRemoveDoneType onWriteDone) +FastAccessFeedView::removeAttributes(SerialNum serialNum, search::DocumentIdT lid, + bool immediateCommit, OnRemoveDoneType onWriteDone) { _attributeWriter->remove(serialNum, lid, immediateCommit, onWriteDone); } void -FastAccessFeedView::removeAttributes(SerialNum serialNum, - const LidVector &lidsToRemove, - bool immediateCommit, - OnWriteDoneType onWriteDone) +FastAccessFeedView::removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove, + bool immediateCommit, OnWriteDoneType onWriteDone) { _attributeWriter->remove(lidsToRemove, serialNum, immediateCommit, onWriteDone); } @@ -83,8 +73,7 @@ FastAccessFeedView::heartBeatAttributes(SerialNum serialNum) } FastAccessFeedView::FastAccessFeedView(const StoreOnlyFeedView::Context &storeOnlyCtx, - const PersistentParams ¶ms, - const Context &ctx) + const PersistentParams ¶ms, const Context &ctx) : Parent(storeOnlyCtx, params), _attributeWriter(ctx._attrWriter), _docIdLimit(ctx._docIdLimit) @@ -103,8 +92,7 @@ FastAccessFeedView::handleCompactLidSpace(const CompactLidSpaceOperation &op) } void -FastAccessFeedView::forceCommit(SerialNum serialNum, - OnForceCommitDoneType onCommitDone) +FastAccessFeedView::forceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone) { _attributeWriter->forceCommit(serialNum, onCommitDone); onCommitDone->registerCommittedDocIdLimit(_metaStore.getCommittedDocIdLimit(), &_docIdLimit); @@ -119,5 +107,19 @@ FastAccessFeedView::sync() _writeService.attributeFieldWriter().sync(); } +bool +FastAccessFeedView::fastPartialUpdateAttribute(const vespalib::string &fieldName) const { + search::AttributeVector *attribute = _attributeWriter->getWritableAttribute(fieldName); + if (attribute == nullptr) { + // Partial update to non-attribute field must update document + return false; + } + search::attribute::BasicType::Type attrType = attribute->getBasicType(); + // Partial update to tensor, predicate or reference attribute + // must update document + return ((attrType != search::attribute::BasicType::Type::PREDICATE) && + (attrType != search::attribute::BasicType::Type::TENSOR) && + (attrType != search::attribute::BasicType::Type::REFERENCE)); +} } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h index 4056aecd24c..e1b0cf83f64 100644 --- a/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h +++ b/searchcore/src/vespa/searchcore/proton/server/fast_access_feed_view.h @@ -39,39 +39,28 @@ private: const IAttributeWriter::SP _attributeWriter; DocIdLimit &_docIdLimit; - virtual UpdateScope getUpdateScope(const document::DocumentUpdate &upd) override; + UpdateScope getUpdateScope(const document::DocumentUpdate &upd) override; - virtual void putAttributes(SerialNum serialNum, - search::DocumentIdT lid, - const document::Document &doc, - bool immediateCommit, - OnPutDoneType onWriteDone) override; + void putAttributes(SerialNum serialNum, search::DocumentIdT lid, const document::Document &doc, + bool immediateCommit, OnPutDoneType onWriteDone) override; - virtual void updateAttributes(SerialNum serialNum, - search::DocumentIdT lid, - const document::DocumentUpdate &upd, - bool immediateCommit, - OnOperationDoneType onWriteDone) override; + void updateAttributes(SerialNum serialNum, search::DocumentIdT lid, const document::DocumentUpdate &upd, + bool immediateCommit, OnOperationDoneType onWriteDone) override; - virtual void removeAttributes(SerialNum serialNum, - search::DocumentIdT lid, - bool immediateCommit, - OnRemoveDoneType onWriteDone) override; + void removeAttributes(SerialNum serialNum, search::DocumentIdT lid, + bool immediateCommit, OnRemoveDoneType onWriteDone) override; - virtual void removeAttributes(SerialNum serialNum, - const LidVector &lidsToRemove, - bool immediateCommit, - OnWriteDoneType onWriteDone) override; + void removeAttributes(SerialNum serialNum, const LidVector &lidsToRemove, + bool immediateCommit, OnWriteDoneType onWriteDone) override; - virtual void heartBeatAttributes(SerialNum serialNum) override; + void heartBeatAttributes(SerialNum serialNum) override; protected: - virtual void forceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone) override; + void forceCommit(SerialNum serialNum, OnForceCommitDoneType onCommitDone) override; public: FastAccessFeedView(const StoreOnlyFeedView::Context &storeOnlyCtx, - const PersistentParams ¶ms, - const Context &ctx); + const PersistentParams ¶ms, const Context &ctx); ~FastAccessFeedView(); virtual const IAttributeWriter::SP &getAttributeWriter() const { @@ -82,24 +71,10 @@ public: return _docIdLimit; } - virtual void handleCompactLidSpace(const CompactLidSpaceOperation &op) override; - - virtual void sync() override; - - bool fastPartialUpdateAttribute(const vespalib::string &fieldName) { - search::AttributeVector *attribute = - _attributeWriter->getWritableAttribute(fieldName); - if (attribute == nullptr) { - // Partial update to non-attribute field must update document - return false; - } - search::attribute::BasicType::Type attrType = attribute->getBasicType(); - // Partial update to tensor, predicate or reference attribute - // must update document - return ((attrType != search::attribute::BasicType::Type::PREDICATE) && - (attrType != search::attribute::BasicType::Type::TENSOR) && - (attrType != search::attribute::BasicType::Type::REFERENCE)); - } + void handleCompactLidSpace(const CompactLidSpaceOperation &op) override; + void sync() override; + + bool fastPartialUpdateAttribute(const vespalib::string &fieldName) const; }; } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp index bb5f058429a..9300af5c3f0 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.cpp @@ -49,27 +49,9 @@ namespace proton { namespace { -void -setUpdateWasFound(mbus::Reply &reply, bool was_found) -{ - assert(static_cast<DocumentReply&>(reply).getType() == DocumentProtocol::REPLY_UPDATEDOCUMENT); - UpdateDocumentReply &update_rep = static_cast<UpdateDocumentReply&>(reply); - update_rep.setWasFound(was_found); -} - -void -setRemoveWasFound(mbus::Reply &reply, bool was_found) -{ - assert(static_cast<DocumentReply&>(reply).getType() == DocumentProtocol::REPLY_REMOVEDOCUMENT); - RemoveDocumentReply &remove_rep = static_cast<RemoveDocumentReply&>(reply); - remove_rep.setWasFound(was_found); -} - bool -ignoreOperation(const DocumentOperation &op) -{ - return (op.getPrevTimestamp() != 0) - && (op.getTimestamp() < op.getPrevTimestamp()); +ignoreOperation(const DocumentOperation &op) { + return (op.getPrevTimestamp() != 0) && (op.getTimestamp() < op.getPrevTimestamp()); } } // namespace @@ -119,7 +101,7 @@ void FeedHandler::performPut(FeedToken::UP token, PutOperation &op) { op.getDocument()->getId().toString().c_str(), (uint64_t)op.getTimestamp(), (uint64_t)op.getPrevTimestamp()); if (token) { token->setResult(ResultUP(new Result), false); - token->ack(op.getType(), _metrics); + token->ack(); } return; } @@ -142,8 +124,7 @@ FeedHandler::performUpdate(FeedToken::UP token, UpdateOperation &op) } else { if (token) { token->setResult(ResultUP(new UpdateResult(Timestamp(0))), false); - setUpdateWasFound(token->getReply(), false); - token->ack(op.getType(), _metrics); + token->ack(); } } } @@ -155,7 +136,6 @@ FeedHandler::performInternalUpdate(FeedToken::UP token, UpdateOperation &op) storeOperation(op); if (token) { token->setResult(ResultUP(new UpdateResult(op.getPrevTimestamp())), true); - setUpdateWasFound(token->getReply(), true); } _activeFeedView->handleUpdate(token.get(), op); } @@ -172,10 +152,9 @@ FeedHandler::createNonExistingDocument(FeedToken::UP token, const UpdateOperatio storeOperation(putOp); if (token) { token->setResult(ResultUP(new UpdateResult(putOp.getTimestamp())), true); - setUpdateWasFound(token->getReply(), true); } TransportLatch latch(1); - FeedToken putToken(latch, mbus::Reply::UP(new FeedReply(DocumentProtocol::REPLY_PUTDOCUMENT))); + FeedToken putToken(latch); _activeFeedView->handlePut(&putToken, putOp); latch.await(); if (token) { @@ -191,7 +170,7 @@ void FeedHandler::performRemove(FeedToken::UP token, RemoveOperation &op) { op.getDocumentId().toString().c_str(), (uint64_t)op.getTimestamp(), (uint64_t)op.getPrevTimestamp()); if (token) { token->setResult(ResultUP(new RemoveResult(false)), false); - token->ack(op.getType(), _metrics); + token->ack(); } return; } @@ -202,7 +181,6 @@ void FeedHandler::performRemove(FeedToken::UP token, RemoveOperation &op) { if (token) { bool documentWasFound = !op.getPrevMarkedAsRemoved(); token->setResult(ResultUP(new RemoveResult(documentWasFound)), documentWasFound); - setRemoveWasFound(token->getReply(), documentWasFound); } _activeFeedView->handleRemove(token.get(), op); } else if (op.hasDocType()) { @@ -210,14 +188,12 @@ void FeedHandler::performRemove(FeedToken::UP token, RemoveOperation &op) { storeOperation(op); if (token) { token->setResult(ResultUP(new RemoveResult(false)), false); - setRemoveWasFound(token->getReply(), false); } _activeFeedView->handleRemove(token.get(), op); } else { if (token) { token->setResult(ResultUP(new RemoveResult(false)), false); - setRemoveWasFound(token->getReply(), false); - token->ack(op.getType(), _metrics); + token->ack(); } } } @@ -367,7 +343,6 @@ FeedHandler::changeFeedState(FeedState::SP newState, const LockGuard &) FeedHandler::FeedHandler(IThreadingService &writeService, const vespalib::string &tlsSpec, const DocTypeName &docTypeName, - PerDocTypeFeedMetrics &metrics, DDBState &state, IFeedHandlerOwner &owner, const IResourceWriteFilter &writeFilter, @@ -395,9 +370,8 @@ FeedHandler::FeedHandler(IThreadingService &writeService, _delayedPrune(false), _feedLock(), _feedState(std::make_shared<InitState>(getDocTypeName())), - _activeFeedView(NULL), + _activeFeedView(nullptr), _bucketDBHandler(nullptr), - _metrics(metrics), _syncLock(), _syncedSerialNum(0), _allowSync(false) @@ -499,7 +473,7 @@ void feedOperationRejected(FeedToken *token, const vespalib::string &opType, con auto message = make_string("%s operation rejected for document '%s' of type '%s': '%s'", opType.c_str(), docId.c_str(), docTypeName.toString().c_str(), rejectMessage.c_str()); token->setResult(ResultUP(new ResultType(Result::RESOURCE_EXHAUSTED, message)), false); - token->fail(documentapi::DocumentProtocol::ERROR_REJECTED, message); + token->fail(); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/feedhandler.h b/searchcore/src/vespa/searchcore/proton/server/feedhandler.h index 335a86e0279..dc955cfeb79 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedhandler.h +++ b/searchcore/src/vespa/searchcore/proton/server/feedhandler.h @@ -29,7 +29,6 @@ class IFeedView; class IResourceWriteFilter; class IReplayConfig; class JoinBucketsOperation; -class PerDocTypeFeedMetrics; class PutOperation; class RemoveOperation; class SplitBucketOperation; @@ -92,8 +91,6 @@ private: // used by master write thread tasks IFeedView *_activeFeedView; bucketdb::IBucketDBHandler *_bucketDBHandler; - PerDocTypeFeedMetrics &_metrics; - vespalib::Lock _syncLock; SerialNum _syncedSerialNum; bool _allowSync; // Sanity check @@ -143,16 +140,14 @@ public: * @param writeService The thread service used for all write tasks. * @param tlsSpec The spec to connect to the transaction log server. * @param docTypeName The name and version of the document type we are feed handler for. - * @param metrics Feeding metrics. * @param state Document db state * @param owner Reference to the owner of this feed handler. * @param replayConfig Reference to interface used for replaying config changes. - * @param writer Inject writer for tls, or NULL to use internal. + * @param writer Inject writer for tls, or nullptr to use internal. */ FeedHandler(IThreadingService &writeService, const vespalib::string &tlsSpec, const DocTypeName &docTypeName, - PerDocTypeFeedMetrics &metrics, DDBState &state, IFeedHandlerOwner &owner, const IResourceWriteFilter &writerFilter, @@ -160,7 +155,7 @@ public: search::transactionlog::Writer & writer, TlsWriter * tlsWriter = nullptr); - virtual ~FeedHandler(); + ~FeedHandler() override; /** * Init this feed handler. diff --git a/searchcore/src/vespa/searchcore/proton/server/feedstate.cpp b/searchcore/src/vespa/searchcore/proton/server/feedstate.cpp index 2ec3de61dea..3628505ed66 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedstate.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/feedstate.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "feedstate.h" +#include <vespa/searchcore/proton/feedoperation/feedoperation.h> #include <vespa/vespalib/util/exceptions.h> using document::BucketId; @@ -26,8 +27,7 @@ void FeedState::throwExceptionInReceive(const vespalib::string &docType, } void -FeedState::throwExceptionInHandleOperation(const vespalib::string &docType, - const FeedOperation &op) +FeedState::throwExceptionInHandleOperation(const vespalib::string &docType, const FeedOperation &op) { throw IllegalStateException (make_string("We should not receive any feed operations" diff --git a/searchcore/src/vespa/searchcore/proton/server/feedstate.h b/searchcore/src/vespa/searchcore/proton/server/feedstate.h index 13dd6ea9dc8..472f5cb224f 100644 --- a/searchcore/src/vespa/searchcore/proton/server/feedstate.h +++ b/searchcore/src/vespa/searchcore/proton/server/feedstate.h @@ -12,27 +12,22 @@ namespace proton { +class FeedOperation; /** * Class representing the current state of a feed handler. */ class FeedState { public: - enum Type { NORMAL, - REPLAY_TRANSACTION_LOG, - INIT }; + enum Type { NORMAL, REPLAY_TRANSACTION_LOG, INIT }; private: Type _type; protected: - void throwExceptionInReceive(const vespalib::string &docType, - uint64_t serialRangeFrom, - uint64_t serialRangeTo, - size_t packetSize); - - void throwExceptionInHandleOperation(const vespalib::string &docType, - const FeedOperation &op); + void throwExceptionInReceive(const vespalib::string &docType, uint64_t serialRangeFrom, + uint64_t serialRangeTo, size_t packetSize); + void throwExceptionInHandleOperation(const vespalib::string &docType, const FeedOperation &op); public: typedef std::shared_ptr<FeedState> SP; @@ -43,11 +38,8 @@ public: Type getType() const { return _type; } vespalib::string getName() const; - virtual void handleOperation(FeedToken token, FeedOperation::UP op) = 0; - - virtual void receive(const PacketWrapper::SP &wrap, - vespalib::Executor &executor) = 0; + virtual void handleOperation(FeedToken token, std::unique_ptr<FeedOperation> op) = 0; + virtual void receive(const PacketWrapper::SP &wrap, vespalib::Executor &executor) = 0; }; } // namespace proton - diff --git a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp index 19235bb1e23..9c0115f0084 100644 --- a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp @@ -5,12 +5,8 @@ namespace proton { -OperationDoneContext::OperationDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics) - : _token(std::move(token)), - _opType(opType), - _metrics(metrics) +OperationDoneContext::OperationDoneContext(std::unique_ptr<FeedToken> token) + : _token(std::move(token)) { } @@ -24,7 +20,7 @@ OperationDoneContext::ack() { if (_token) { std::unique_ptr<FeedToken> token(std::move(_token)); - token->ack(_opType, _metrics); + token->ack(); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h index 3f7a6436604..b801987844b 100644 --- a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h +++ b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h @@ -7,7 +7,6 @@ namespace proton { -class PerDocTypeFeedMetrics; class FeedToken; /** @@ -20,18 +19,13 @@ class FeedToken; class OperationDoneContext : public search::IDestructorCallback { std::unique_ptr<FeedToken> _token; - const FeedOperation::Type _opType; - PerDocTypeFeedMetrics &_metrics; - protected: void ack(); public: - OperationDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics); + OperationDoneContext(std::unique_ptr<FeedToken> token); - virtual ~OperationDoneContext(); + ~OperationDoneContext() override; FeedToken *getToken() { return _token.get(); } }; diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp index efb5a58dd2e..649eebb26f5 100644 --- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp @@ -8,14 +8,13 @@ namespace proton { PutDoneContext::PutDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, + IGidToLidChangeHandler &gidToLidChangeHandler, const document::GlobalId &gid, uint32_t lid, search::SerialNum serialNum, bool enableNotifyPut) - : OperationDoneContext(std::move(token), opType, metrics), + : OperationDoneContext(std::move(token)), _lid(lid), _docIdLimit(nullptr), _gidToLidChangeHandler(gidToLidChangeHandler), diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h index bddf9dabd90..3e98b02dda6 100644 --- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h +++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h @@ -6,9 +6,7 @@ #include <vespa/document/base/globalid.h> #include <vespa/searchlib/common/serialnum.h> -namespace proton -{ - +namespace proton { class DocIdLimit; class IGidToLidChangeHandler; @@ -30,21 +28,11 @@ class PutDoneContext : public OperationDoneContext bool _enableNotifyPut; public: - PutDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, - IGidToLidChangeHandler &gidToLidChangeHandler, - const document::GlobalId &gid, - uint32_t lid, - search::SerialNum serialNum, - bool enableNotifyPut); - - virtual ~PutDoneContext(); - - void registerPutLid(DocIdLimit *docIdLimit) - { - _docIdLimit = docIdLimit; - } + PutDoneContext(std::unique_ptr<FeedToken> token, IGidToLidChangeHandler &gidToLidChangeHandler, + const document::GlobalId &gid, uint32_t lid, search::SerialNum serialNum, bool enableNotifyPut); + ~PutDoneContext() override; + + void registerPutLid(DocIdLimit *docIdLimit) { _docIdLimit = docIdLimit; } }; diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp index 627e8d9f627..bd9a8240d73 100644 --- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp @@ -8,13 +8,11 @@ namespace proton { RemoveDoneContext::RemoveDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, vespalib::Executor &executor, IDocumentMetaStore &documentMetaStore, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, uint32_t lid) - : OperationDoneContext(std::move(token), opType, metrics), + : OperationDoneContext(std::move(token)), _executor(executor), _task(), _pendingNotifyRemoveDone(std::move(pendingNotifyRemoveDone)) diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h index c4fafb4e886..83f6013dd85 100644 --- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h +++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h @@ -8,8 +8,7 @@ #include <vespa/searchlib/common/serialnum.h> #include <vespa/searchcore/proton/reference/pending_notify_remove_done.h> -namespace proton -{ +namespace proton { class IDocumentMetaStore; @@ -29,15 +28,11 @@ class RemoveDoneContext : public OperationDoneContext PendingNotifyRemoveDone _pendingNotifyRemoveDone; public: - RemoveDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, - vespalib::Executor &executor, - IDocumentMetaStore &documentMetaStore, - PendingNotifyRemoveDone &&pendingNotifyRemoveDone, + RemoveDoneContext(std::unique_ptr<FeedToken> token, vespalib::Executor &executor, + IDocumentMetaStore &documentMetaStore, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, uint32_t lid); - virtual ~RemoveDoneContext(); + ~RemoveDoneContext() override; }; diff --git a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp index d3d73b42fbe..0c87d24899d 100644 --- a/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/searchable_feed_view.cpp @@ -5,7 +5,6 @@ #include "operationdonecontext.h" #include "removedonecontext.h" #include <vespa/searchcore/proton/common/feedtoken.h> -#include <vespa/searchcore/proton/metrics/feed_metrics.h> #include <vespa/searchcore/proton/documentmetastore/ilidreusedelayer.h> #include <vespa/vespalib/text/stringtokenizer.h> #include <vespa/vespalib/util/closuretask.h> @@ -35,10 +34,8 @@ SearchableFeedView::Context::Context(const IIndexWriter::SP &indexWriter) SearchableFeedView::Context::~Context() = default; -SearchableFeedView::SearchableFeedView(const StoreOnlyFeedView::Context &storeOnlyCtx, - const PersistentParams ¶ms, - const FastAccessFeedView::Context &fastUpdateCtx, - Context ctx) +SearchableFeedView::SearchableFeedView(const StoreOnlyFeedView::Context &storeOnlyCtx, const PersistentParams ¶ms, + const FastAccessFeedView::Context &fastUpdateCtx, Context ctx) : Parent(storeOnlyCtx, params, fastUpdateCtx), _indexWriter(ctx._indexWriter), _hasIndexedFields(_schema->getNumIndexFields() > 0) @@ -191,11 +188,8 @@ SearchableFeedView::performIndexRemove(SerialNum serialNum, const LidVector &lid assert(_writeService.index().isCurrentThread()); for (const auto lid : lidsToRemove) { VLOG(getDebugLevel(lid, nullptr), - "database(%s): performIndexRemove: serialNum(%" PRIu64 "), " - "lid(%d)", - _params._docTypeName.toString().c_str(), - serialNum, - lid); + "database(%s): performIndexRemove: serialNum(%" PRIu64 "), lid(%d)", + _params._docTypeName.toString().c_str(), serialNum, lid); _indexWriter->remove(serialNum, lid); } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp index e931a28c6a5..bba03621f8a 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlydocsubdb.cpp @@ -160,7 +160,7 @@ StoreOnlyDocSubDB::clearViews() { size_t StoreOnlyDocSubDB::getNumDocs() const { - if (_metaStoreCtx.get() != NULL) { + if (_metaStoreCtx) { return _metaStoreCtx->get().getNumUsedLids(); } else { return 0u; @@ -378,8 +378,7 @@ StoreOnlyDocSubDB::getFeedViewPersistentParams() { SerialNum flushedDMSSN(_flushedDocumentMetaStoreSerialNum); SerialNum flushedDSSN(_flushedDocumentStoreSerialNum); - return StoreOnlyFeedView::PersistentParams(flushedDMSSN, flushedDSSN, _docTypeName, - _metrics.feed, _subDbId, _subDbType); + return StoreOnlyFeedView::PersistentParams(flushedDMSSN, flushedDSSN, _docTypeName, _subDbId, _subDbType); } void diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index de3e1648085..8c8559115bd 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -11,10 +11,8 @@ #include <vespa/searchcore/proton/common/commit_time_tracker.h> #include <vespa/searchcore/proton/common/feedtoken.h> #include <vespa/searchcore/proton/documentmetastore/ilidreusedelayer.h> -#include <vespa/searchcore/proton/metrics/feed_metrics.h> #include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h> #include <vespa/document/datatype/documenttype.h> -#include <vespa/document/fieldvalue/document.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/log/log.h> @@ -54,19 +52,18 @@ private: IDestructorCallback::SP _moveDoneCtx; public: - PutDoneContextForMove(std::unique_ptr<FeedToken> token, const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, + PutDoneContextForMove(std::unique_ptr<FeedToken> token, IGidToLidChangeHandler &gidToLidChangeHandler, const document::GlobalId &gid, uint32_t lid, search::SerialNum serialNum, bool enableNotifyPut, IDestructorCallback::SP moveDoneCtx) - : PutDoneContext(std::move(token), opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut), + : PutDoneContext(std::move(token), gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut), _moveDoneCtx(std::move(moveDoneCtx)) {} - virtual ~PutDoneContextForMove() {} + ~PutDoneContextForMove() = default; }; std::shared_ptr<PutDoneContext> -createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics, +createPutDoneContext(FeedToken::UP &token, IGidToLidChangeHandler &gidToLidChangeHandler, const document::GlobalId &gid, uint32_t lid, SerialNum serialNum, bool enableNotifyPut, @@ -74,25 +71,24 @@ createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTyp { std::shared_ptr<PutDoneContext> result; if (moveDoneCtx) { - result = std::make_shared<PutDoneContextForMove>(std::move(token), opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut, std::move(moveDoneCtx)); + result = std::make_shared<PutDoneContextForMove>(std::move(token), gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut, std::move(moveDoneCtx)); } else { - result = std::make_shared<PutDoneContext>(std::move(token), opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut); + result = std::make_shared<PutDoneContext>(std::move(token), gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut); } return result; } std::shared_ptr<PutDoneContext> -createPutDoneContext(FeedToken::UP &token, FeedOperation::Type opType, PerDocTypeFeedMetrics &metrics, IGidToLidChangeHandler &gidToLidChangeHandler, +createPutDoneContext(FeedToken::UP &token, IGidToLidChangeHandler &gidToLidChangeHandler, const document::GlobalId &gid, uint32_t lid, SerialNum serialNum, bool enableNotifyPut) { - return createPutDoneContext(token, opType, metrics, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut, IDestructorCallback::SP()); + return createPutDoneContext(token, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyPut, IDestructorCallback::SP()); } std::shared_ptr<UpdateDoneContext> -createUpdateDoneContext(FeedToken::UP &token, FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, const DocumentUpdate::SP &upd) +createUpdateDoneContext(FeedToken::UP &token, const DocumentUpdate::SP &upd) { - return std::make_shared<UpdateDoneContext>(std::move(token), opType, metrics, upd); + return std::make_shared<UpdateDoneContext>(std::move(token), upd); } void setPrev(DocumentOperation &op, const documentmetastore::IStore::Result &result, @@ -110,32 +106,28 @@ private: IDestructorCallback::SP _moveDoneCtx; public: - RemoveDoneContextForMove(std::unique_ptr<FeedToken> token, const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, vespalib::Executor &executor, + RemoveDoneContextForMove(std::unique_ptr<FeedToken> token, vespalib::Executor &executor, IDocumentMetaStore &documentMetaStore, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, uint32_t lid, IDestructorCallback::SP moveDoneCtx) - : RemoveDoneContext(std::move(token), opType, metrics, executor, documentMetaStore, std::move(pendingNotifyRemoveDone) ,lid), + : RemoveDoneContext(std::move(token), executor, documentMetaStore, std::move(pendingNotifyRemoveDone) ,lid), _moveDoneCtx(std::move(moveDoneCtx)) {} - virtual ~RemoveDoneContextForMove() {} + ~RemoveDoneContextForMove() = default; }; std::shared_ptr<RemoveDoneContext> -createRemoveDoneContext(std::unique_ptr<FeedToken> token, const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, vespalib::Executor &executor, - IDocumentMetaStore &documentMetaStore, - PendingNotifyRemoveDone &&pendingNotifyRemoveDone, - uint32_t lid, - IDestructorCallback::SP moveDoneCtx) +createRemoveDoneContext(std::unique_ptr<FeedToken> token, vespalib::Executor &executor, + IDocumentMetaStore &documentMetaStore, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, + uint32_t lid, IDestructorCallback::SP moveDoneCtx) { if (moveDoneCtx) { return std::make_shared<RemoveDoneContextForMove> - (std::move(token), opType, metrics, executor, documentMetaStore, std::move(pendingNotifyRemoveDone), lid, std::move(moveDoneCtx)); + (std::move(token), executor, documentMetaStore, std::move(pendingNotifyRemoveDone), lid, std::move(moveDoneCtx)); } else { return std::make_shared<RemoveDoneContext> - (std::move(token), opType, metrics, executor, documentMetaStore, std::move(pendingNotifyRemoveDone), lid); + (std::move(token), executor, documentMetaStore, std::move(pendingNotifyRemoveDone), lid); } } @@ -216,6 +208,8 @@ StoreOnlyFeedView::StoreOnlyFeedView(const Context &ctx, const PersistentParams _docType = _repo->getDocumentType(_params._docTypeName.getName()); } +StoreOnlyFeedView::~StoreOnlyFeedView() = default; + void StoreOnlyFeedView::sync() { @@ -240,10 +234,10 @@ StoreOnlyFeedView::forceCommit(SerialNum serialNum, OnForceCommitDoneType onComm } void -StoreOnlyFeedView::considerEarlyAck(FeedToken::UP &token, FeedOperation::Type opType) +StoreOnlyFeedView::considerEarlyAck(FeedToken::UP &token) { if (_commitTimeTracker.hasVisibilityDelay() && token) { - token->ack(opType, _params._metrics); + token->ack(); token.reset(); } } @@ -289,7 +283,7 @@ StoreOnlyFeedView::internalPut(FeedToken::UP token, const PutOperation &putOp) _params._subDbId, doc->toString(true).size(), doc->toString(true).c_str()); PendingNotifyRemoveDone pendingNotifyRemoveDone = adjustMetaStore(putOp, docId); - considerEarlyAck(token, putOp.getType()); + considerEarlyAck(token); bool docAlreadyExists = putOp.getValidPrevDbdId(_params._subDbId); @@ -297,18 +291,19 @@ StoreOnlyFeedView::internalPut(FeedToken::UP token, const PutOperation &putOp) bool immediateCommit = _commitTimeTracker.needCommit(); const document::GlobalId &gid = docId.getGlobalId(); std::shared_ptr<PutDoneContext> onWriteDone = - createPutDoneContext(token, putOp.getType(), _params._metrics, - _gidToLidChangeHandler, gid, putOp.getLid(), serialNum, putOp.changedDbdId() && useDocumentMetaStore(serialNum)); + createPutDoneContext(token, _gidToLidChangeHandler, gid, putOp.getLid(), serialNum, + putOp.changedDbdId() && useDocumentMetaStore(serialNum)); putSummary(serialNum, putOp.getLid(), doc, onWriteDone); putAttributes(serialNum, putOp.getLid(), *doc, immediateCommit, onWriteDone); putIndexedFields(serialNum, putOp.getLid(), doc, immediateCommit, onWriteDone); } if (docAlreadyExists && putOp.changedDbdId()) { assert(!putOp.getValidDbdId(_params._subDbId)); - internalRemove(std::move(token), serialNum, std::move(pendingNotifyRemoveDone), putOp.getPrevLid(), putOp.getType(), IDestructorCallback::SP()); + internalRemove(std::move(token), serialNum, std::move(pendingNotifyRemoveDone), + putOp.getPrevLid(), IDestructorCallback::SP()); } if (token) { - token->ack(putOp.getType(), _params._metrics); + token->ack(); } } @@ -432,13 +427,12 @@ StoreOnlyFeedView::internalUpdate(FeedToken::UP token, const UpdateOperation &up (void) updateOk; _metaStore.commit(serialNum, serialNum); } - considerEarlyAck(token, updOp.getType()); + considerEarlyAck(token); bool immediateCommit = _commitTimeTracker.needCommit(); - auto onWriteDone = createUpdateDoneContext(token, updOp.getType(), _params._metrics, updOp.getUpdate()); + auto onWriteDone = createUpdateDoneContext(token, updOp.getUpdate()); updateAttributes(serialNum, lid, upd, immediateCommit, onWriteDone); - UpdateScope updateScope(getUpdateScope(upd)); if (updateScope.hasIndexOrNonAttributeFields()) { PromisedDoc promisedDoc; @@ -555,7 +549,7 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, const RemoveOperation &rm rmOp.getSubDbId(), rmOp.getLid(), rmOp.getPrevSubDbId(), rmOp.getPrevLid(), _params._subDbId); PendingNotifyRemoveDone pendingNotifyRemoveDone = adjustMetaStore(rmOp, docId); - considerEarlyAck(token, rmOp.getType()); + considerEarlyAck(token); if (rmOp.getValidDbdId(_params._subDbId)) { Document::UP clearDoc(new Document(*_docType, docId)); @@ -566,22 +560,25 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, const RemoveOperation &rm if (rmOp.getValidPrevDbdId(_params._subDbId)) { if (rmOp.changedDbdId()) { assert(!rmOp.getValidDbdId(_params._subDbId)); - internalRemove(std::move(token), serialNum, std::move(pendingNotifyRemoveDone), rmOp.getPrevLid(), rmOp.getType(), IDestructorCallback::SP()); + internalRemove(std::move(token), serialNum, std::move(pendingNotifyRemoveDone), + rmOp.getPrevLid(), IDestructorCallback::SP()); } } if (token) { - token->ack(rmOp.getType(), _params._metrics); + token->ack(); } } void -StoreOnlyFeedView::internalRemove(FeedToken::UP token, SerialNum serialNum, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, Lid lid, - FeedOperation::Type opType, IDestructorCallback::SP moveDoneCtx) +StoreOnlyFeedView::internalRemove(FeedToken::UP token, SerialNum serialNum, + PendingNotifyRemoveDone &&pendingNotifyRemoveDone, Lid lid, + IDestructorCallback::SP moveDoneCtx) { bool explicitReuseLid = _lidReuseDelayer.delayReuse(lid); std::shared_ptr<RemoveDoneContext> onWriteDone; - onWriteDone = createRemoveDoneContext(std::move(token), opType, _params._metrics, _writeService.master(), - _metaStore, std::move(pendingNotifyRemoveDone), (explicitReuseLid ? lid : 0u), moveDoneCtx); + onWriteDone = createRemoveDoneContext(std::move(token), _writeService.master(), _metaStore, + std::move(pendingNotifyRemoveDone), (explicitReuseLid ? lid : 0u), + std::move(moveDoneCtx)); removeSummary(serialNum, lid, onWriteDone); bool immediateCommit = _commitTimeTracker.needCommit(); removeAttributes(serialNum, lid, immediateCommit, onWriteDone); @@ -732,15 +729,14 @@ StoreOnlyFeedView::handleMove(const MoveOperation &moveOp, IDestructorCallback:: const document::GlobalId &gid = docId.getGlobalId(); FeedToken::UP token; std::shared_ptr<PutDoneContext> onWriteDone = - createPutDoneContext(token, moveOp.getType(), _params._metrics, - _gidToLidChangeHandler, gid, moveOp.getLid(), - serialNum, moveOp.changedDbdId() && useDocumentMetaStore(serialNum), doneCtx); + createPutDoneContext(token, _gidToLidChangeHandler, gid, moveOp.getLid(), serialNum, + moveOp.changedDbdId() && useDocumentMetaStore(serialNum), doneCtx); putSummary(serialNum, moveOp.getLid(), doc, onWriteDone); putAttributes(serialNum, moveOp.getLid(), *doc, immediateCommit, onWriteDone); putIndexedFields(serialNum, moveOp.getLid(), doc, immediateCommit, onWriteDone); } if (docAlreadyExists && moveOp.changedDbdId()) { - internalRemove(FeedToken::UP(), serialNum, std::move(pendingNotifyRemoveDone), moveOp.getPrevLid(), moveOp.getType(), doneCtx); + internalRemove(FeedToken::UP(), serialNum, std::move(pendingNotifyRemoveDone), moveOp.getPrevLid(), doneCtx); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h index 021c2b2f8f7..baaf77bbe59 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h @@ -27,7 +27,6 @@ namespace document { class GLobalId; } namespace proton { class IReplayConfig; -class PerDocTypeFeedMetrics; class ForceCommitContext; class OperationDoneContext; class PutDoneContext; @@ -104,20 +103,17 @@ public: const SerialNum _flushedDocumentMetaStoreSerialNum; const SerialNum _flushedDocumentStoreSerialNum; const DocTypeName _docTypeName; - PerDocTypeFeedMetrics &_metrics; const uint32_t _subDbId; const SubDbType _subDbType; PersistentParams(SerialNum flushedDocumentMetaStoreSerialNum, SerialNum flushedDocumentStoreSerialNum, const DocTypeName &docTypeName, - PerDocTypeFeedMetrics &metrics, uint32_t subDbId, SubDbType subDbType) : _flushedDocumentMetaStoreSerialNum(flushedDocumentMetaStoreSerialNum), _flushedDocumentStoreSerialNum(flushedDocumentStoreSerialNum), _docTypeName(docTypeName), - _metrics(metrics), _subDbId(subDbId), _subDbType(subDbType) {} @@ -183,14 +179,14 @@ private: size_t removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attribute_fields, bool immediateCommit); - void internalRemove(FeedTokenUP token, SerialNum serialNum, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, Lid lid, - FeedOperation::Type opType, std::shared_ptr<search::IDestructorCallback> moveDoneCtx); + void internalRemove(FeedTokenUP token, SerialNum serialNum, PendingNotifyRemoveDone &&pendingNotifyRemoveDone, + Lid lid, std::shared_ptr<search::IDestructorCallback> moveDoneCtx); // Ack token early if visibility delay is nonzero - void considerEarlyAck(FeedTokenUP &token, FeedOperation::Type opType); + void considerEarlyAck(FeedTokenUP &token); - void makeUpdatedDocument(SerialNum serialNum, Lid lid, DocumentUpdateSP upd, - OnOperationDoneType onWriteDone,PromisedDoc promisedDoc, PromisedStream promisedStream); + void makeUpdatedDocument(SerialNum serialNum, Lid lid, DocumentUpdateSP upd, OnOperationDoneType onWriteDone, + PromisedDoc promisedDoc, PromisedStream promisedStream); protected: virtual void internalDeleteBucket(const DeleteBucketOperation &delOp); @@ -225,7 +221,7 @@ protected: public: StoreOnlyFeedView(const Context &ctx, const PersistentParams ¶ms); - virtual ~StoreOnlyFeedView() {} + ~StoreOnlyFeedView() override; const ISummaryAdapter::SP &getSummaryAdapter() const { return _summaryAdapter; } const search::index::Schema::SP &getSchema() const { return _schema; } diff --git a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp index 5eb7e2ed7f9..171990c32d3 100644 --- a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp @@ -3,23 +3,14 @@ #include "updatedonecontext.h" #include <vespa/searchcore/proton/common/feedtoken.h> -namespace proton -{ - +namespace proton { -UpdateDoneContext::UpdateDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, - const document::DocumentUpdate::SP &upd) - : OperationDoneContext(std::move(token), opType, metrics), +UpdateDoneContext::UpdateDoneContext(std::unique_ptr<FeedToken> token, const document::DocumentUpdate::SP &upd) + : OperationDoneContext(std::move(token)), _upd(upd) { } - -UpdateDoneContext::~UpdateDoneContext() -{ -} - +UpdateDoneContext::~UpdateDoneContext() = default; } // namespace proton diff --git a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h index df47538d6dd..4701db300de 100644 --- a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h +++ b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h @@ -5,8 +5,7 @@ #include "operationdonecontext.h" #include <vespa/document/update/documentupdate.h> -namespace proton -{ +namespace proton { /** * Context class for document update operations that acks operation when @@ -19,12 +18,8 @@ class UpdateDoneContext : public OperationDoneContext { document::DocumentUpdate::SP _upd; public: - UpdateDoneContext(std::unique_ptr<FeedToken> token, - const FeedOperation::Type opType, - PerDocTypeFeedMetrics &metrics, - const document::DocumentUpdate::SP &upd); - - virtual ~UpdateDoneContext(); + UpdateDoneContext(std::unique_ptr<FeedToken> token, const document::DocumentUpdate::SP &upd); + ~UpdateDoneContext() override; const document::DocumentUpdate &getUpdate() { return *_upd; } }; diff --git a/searchlib/src/tests/queryeval/queryeval.cpp b/searchlib/src/tests/queryeval/queryeval.cpp index 9dc4f2eef89..c6dd6a430cc 100644 --- a/searchlib/src/tests/queryeval/queryeval.cpp +++ b/searchlib/src/tests/queryeval/queryeval.cpp @@ -287,6 +287,10 @@ private: virtual void doSeek(uint32_t docid) override { (void) docid; } }; +struct MultiSearchRemoveTest { + static SearchIterator::UP remove(MultiSearch &ms, size_t idx) { return ms.remove(idx); } +}; + TEST("testMultiSearch") { MultiSearch::Children children; children.push_back(new EmptySearch()); @@ -300,7 +304,7 @@ TEST("testMultiSearch") { EXPECT_EQUAL(0u, ms._accumInsert); EXPECT_EQUAL(0u, ms._accumRemove); - EXPECT_EQUAL(children[1], ms.remove(1).get()); + EXPECT_EQUAL(children[1], MultiSearchRemoveTest::remove(ms, 1).get()); EXPECT_EQUAL(2u, ms.getChildren().size()); EXPECT_EQUAL(children[0], ms.getChildren()[0]); EXPECT_EQUAL(children[2], ms.getChildren()[1]); diff --git a/searchlib/src/vespa/searchlib/queryeval/multisearch.h b/searchlib/src/vespa/searchlib/queryeval/multisearch.h index fc1a9ec11cd..16bbd5d4ecc 100644 --- a/searchlib/src/vespa/searchlib/queryeval/multisearch.h +++ b/searchlib/src/vespa/searchlib/queryeval/multisearch.h @@ -5,14 +5,20 @@ #include "searchiterator.h" #include <vector> +class MultiSearchRemoveTest; + namespace search::queryeval { +class MultiBitVectorIteratorBase; + /** * A virtual intermediate class that serves as the basis for combining searches * like and, or any or others that take a list of children. **/ class MultiSearch : public SearchIterator { + friend class ::MultiSearchRemoveTest; + friend class ::search::queryeval::MultiBitVectorIteratorBase; public: /** * Defines how to represent the children iterators. vespalib::Array usage @@ -32,13 +38,13 @@ public: virtual bool isAndNot() const { return false; } virtual bool isOr() const { return false; } void insert(size_t index, SearchIterator::UP search); - SearchIterator::UP remove(size_t index); virtual bool needUnpack(size_t index) const { (void) index; return true; } void initRange(uint32_t beginId, uint32_t endId) override; protected: void doUnpack(uint32_t docid) override; void visitMembers(vespalib::ObjectVisitor &visitor) const override; private: + SearchIterator::UP remove(size_t index); // friends only /** * Call back when children are removed / inserted after the Iterator has been constructed. * This is to support code that make assumptions that iterators do not move around or disappear. diff --git a/searchlib/src/vespa/searchlib/queryeval/orsearch.cpp b/searchlib/src/vespa/searchlib/queryeval/orsearch.cpp index 6d59482d799..977080f8266 100644 --- a/searchlib/src/vespa/searchlib/queryeval/orsearch.cpp +++ b/searchlib/src/vespa/searchlib/queryeval/orsearch.cpp @@ -16,34 +16,20 @@ public: void unpack(uint32_t docid, MultiSearch & search) { const MultiSearch::Children & children(search.getChildren()); size_t sz(children.size()); - for (size_t i(0); i < sz; ) { + for (size_t i(0); i < sz; ++i) { if (__builtin_expect(children[i]->getDocId() < docid, false)) { children[i]->doSeek(docid); - if (children[i]->getDocId() == search::endDocId) { - sz = deactivate(search, i); - continue; - } } if (__builtin_expect(children[i]->getDocId() == docid, false)) { children[i]->doUnpack(docid); } - i++; } } void onRemove(size_t index) { (void) index; } void onInsert(size_t index) { (void) index; } bool needUnpack(size_t index) const { (void) index; return true; } -private: - static size_t deactivate(MultiSearch &children, size_t idx); }; -size_t -FullUnpack::deactivate(MultiSearch & search, size_t idx) -{ - search.remove(idx); - return search.getChildren().size(); -} - class SelectiveUnpack { public: diff --git a/staging_vespalib/src/vespa/vespalib/util/document_runnable.cpp b/staging_vespalib/src/vespa/vespalib/util/document_runnable.cpp index a612d5652ff..c0a32197c07 100644 --- a/staging_vespalib/src/vespa/vespalib/util/document_runnable.cpp +++ b/staging_vespalib/src/vespa/vespalib/util/document_runnable.cpp @@ -2,15 +2,18 @@ #include "document_runnable.h" #include <vespa/vespalib/util/exceptions.h> -#include <vespa/vespalib/util/stringfmt.h> namespace document { -Runnable::Runnable(FastOS_ThreadPool* pool) +Runnable::Runnable() : _stateLock(), _state(NOT_RUNNING) { - if (pool) start(*pool); +} + +Runnable::~Runnable() { + vespalib::MonitorGuard monitorGuard(_stateLock); + assert(_state == NOT_RUNNING); } bool Runnable::start(FastOS_ThreadPool& pool) @@ -19,7 +22,7 @@ bool Runnable::start(FastOS_ThreadPool& pool) while (_state == STOPPING) monitor.wait(); if (_state != NOT_RUNNING) return false; _state = STARTING; - if (pool.NewThread(this) == NULL) { + if (pool.NewThread(this) == nullptr) { throw vespalib::IllegalStateException("Faled starting a new thread", VESPA_STRLOC); } return true; @@ -42,7 +45,7 @@ bool Runnable::onStop() bool Runnable::join() const { vespalib::MonitorGuard monitor(_stateLock); - if (_state == STARTING || _state == RUNNING) return false; + assert ((_state != STARTING) && (_state != RUNNING)); while (_state != NOT_RUNNING) monitor.wait(); return true; } diff --git a/staging_vespalib/src/vespa/vespalib/util/document_runnable.h b/staging_vespalib/src/vespa/vespalib/util/document_runnable.h index 456c7fefdbb..60a67189b5b 100644 --- a/staging_vespalib/src/vespa/vespalib/util/document_runnable.h +++ b/staging_vespalib/src/vespa/vespalib/util/document_runnable.h @@ -42,7 +42,8 @@ public: * Create a runnable. * @param pool If set, runnable will be started in constructor. */ - Runnable(FastOS_ThreadPool* pool = 0); + Runnable(); + ~Runnable(); /** * Start this runnable. diff --git a/storage/src/tests/distributor/distributortest.cpp b/storage/src/tests/distributor/distributortest.cpp index 12a4118aa08..d0941571a6a 100644 --- a/storage/src/tests/distributor/distributortest.cpp +++ b/storage/src/tests/distributor/distributortest.cpp @@ -50,6 +50,7 @@ class Distributor_Test : public CppUnit::TestFixture, CPPUNIT_TEST(merge_busy_inhibit_duration_is_propagated_to_pending_message_tracker); CPPUNIT_TEST(external_client_requests_are_handled_individually_in_priority_order); CPPUNIT_TEST(internal_messages_are_started_in_fifo_order_batch); + CPPUNIT_TEST(closing_aborts_priority_queued_client_requests); CPPUNIT_TEST_SUITE_END(); protected: @@ -81,6 +82,7 @@ protected: void merge_busy_inhibit_duration_is_propagated_to_pending_message_tracker(); void external_client_requests_are_handled_individually_in_priority_order(); void internal_messages_are_started_in_fifo_order_batch(); + void closing_aborts_priority_queued_client_requests(); public: void setUp() override { @@ -927,6 +929,27 @@ void Distributor_Test::internal_messages_are_started_in_fifo_order_batch() { CPPUNIT_ASSERT_EQUAL(api::BucketInfo(1, 1, 1), e.getBucketInfo().getNode(0)->getBucketInfo()); } +void Distributor_Test::closing_aborts_priority_queued_client_requests() { + setupDistributor(Redundancy(1), NodeCount(1), "storage:1 distributor:1"); + document::BucketId bucket(16, 1); + addNodesToBucketDB(bucket, "0=1/1/1/t"); + + document::DocumentId id("id:foo:testdoctype1:n=1:foo"); + vespalib::stringref field_set = ""; + for (int i = 0; i < 10; ++i) { + auto cmd = std::make_shared<api::GetCommand>(document::BucketId(), id, field_set); + _distributor->onDown(cmd); + } + tickDistributorNTimes(1); + // Closing should trigger 1 abort via startet GetOperation and 9 aborts from pri queue + _distributor->close(); + CPPUNIT_ASSERT_EQUAL(size_t(10), _sender.replies.size()); + for (auto& msg : _sender.replies) { + CPPUNIT_ASSERT_EQUAL(api::ReturnCode::ABORTED, + dynamic_cast<api::StorageReply&>(*msg).getResult().getResult()); + } +} + } } diff --git a/storage/src/tests/persistence/persistencetestutils.cpp b/storage/src/tests/persistence/persistencetestutils.cpp index 0fd5a30d8bd..6be021a549c 100644 --- a/storage/src/tests/persistence/persistencetestutils.cpp +++ b/storage/src/tests/persistence/persistencetestutils.cpp @@ -98,8 +98,7 @@ PersistenceTestUtils::createPersistenceThread(uint32_t disk) getEnv()._fileStorHandler, getEnv()._metrics, disk, - 255, - false)); + 255)); } document::Document::SP diff --git a/storage/src/vespa/storage/distributor/bucketdbupdater.cpp b/storage/src/vespa/storage/distributor/bucketdbupdater.cpp index 67942d3d447..ce7f7afc670 100644 --- a/storage/src/vespa/storage/distributor/bucketdbupdater.cpp +++ b/storage/src/vespa/storage/distributor/bucketdbupdater.cpp @@ -26,27 +26,23 @@ BucketDBUpdater::BucketDBUpdater(Distributor& owner, ManagedBucketSpace& bucketS { } -BucketDBUpdater::~BucketDBUpdater() {} +BucketDBUpdater::~BucketDBUpdater() = default; void BucketDBUpdater::flush() { - for (std::map<uint64_t, BucketRequest>::iterator - i(_sentMessages.begin()), end(_sentMessages.end()); - i != end; ++i) - { + for (auto & entry : _sentMessages) { // Cannot sendDown MergeBucketReplies during flushing, since // all lower links have been closed - if (i->second._mergeReplyGuard.get()) { - i->second._mergeReplyGuard->resetReply(); + if (entry.second._mergeReplyGuard) { + entry.second._mergeReplyGuard->resetReply(); } } _sentMessages.clear(); } void -BucketDBUpdater::print(std::ostream& out, bool verbose, - const std::string& indent) const +BucketDBUpdater::print(std::ostream& out, bool verbose, const std::string& indent) const { (void) verbose; (void) indent; out << "BucketDBUpdater"; @@ -55,17 +51,15 @@ BucketDBUpdater::print(std::ostream& out, bool verbose, bool BucketDBUpdater::hasPendingClusterState() const { - return _pendingClusterState.get() != nullptr; + return static_cast<bool>(_pendingClusterState); } BucketOwnership BucketDBUpdater::checkOwnershipInPendingState(const document::BucketId& b) const { if (hasPendingClusterState()) { - const lib::ClusterState& state( - _pendingClusterState->getNewClusterState()); - const lib::Distribution& distribution( - _pendingClusterState->getDistribution()); + const lib::ClusterState& state(_pendingClusterState->getNewClusterState()); + const lib::Distribution& distribution(_pendingClusterState->getDistribution()); if (!_bucketSpaceComponent.ownsBucketInState(distribution, state, b)) { return BucketOwnership::createNotOwnedInState(state); } @@ -74,22 +68,6 @@ BucketDBUpdater::checkOwnershipInPendingState(const document::BucketId& b) const } void -BucketDBUpdater::clearPending(uint16_t node) -{ - for (std::map<uint64_t, BucketRequest>::iterator iter( - _sentMessages.begin()); iter != _sentMessages.end();) - { - if (iter->second.targetNode == node) { - std::map<uint64_t, BucketRequest>::iterator del = iter; - iter++; - _sentMessages.erase(del); - } else { - iter++; - } - } -} - -void BucketDBUpdater::sendRequestBucketInfo( uint16_t node, const document::BucketId& bucket, @@ -145,9 +123,8 @@ BucketDBUpdater::removeSuperfluousBuckets( _bucketSpaceComponent.getBucketDatabase().forEach(proc); - for (uint32_t i = 0; i < proc.getBucketsToRemove().size(); ++i) { - _bucketSpaceComponent.getBucketDatabase() - .remove(proc.getBucketsToRemove()[i]); + for (const auto & entry :proc.getBucketsToRemove()) { + _bucketSpaceComponent.getBucketDatabase().remove(entry); } } @@ -247,9 +224,8 @@ BucketDBUpdater::onSetSystemState( BucketDBUpdater::MergeReplyGuard::~MergeReplyGuard() { - if (_reply.get()) { - _updater.getDistributorComponent().getDistributor() - .handleCompletedMerge(_reply); + if (_reply) { + _updater.getDistributorComponent().getDistributor().handleCompletedMerge(_reply); } } @@ -293,13 +269,8 @@ BucketDBUpdater::sendAllQueuedBucketRechecks() "via NotifyBucketChange commands", _enqueuedRechecks.size()); - typedef std::set<EnqueuedBucketRecheck>::const_iterator const_iterator; - for (const_iterator it(_enqueuedRechecks.begin()), - e(_enqueuedRechecks.end()); it != e; ++it) - { - sendRequestBucketInfo(it->node, - it->bucket, - std::shared_ptr<MergeReplyGuard>()); + for (const auto & entry :_enqueuedRechecks) { + sendRequestBucketInfo(entry.node, entry.bucket, std::shared_ptr<MergeReplyGuard>()); } _enqueuedRechecks.clear(); } @@ -382,14 +353,14 @@ BucketDBUpdater::handleSingleBucketInfoFailure( if (req.bucket != document::BucketId(0)) { framework::MilliSecTime sendTime(_bucketSpaceComponent.getClock()); sendTime += framework::MilliSecTime(100); - _delayedRequests.push_back(std::make_pair(sendTime, req)); + _delayedRequests.emplace_back(sendTime, req); } } void BucketDBUpdater::resendDelayedMessages() { - if (_pendingClusterState.get()) { + if (_pendingClusterState) { _pendingClusterState->resendDelayedMessages(); } if (_delayedRequests.empty()) return; // Don't fetch time if not needed @@ -398,9 +369,7 @@ BucketDBUpdater::resendDelayedMessages() && currentTime >= _delayedRequests.front().first) { BucketRequest& req(_delayedRequests.front().second); - sendRequestBucketInfo(req.targetNode, - req.bucket, - std::shared_ptr<MergeReplyGuard>()); + sendRequestBucketInfo(req.targetNode, req.bucket, std::shared_ptr<MergeReplyGuard>()); _delayedRequests.pop_front(); } } @@ -408,19 +377,13 @@ BucketDBUpdater::resendDelayedMessages() void BucketDBUpdater::convertBucketInfoToBucketList( const std::shared_ptr<api::RequestBucketInfoReply>& repl, - uint16_t targetNode, - BucketListMerger::BucketList& newList) + uint16_t targetNode, BucketListMerger::BucketList& newList) { - for (uint32_t i = 0; i < repl->getBucketInfo().size(); i++) { - LOG(debug, - "Received bucket information from node %u for bucket %s: %s", - targetNode, - repl->getBucketInfo()[i]._bucketId.toString().c_str(), - repl->getBucketInfo()[i]._info.toString().c_str()); + for (const auto & entry : repl->getBucketInfo()) { + LOG(debug, "Received bucket information from node %u for bucket %s: %s", targetNode, + entry._bucketId.toString().c_str(), entry._info.toString().c_str()); - newList.push_back(BucketListMerger::BucketEntry( - repl->getBucketInfo()[i]._bucketId, - repl->getBucketInfo()[i]._info)); + newList.emplace_back(entry._bucketId, entry._info); } } @@ -446,8 +409,7 @@ bool BucketDBUpdater::processSingleBucketInfoReply( const std::shared_ptr<api::RequestBucketInfoReply> & repl) { - std::map<uint64_t, BucketRequest>::iterator iter = - _sentMessages.find(repl->getMsgId()); + auto iter = _sentMessages.find(repl->getMsgId()); // Has probably been deleted for some reason earlier. if (iter == _sentMessages.end()) { @@ -477,36 +439,30 @@ BucketDBUpdater::addBucketInfoForNode( { const BucketCopy* copy(e->getNode(node)); if (copy) { - existing.push_back(BucketListMerger::BucketEntry( - e.getBucketId(), copy->getBucketInfo())); + existing.emplace_back(e.getBucketId(), copy->getBucketInfo()); } } void -BucketDBUpdater::findRelatedBucketsInDatabase( - uint16_t node, - const document::BucketId& bucketId, - BucketListMerger::BucketList& existing) +BucketDBUpdater::findRelatedBucketsInDatabase(uint16_t node, const document::BucketId& bucketId, + BucketListMerger::BucketList& existing) { std::vector<BucketDatabase::Entry> entries; _bucketSpaceComponent.getBucketDatabase().getAll(bucketId, entries); - for (uint32_t j = 0; j < entries.size(); ++j) { - addBucketInfoForNode(entries[j], node, existing); + for (const BucketDatabase::Entry & entry : entries) { + addBucketInfoForNode(entry, node, existing); } } void BucketDBUpdater::updateDatabase(uint16_t node, BucketListMerger& merger) { - for (uint32_t i = 0; i < merger.getRemovedEntries().size(); i++) { - _bucketSpaceComponent.removeNodeFromDB(merger.getRemovedEntries()[i], node); + for (const document::BucketId & bucket : merger.getRemovedEntries()) { + _bucketSpaceComponent.removeNodeFromDB(bucket, node); } - for (uint32_t i = 0; i < merger.getAddedEntries().size(); i++) { - const BucketListMerger::BucketEntry& entry( - merger.getAddedEntries()[i]); - + for (const BucketListMerger::BucketEntry& entry : merger.getAddedEntries()) { _bucketSpaceComponent.updateBucketDatabase( entry.first, BucketCopy(merger.getTimestamp(), node, entry.second), @@ -603,12 +559,11 @@ BucketDBUpdater::reportXmlStatus(vespalib::xml::XmlOutputStream& xos, << XmlTag("systemstate_active") << XmlContent(_bucketSpaceComponent.getClusterState().toString()) << XmlEndTag(); - if (_pendingClusterState.get() != 0) { + if (_pendingClusterState) { xos << *_pendingClusterState; } xos << XmlTag("systemstate_history"); - typedef std::list<PendingClusterState::Summary>::const_reverse_iterator HistoryIter; - for (HistoryIter i(_history.rbegin()), e(_history.rend()); i != e; ++i) { + for (auto i(_history.rbegin()), e(_history.rend()); i != e; ++i) { xos << XmlTag("change") << XmlAttribute("from", i->_prevClusterState) << XmlAttribute("to", i->_newClusterState) @@ -617,18 +572,16 @@ BucketDBUpdater::reportXmlStatus(vespalib::xml::XmlOutputStream& xos, } xos << XmlEndTag() << XmlTag("single_bucket_requests"); - for (std::map<uint64_t, BucketRequest>::const_iterator iter - = _sentMessages.begin(); iter != _sentMessages.end(); iter++) + for (const auto & entry : _sentMessages) { xos << XmlTag("storagenode") - << XmlAttribute("index", iter->second.targetNode); - if (iter->second.bucket.getRawId() == 0) { + << XmlAttribute("index", entry.second.targetNode); + if (entry.second.bucket.getRawId() == 0) { xos << XmlAttribute("bucket", ALL); } else { - xos << XmlAttribute("bucket", iter->second.bucket.getId(), - XmlAttribute::HEX); + xos << XmlAttribute("bucket", entry.second.bucket.getId(), XmlAttribute::HEX); } - xos << XmlAttribute("sendtimestamp", iter->second.timestamp) + xos << XmlAttribute("sendtimestamp", entry.second.timestamp) << XmlEndTag(); } xos << XmlEndTag() << XmlEndTag(); @@ -642,17 +595,13 @@ BucketDBUpdater::BucketListGenerator::process(BucketDatabase::Entry& e) const BucketCopy* copy(e->getNode(_node)); if (copy) { - _entries.push_back( - BucketListMerger::BucketEntry( - bucketId, - copy->getBucketInfo())); + _entries.emplace_back(bucketId, copy->getBucketInfo()); } return true; } void -BucketDBUpdater::NodeRemover::logRemove(const document::BucketId& bucketId, - const char* msg) const +BucketDBUpdater::NodeRemover::logRemove(const document::BucketId& bucketId, const char* msg) const { LOG(spam, "Removing bucket %s: %s", bucketId.toString().c_str(), msg); LOG_BUCKET_OPERATION_NO_LOCK(bucketId, msg); @@ -748,7 +697,7 @@ BucketDBUpdater::NodeRemover::process(BucketDatabase::Entry& e) BucketDBUpdater::NodeRemover::~NodeRemover() { - if (_removedBuckets.size() > 0) { + if ( !_removedBuckets.empty()) { std::ostringstream ost; ost << "After system state change " << _oldState.getTextualDifference(_state) << ", we removed " @@ -760,7 +709,7 @@ BucketDBUpdater::NodeRemover::~NodeRemover() if (_removedBuckets.size() >= 10) { ost << " ..."; } - LOGBM(info, ost.str().c_str()); + LOGBM(info, "%s", ost.str().c_str()); } } diff --git a/storage/src/vespa/storage/distributor/bucketdbupdater.h b/storage/src/vespa/storage/distributor/bucketdbupdater.h index 6081f782cd5..d3b2bbf86ca 100644 --- a/storage/src/vespa/storage/distributor/bucketdbupdater.h +++ b/storage/src/vespa/storage/distributor/bucketdbupdater.h @@ -36,16 +36,11 @@ public: ~BucketDBUpdater(); void flush(); - BucketOwnership checkOwnershipInPendingState(const document::BucketId&) const; - void recheckBucketInfo(uint32_t nodeIdx, const document::BucketId& bid); bool onSetSystemState(const std::shared_ptr<api::SetSystemStateCommand>& cmd) override; - - bool onRequestBucketInfoReply( - const std::shared_ptr<api::RequestBucketInfoReply> & repl) override; - + bool onRequestBucketInfoReply(const std::shared_ptr<api::RequestBucketInfoReply> & repl) override; bool onMergeBucketReply(const std::shared_ptr<api::MergeBucketReply>& reply) override; bool onNotifyBucketChange(const std::shared_ptr<api::NotifyBucketChangeCommand>&) override; void resendDelayedMessages(); @@ -72,8 +67,7 @@ private: ManagedBucketSpaceComponent _bucketSpaceComponent; class MergeReplyGuard { public: - MergeReplyGuard(BucketDBUpdater& updater, - const std::shared_ptr<api::MergeBucketReply>& reply) + MergeReplyGuard(BucketDBUpdater& updater, const std::shared_ptr<api::MergeBucketReply>& reply) : _updater(updater), _reply(reply) {} ~MergeReplyGuard(); @@ -90,9 +84,7 @@ private: BucketRequest() : targetNode(0), bucket(0), timestamp(0) {}; - BucketRequest(uint16_t t, - uint64_t currentTime, - const document::BucketId& b, + BucketRequest(uint16_t t, uint64_t currentTime, const document::BucketId& b, const std::shared_ptr<MergeReplyGuard>& guard) : targetNode(t), bucket(b), @@ -112,8 +104,7 @@ private: EnqueuedBucketRecheck() : node(0), bucket() {} - EnqueuedBucketRecheck(uint16_t _node, - const document::BucketId& _bucket) + EnqueuedBucketRecheck(uint16_t _node, const document::BucketId& _bucket) : node(_node), bucket(_bucket) {} @@ -130,35 +121,21 @@ private: }; bool hasPendingClusterState() const; - - void clearPending(uint16_t node); - - bool pendingClusterStateAccepted( - const std::shared_ptr<api::RequestBucketInfoReply>& repl); - bool bucketOwnedAccordingToPendingState( - const document::BucketId& bucketId) const; - bool processSingleBucketInfoReply( - const std::shared_ptr<api::RequestBucketInfoReply>& repl); - void handleSingleBucketInfoFailure( - const std::shared_ptr<api::RequestBucketInfoReply>& repl, - const BucketRequest& req); + bool pendingClusterStateAccepted(const std::shared_ptr<api::RequestBucketInfoReply>& repl); + bool bucketOwnedAccordingToPendingState(const document::BucketId& bucketId) const; + bool processSingleBucketInfoReply(const std::shared_ptr<api::RequestBucketInfoReply>& repl); + void handleSingleBucketInfoFailure(const std::shared_ptr<api::RequestBucketInfoReply>& repl, + const BucketRequest& req); bool isPendingClusterStateCompleted() const; void processCompletedPendingClusterState(); - void mergeBucketInfoWithDatabase( - const std::shared_ptr<api::RequestBucketInfoReply>& repl, - const BucketRequest& req); - void convertBucketInfoToBucketList( - const std::shared_ptr<api::RequestBucketInfoReply>& repl, - uint16_t targetNode, - BucketListMerger::BucketList& newList); - void sendRequestBucketInfo( - uint16_t node, - const document::BucketId& bucket, - const std::shared_ptr<MergeReplyGuard>& mergeReply); - void addBucketInfoForNode( - const BucketDatabase::Entry& e, - uint16_t node, - BucketListMerger::BucketList& existing) const; + void mergeBucketInfoWithDatabase(const std::shared_ptr<api::RequestBucketInfoReply>& repl, + const BucketRequest& req); + void convertBucketInfoToBucketList(const std::shared_ptr<api::RequestBucketInfoReply>& repl, + uint16_t targetNode, BucketListMerger::BucketList& newList); + void sendRequestBucketInfo(uint16_t node, const document::BucketId& bucket, + const std::shared_ptr<MergeReplyGuard>& mergeReply); + void addBucketInfoForNode(const BucketDatabase::Entry& e, uint16_t node, + BucketListMerger::BucketList& existing) const; void ensureTransitionTimerStarted(); void completeTransitionTimer(); /** @@ -167,10 +144,8 @@ private: * in bucketId, or that bucketId is contained in, that have copies * on the given node. */ - void findRelatedBucketsInDatabase( - uint16_t node, - const document::BucketId& bucketId, - BucketListMerger::BucketList& existing); + void findRelatedBucketsInDatabase(uint16_t node, const document::BucketId& bucketId, + BucketListMerger::BucketList& existing); /** Updates the bucket database from the information generated by the given @@ -178,18 +153,15 @@ private: */ void updateDatabase(uint16_t node, BucketListMerger& merger); - void updateState(const lib::ClusterState& oldState, - const lib::ClusterState& newState); + void updateState(const lib::ClusterState& oldState, const lib::ClusterState& newState); - void removeSuperfluousBuckets(const lib::Distribution& newDistribution, - const lib::ClusterState& newState); + void removeSuperfluousBuckets(const lib::Distribution& newDistribution, const lib::ClusterState& newState); void replyToPreviousPendingClusterStateIfAny(); void enableCurrentClusterStateInDistributor(); void addCurrentStateToClusterStateHistory(); - void enqueueRecheckUntilPendingStateEnabled(uint16_t node, - const document::BucketId&); + void enqueueRecheckUntilPendingStateEnabled(uint16_t node, const document::BucketId&); void sendAllQueuedBucketRechecks(); friend class BucketDBUpdater_Test; @@ -198,8 +170,7 @@ private: class BucketListGenerator { public: - BucketListGenerator(uint16_t node, - BucketListMerger::BucketList& entries) + BucketListGenerator(uint16_t node, BucketListMerger::BucketList& entries) : _node(node), _entries(entries) {}; bool process(BucketDatabase::Entry&); @@ -237,8 +208,7 @@ private: return _removedBuckets; } private: - void setCopiesInEntry(BucketDatabase::Entry& e, - const std::vector<BucketCopy>& copies) const; + void setCopiesInEntry(BucketDatabase::Entry& e, const std::vector<BucketCopy>& copies) const; void removeEmptyBucket(const document::BucketId& bucketId); const lib::ClusterState _oldState; diff --git a/storage/src/vespa/storage/distributor/distributor.cpp b/storage/src/vespa/storage/distributor/distributor.cpp index 53df19fd10c..3dfe5103654 100644 --- a/storage/src/vespa/storage/distributor/distributor.cpp +++ b/storage/src/vespa/storage/distributor/distributor.cpp @@ -203,23 +203,26 @@ Distributor::onOpen() } } -void -Distributor::onClose() -{ - for (uint32_t i=0; i<_messageQueue.size(); ++i) { - std::shared_ptr<api::StorageMessage> msg = _messageQueue[i]; +void Distributor::send_shutdown_abort_reply(const std::shared_ptr<api::StorageMessage>& msg) { + api::StorageReply::UP reply( + std::dynamic_pointer_cast<api::StorageCommand>(msg)->makeReply()); + reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, "Distributor is shutting down")); + sendUp(std::shared_ptr<api::StorageMessage>(reply.release())); +} + +void Distributor::onClose() { + for (auto& msg : _messageQueue) { if (!msg->getType().isReply()) { - api::StorageReply::UP reply( - std::dynamic_pointer_cast<api::StorageCommand>(msg) - ->makeReply()); - reply->setResult(api::ReturnCode(api::ReturnCode::ABORTED, - "Distributor is shutting down")); - sendUp(std::shared_ptr<api::StorageMessage>(reply.release())); + send_shutdown_abort_reply(msg); } } _messageQueue.clear(); + while (!_client_request_priority_queue.empty()) { + send_shutdown_abort_reply(_client_request_priority_queue.top()); + _client_request_priority_queue.pop(); + } - LOG(debug, "Distributor::onFlush invoked"); + LOG(debug, "Distributor::onClose invoked"); _bucketDBUpdater.flush(); _operationOwner.onClose(); _maintenanceOperationOwner.onClose(); @@ -619,10 +622,10 @@ void Distributor::startExternalOperations() { const bool start_single_client_request = !_client_request_priority_queue.empty(); if (start_single_client_request) { - auto& msg = _client_request_priority_queue.top(); + const auto& msg = _client_request_priority_queue.top(); MBUS_TRACE(msg->getTrace(), 9, "Distributor: Grabbed from " "client request priority queue to be processed."); - handle_or_propagate_message(msg); // TODO move() once we've move-enabled our message chains + handle_or_propagate_message(msg); _client_request_priority_queue.pop(); } diff --git a/storage/src/vespa/storage/distributor/distributor.h b/storage/src/vespa/storage/distributor/distributor.h index 438001acc40..5856aca71a1 100644 --- a/storage/src/vespa/storage/distributor/distributor.h +++ b/storage/src/vespa/storage/distributor/distributor.h @@ -187,11 +187,11 @@ private: }; void setNodeStateUp(); - bool handleMessage(const std::shared_ptr<api::StorageMessage>& msg); bool isMaintenanceReply(const api::StorageReply& reply) const; void handleStatusRequests(); + void send_shutdown_abort_reply(const std::shared_ptr<api::StorageMessage>&); void handle_or_propagate_message(const std::shared_ptr<api::StorageMessage>& msg); void startExternalOperations(); diff --git a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp index b46217f6443..ac3d901fd65 100644 --- a/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp +++ b/storage/src/vespa/storage/persistence/filestorage/filestormanager.cpp @@ -89,8 +89,7 @@ FileStorManager::~FileStorManager() } void -FileStorManager::print(std::ostream& out, bool verbose, - const std::string& indent) const +FileStorManager::print(std::ostream& out, bool verbose, const std::string& indent) const { (void) verbose; (void) indent; out << "FileStorManager"; @@ -128,20 +127,14 @@ FileStorManager::configure(std::unique_ptr<vespa::config::content::StorFilestorC LOG(spam, "Setting up disk %u", i); for (uint32_t j = 0; j < 4; j++) { _disks[i].push_back(DiskThread::SP( - new PersistenceThread( - _compReg, _configUri, *_provider, - *_filestorHandler, - *_metrics->disks[i]->threads[j], - i, 255, false))); + new PersistenceThread(_compReg, _configUri, *_provider, *_filestorHandler, + *_metrics->disks[i]->threads[j], i, 255))); } for (uint32_t j = 4; j < 6; j++) { _disks[i].push_back(DiskThread::SP( - new PersistenceThread( - _compReg, _configUri, *_provider, - *_filestorHandler, - *_metrics->disks[i]->threads[j], - i, 100))); + new PersistenceThread(_compReg, _configUri, *_provider, *_filestorHandler, + *_metrics->disks[i]->threads[j], i, 100))); } } @@ -149,12 +142,8 @@ FileStorManager::configure(std::unique_ptr<vespa::config::content::StorFilestorC LOG(spam, "Setting up disk %u, thread %u with priority %d", i, j, _config->threads[j].lowestpri); _disks[i].push_back(DiskThread::SP( - new PersistenceThread( - _compReg, _configUri, *_provider, - *_filestorHandler, - *_metrics->disks[i]->threads[j], - i, _config->threads[j].lowestpri, - false))); + new PersistenceThread(_compReg, _configUri, *_provider, *_filestorHandler, + *_metrics->disks[i]->threads[j], i, _config->threads[j].lowestpri))); } } else { @@ -389,11 +378,9 @@ FileStorManager::onRevert(const shared_ptr<api::RevertCommand>& cmd) } bool -FileStorManager::onMultiOperation( - const std::shared_ptr<api::MultiOperationCommand>& cmd) +FileStorManager::onMultiOperation(const std::shared_ptr<api::MultiOperationCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToBucketAndDisk( - *cmd, 0)); + StorBucketDatabase::WrappedEntry entry(mapOperationToBucketAndDisk(*cmd, 0)); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -401,11 +388,9 @@ FileStorManager::onMultiOperation( } bool -FileStorManager::onBatchPutRemove( - const std::shared_ptr<api::BatchPutRemoveCommand>& cmd) +FileStorManager::onBatchPutRemove(const std::shared_ptr<api::BatchPutRemoveCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToBucketAndDisk( - *cmd, 0)); + StorBucketDatabase::WrappedEntry entry(mapOperationToBucketAndDisk(*cmd, 0)); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -413,11 +398,9 @@ FileStorManager::onBatchPutRemove( } bool -FileStorManager::onRemoveLocation( - const std::shared_ptr<api::RemoveLocationCommand>& cmd) +FileStorManager::onRemoveLocation(const std::shared_ptr<api::RemoveLocationCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -425,11 +408,9 @@ FileStorManager::onRemoveLocation( } bool -FileStorManager::onStatBucket( - const std::shared_ptr<api::StatBucketCommand>& cmd) +FileStorManager::onStatBucket(const std::shared_ptr<api::StatBucketCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -478,8 +459,7 @@ FileStorManager::onCreateBucket( } } } - std::shared_ptr<api::CreateBucketReply> reply( - (api::CreateBucketReply*)cmd->makeReply().release()); + std::shared_ptr<api::CreateBucketReply> reply((api::CreateBucketReply*)cmd->makeReply().release()); reply->setBucketInfo(api::BucketInfo(0, 0, 0, 0, 0, true, cmd->getActive())); reply->setResult(code); sendUp(reply); @@ -491,12 +471,10 @@ FileStorManager::onDeleteBucket(const shared_ptr<api::DeleteBucketCommand>& cmd) { uint16_t disk; { - StorBucketDatabase::WrappedEntry entry( - _component.getBucketDatabase().get( - cmd->getBucketId(), "FileStorManager::onDeleteBucket")); + StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get(cmd->getBucketId(), + "FileStorManager::onDeleteBucket")); if (!entry.exist()) { - LOG(debug, "%s was already deleted", - cmd->getBucketId().toString().c_str()); + LOG(debug, "%s was already deleted", cmd->getBucketId().toString().c_str()); std::shared_ptr<api::StorageReply> reply(cmd->makeReply().release()); sendUp(reply); return true; @@ -520,10 +498,8 @@ FileStorManager::onDeleteBucket(const shared_ptr<api::DeleteBucketCommand>& cmd) LOG(debug, "Rejecting bucket delete: %s", ost.str().c_str()); std::shared_ptr<api::StorageReply> reply(cmd->makeReply().release()); - static_cast<api::DeleteBucketReply&>(*reply).setBucketInfo( - entry->getBucketInfo()); - reply->setResult(api::ReturnCode(api::ReturnCode::REJECTED, - ost.str())); + static_cast<api::DeleteBucketReply&>(*reply).setBucketInfo(entry->getBucketInfo()); + reply->setResult(api::ReturnCode(api::ReturnCode::REJECTED, ost.str())); entry.unlock(); sendUp(reply); return true; @@ -538,13 +514,10 @@ FileStorManager::onDeleteBucket(const shared_ptr<api::DeleteBucketCommand>& cmd) disk = entry->disk; entry.remove(); } - _filestorHandler->failOperations( - cmd->getBucketId(), - disk, - api::ReturnCode(api::ReturnCode::BUCKET_DELETED, - vespalib::make_string( - "Bucket %s about to be deleted anyway", - cmd->getBucketId().toString().c_str()))); + _filestorHandler->failOperations(cmd->getBucketId(), disk, + api::ReturnCode(api::ReturnCode::BUCKET_DELETED, + vespalib::make_string("Bucket %s about to be deleted anyway", + cmd->getBucketId().toString().c_str()))); return true; } @@ -564,10 +537,7 @@ FileStorManager::ensureConsistentBucket( // Don't create empty bucket if merge isn't allowed to continue. entry.remove(); } - replyDroppedOperation(msg, - bucket, - api::ReturnCode::ABORTED, - "bucket is inconsistently split"); + replyDroppedOperation(msg, bucket, api::ReturnCode::ABORTED, "bucket is inconsistently split"); return StorBucketDatabase::WrappedEntry(); } @@ -577,10 +547,8 @@ FileStorManager::ensureConsistentBucket( bool FileStorManager::onMergeBucket(const shared_ptr<api::MergeBucketCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry( - ensureConsistentBucket(cmd->getBucketId(), - *cmd, - "FileStorManager::onMergeBucket")); + StorBucketDatabase::WrappedEntry entry(ensureConsistentBucket(cmd->getBucketId(), *cmd, + "FileStorManager::onMergeBucket")); if (!entry.exist()) { return true; } @@ -589,26 +557,20 @@ FileStorManager::onMergeBucket(const shared_ptr<api::MergeBucketCommand>& cmd) entry->disk = _component.getIdealPartition(cmd->getBucketId()); if (_partitions[entry->disk].isUp()) { entry->info = api::BucketInfo(0, 0, 0, 0, 0, true, false); - LOG(debug, "Created bucket %s on disk %d (node index is %d) due " - "to merge being received.", - cmd->getBucketId().toString().c_str(), - entry->disk, _component.getIndex()); + LOG(debug, "Created bucket %s on disk %d (node index is %d) due to merge being received.", + cmd->getBucketId().toString().c_str(), entry->disk, _component.getIndex()); // Call before writing bucket entry as we need to have bucket // lock while calling handlePersistenceMessage(cmd, entry->disk); entry.write(); } else { entry.remove(); - api::ReturnCode code( - api::ReturnCode::IO_FAILURE, + api::ReturnCode code(api::ReturnCode::IO_FAILURE, vespalib::make_string( "Trying to perform merge %s whose bucket belongs on target disk %d, which is down. Cluster state version of command is %d, our system state version is %d", - cmd->toString().c_str(), - entry->disk, - cmd->getClusterStateVersion(), + cmd->toString().c_str(), entry->disk, cmd->getClusterStateVersion(), _component.getStateUpdater().getSystemState()->getVersion())); - LOGBT(debug, cmd->getBucketId().toString(), - "%s", code.getMessage().c_str()); + LOGBT(debug, cmd->getBucketId().toString(), "%s", code.getMessage().c_str()); api::MergeBucketReply::SP reply(new api::MergeBucketReply(*cmd)); reply->setResult(code); sendUp(reply); @@ -668,17 +630,13 @@ FileStorManager::onGetBucketDiff( } bool -FileStorManager::validateApplyDiffCommandBucket( - api::StorageMessage& msg, - const StorBucketDatabase::WrappedEntry& entry) +FileStorManager::validateApplyDiffCommandBucket(api::StorageMessage& msg, const StorBucketDatabase::WrappedEntry& entry) { if (!entry.exist()) { return false; } if (!_component.getBucketDatabase().isConsistent(entry)) { - replyDroppedOperation(msg, - entry.getBucketId(), - api::ReturnCode::ABORTED, + replyDroppedOperation(msg, entry.getBucketId(), api::ReturnCode::ABORTED, "bucket became inconsistent during merging"); return false; } @@ -686,31 +644,26 @@ FileStorManager::validateApplyDiffCommandBucket( } bool -FileStorManager::validateDiffReplyBucket( - const StorBucketDatabase::WrappedEntry& entry, - const document::BucketId& bucket) +FileStorManager::validateDiffReplyBucket(const StorBucketDatabase::WrappedEntry& entry, + const document::BucketId& bucket) { if (!entry.exist()) { _filestorHandler->clearMergeStatus(bucket, - api::ReturnCode(api::ReturnCode::BUCKET_NOT_FOUND, - "Bucket removed during merge")); + api::ReturnCode(api::ReturnCode::BUCKET_NOT_FOUND, "Bucket removed during merge")); return false; } if (!_component.getBucketDatabase().isConsistent(entry)) { _filestorHandler->clearMergeStatus(bucket, - api::ReturnCode(api::ReturnCode::ABORTED, - "Bucket became inconsistent during merging")); + api::ReturnCode(api::ReturnCode::ABORTED, "Bucket became inconsistent during merging")); return false; } return true; } bool -FileStorManager::onGetBucketDiffReply( - const shared_ptr<api::GetBucketDiffReply>& reply) +FileStorManager::onGetBucketDiffReply(const shared_ptr<api::GetBucketDiffReply>& reply) { - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *reply, reply->getBucketId())); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*reply, reply->getBucketId())); if (validateDiffReplyBucket(entry, reply->getBucketId())) { handlePersistenceMessage(reply, entry->disk); } @@ -718,11 +671,9 @@ FileStorManager::onGetBucketDiffReply( } bool -FileStorManager::onApplyBucketDiff( - const shared_ptr<api::ApplyBucketDiffCommand>& cmd) +FileStorManager::onApplyBucketDiff(const shared_ptr<api::ApplyBucketDiffCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (validateApplyDiffCommandBucket(*cmd, entry)) { handlePersistenceMessage(cmd, entry->disk); } @@ -730,8 +681,7 @@ FileStorManager::onApplyBucketDiff( } bool -FileStorManager::onApplyBucketDiffReply( - const shared_ptr<api::ApplyBucketDiffReply>& reply) +FileStorManager::onApplyBucketDiffReply(const shared_ptr<api::ApplyBucketDiffReply>& reply) { StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( *reply, reply->getBucketId())); @@ -742,8 +692,7 @@ FileStorManager::onApplyBucketDiffReply( } bool -FileStorManager::onJoinBuckets( - const std::shared_ptr<api::JoinBucketsCommand>& cmd) +FileStorManager::onJoinBuckets(const std::shared_ptr<api::JoinBucketsCommand>& cmd) { StorBucketDatabase::WrappedEntry entry(_component.getBucketDatabase().get( cmd->getBucketId(), "FileStorManager::onJoinBuckets")); @@ -757,11 +706,9 @@ FileStorManager::onJoinBuckets( } bool -FileStorManager::onSplitBucket( - const std::shared_ptr<api::SplitBucketCommand>& cmd) +FileStorManager::onSplitBucket(const std::shared_ptr<api::SplitBucketCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -772,8 +719,7 @@ bool FileStorManager::onSetBucketState( const std::shared_ptr<api::SetBucketStateCommand>& cmd) { - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -786,10 +732,8 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) switch (msg->getType()) { case GetIterCommand::ID: { - shared_ptr<GetIterCommand> cmd( - std::static_pointer_cast<GetIterCommand>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<GetIterCommand> cmd(std::static_pointer_cast<GetIterCommand>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -797,10 +741,8 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case CreateIteratorCommand::ID: { - shared_ptr<CreateIteratorCommand> cmd( - std::static_pointer_cast<CreateIteratorCommand>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<CreateIteratorCommand> cmd(std::static_pointer_cast<CreateIteratorCommand>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -808,28 +750,22 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case DestroyIteratorCommand::ID: { - spi::Context context(msg->getLoadType(), msg->getPriority(), - msg->getTrace().getLevel()); - shared_ptr<DestroyIteratorCommand> cmd( - std::static_pointer_cast<DestroyIteratorCommand>(msg)); + spi::Context context(msg->getLoadType(), msg->getPriority(), msg->getTrace().getLevel()); + shared_ptr<DestroyIteratorCommand> cmd(std::static_pointer_cast<DestroyIteratorCommand>(msg)); _provider->destroyIterator(cmd->getIteratorId(), context); msg->getTrace().getRoot().addChild(context.getTrace().getRoot()); return true; } case ReadBucketList::ID: { - shared_ptr<ReadBucketList> cmd( - std::static_pointer_cast<ReadBucketList>(msg)); - + shared_ptr<ReadBucketList> cmd(std::static_pointer_cast<ReadBucketList>(msg)); handlePersistenceMessage(cmd, cmd->getPartition()); return true; } case ReadBucketInfo::ID: { - shared_ptr<ReadBucketInfo> cmd( - std::static_pointer_cast<ReadBucketInfo>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<ReadBucketInfo> cmd(std::static_pointer_cast<ReadBucketInfo>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -837,10 +773,8 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case InternalBucketJoinCommand::ID: { - shared_ptr<InternalBucketJoinCommand> cmd( - std::static_pointer_cast<InternalBucketJoinCommand>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<InternalBucketJoinCommand> cmd(std::static_pointer_cast<InternalBucketJoinCommand>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -848,10 +782,8 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case RepairBucketCommand::ID: { - shared_ptr<RepairBucketCommand> cmd( - std::static_pointer_cast<RepairBucketCommand>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<RepairBucketCommand> cmd(std::static_pointer_cast<RepairBucketCommand>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -859,10 +791,8 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case BucketDiskMoveCommand::ID: { - shared_ptr<BucketDiskMoveCommand> cmd( - std::static_pointer_cast<BucketDiskMoveCommand>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<BucketDiskMoveCommand> cmd(std::static_pointer_cast<BucketDiskMoveCommand>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -870,10 +800,8 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case RecheckBucketInfoCommand::ID: { - shared_ptr<RecheckBucketInfoCommand> cmd( - std::static_pointer_cast<RecheckBucketInfoCommand>(msg)); - StorBucketDatabase::WrappedEntry entry(mapOperationToDisk( - *cmd, cmd->getBucketId())); + shared_ptr<RecheckBucketInfoCommand> cmd(std::static_pointer_cast<RecheckBucketInfoCommand>(msg)); + StorBucketDatabase::WrappedEntry entry(mapOperationToDisk(*cmd, cmd->getBucketId())); if (entry.exist()) { handlePersistenceMessage(cmd, entry->disk); } @@ -881,8 +809,7 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } case AbortBucketOperationsCommand::ID: { - shared_ptr<AbortBucketOperationsCommand> cmd( - std::static_pointer_cast<AbortBucketOperationsCommand>(msg)); + shared_ptr<AbortBucketOperationsCommand> cmd(std::static_pointer_cast<AbortBucketOperationsCommand>(msg)); handleAbortBucketOperations(cmd); return true; } @@ -892,8 +819,7 @@ FileStorManager::onInternal(const shared_ptr<api::InternalCommand>& msg) } void -FileStorManager::handleAbortBucketOperations( - const shared_ptr<AbortBucketOperationsCommand>& cmd) +FileStorManager::handleAbortBucketOperations(const shared_ptr<AbortBucketOperationsCommand>& cmd) { _filestorHandler->abortQueuedOperations(*cmd); sendReply(api::StorageReply::SP(cmd->makeReply().release())); @@ -925,8 +851,7 @@ FileStorManager::sendReply(const std::shared_ptr<api::StorageReply>& reply) LOG(spam, "Sending reply %s", reply->toString().c_str()); if (reply->getType() == api::MessageType::INTERNAL_REPLY) { - std::shared_ptr<api::InternalReply> rep( - std::dynamic_pointer_cast<api::InternalReply>(reply)); + std::shared_ptr<api::InternalReply> rep(std::dynamic_pointer_cast<api::InternalReply>(reply)); assert(rep.get()); if (onInternalReply(rep)) return; } @@ -1021,8 +946,7 @@ FileStorManager::isMerging(const document::BucketId& bucket) const namespace { struct Deactivator { - StorBucketDatabase::Decision operator()( - document::BucketId::Type, StorBucketDatabase::Entry& data) + StorBucketDatabase::Decision operator()(document::BucketId::Type, StorBucketDatabase::Entry& data) { data.info.setActive(false); return StorBucketDatabase::UPDATE; @@ -1034,21 +958,16 @@ void FileStorManager::updateState() { lib::ClusterState::CSP state(_component.getStateUpdater().getSystemState()); - spi::ClusterState spiState( - *state, _component.getIndex(), *_component.getDistribution()); + spi::ClusterState spiState(*state, _component.getIndex(), *_component.getDistribution()); lib::Node node(_component.getNodeType(), _component.getIndex()); bool nodeUp = state->getNodeState(node).getState().oneOf("uir"); - LOG(debug, "FileStorManager received cluster state '%s'", - state->toString().c_str()); + LOG(debug, "FileStorManager received cluster state '%s'", state->toString().c_str()); // If edge where we go down if (_nodeUpInLastNodeStateSeenByProvider && !nodeUp) { - LOG(debug, - "Received cluster state where this node is down; " - "de-activating all buckets in database"); + LOG(debug, "Received cluster state where this node is down; de-activating all buckets in database"); Deactivator deactivator; - _component.getBucketDatabase().all( - deactivator, "FileStorManager::updateState"); + _component.getBucketDatabase().all(deactivator, "FileStorManager::updateState"); } _provider->setClusterState(spiState); _nodeUpInLastNodeStateSeenByProvider = nodeUp; diff --git a/storage/src/vespa/storage/persistence/persistencethread.cpp b/storage/src/vespa/storage/persistence/persistencethread.cpp index 0ab512cd63f..11f8b5d1cf4 100644 --- a/storage/src/vespa/storage/persistence/persistencethread.cpp +++ b/storage/src/vespa/storage/persistence/persistencethread.cpp @@ -5,7 +5,6 @@ #include "bucketownershipnotifier.h" #include "testandsethelper.h" #include <vespa/storageapi/message/multioperation.h> -#include <vespa/storage/bucketdb/storbucketdb.h> #include <vespa/storageapi/message/bucketsplitting.h> #include <vespa/storage/common/bucketoperationlogger.h> #include <vespa/document/fieldset/fieldsetrepo.h> @@ -24,15 +23,8 @@ PersistenceThread::PersistenceThread(ServiceLayerComponentRegister& compReg, FileStorHandler& filestorHandler, FileStorThreadMetrics& metrics, uint16_t deviceIndex, - uint8_t lowestPriority, - bool startThread) - : _env(configUri, - compReg, - filestorHandler, - metrics, - deviceIndex, - lowestPriority, - provider), + uint8_t lowestPriority) + : _env(configUri, compReg, filestorHandler, metrics, deviceIndex, lowestPriority, provider), _warnOnSlowOperations(5000), _spi(provider), _processAllHandler(_env, provider), @@ -43,13 +35,10 @@ PersistenceThread::PersistenceThread(ServiceLayerComponentRegister& compReg, _flushMonitor(), _closed(false) { - (void) startThread; std::ostringstream threadName; - threadName << "Disk " << _env._partition << " thread " - << (void*) this; + threadName << "Disk " << _env._partition << " thread " << (void*) this; _component.reset(new ServiceLayerComponent(compReg, threadName.str())); - _bucketOwnershipNotifier.reset( - new BucketOwnershipNotifier(*_component, filestorHandler)); + _bucketOwnershipNotifier.reset(new BucketOwnershipNotifier(*_component, filestorHandler)); framework::MilliSecTime maxProcessingTime(60 * 1000); framework::MilliSecTime waitTime(1000); _thread = _component->startThread(*this, maxProcessingTime, waitTime); @@ -57,8 +46,7 @@ PersistenceThread::PersistenceThread(ServiceLayerComponentRegister& compReg, PersistenceThread::~PersistenceThread() { - LOG(debug, "Shutting down persistence thread. Waiting for current " - "operation to finish."); + LOG(debug, "Shutting down persistence thread. Waiting for current operation to finish."); _thread->interrupt(); LOG(debug, "Waiting for thread to terminate."); _thread->join(); @@ -66,8 +54,7 @@ PersistenceThread::~PersistenceThread() } spi::Bucket -PersistenceThread::getBucket(const DocumentId& id, - const BucketId& bucket) const +PersistenceThread::getBucket(const DocumentId& id, const BucketId& bucket) const { BucketId docBucket(_env._bucketFactory.getBucketId(id)); docBucket.setUsedBits(bucket.getUsedBits()); @@ -82,8 +69,7 @@ PersistenceThread::getBucket(const DocumentId& id, } bool -PersistenceThread::checkForError(const spi::Result& response, - MessageTracker& tracker) +PersistenceThread::checkForError(const spi::Result& response, MessageTracker& tracker) { uint32_t code = _env.convertErrorCode(response); diff --git a/storage/src/vespa/storage/persistence/persistencethread.h b/storage/src/vespa/storage/persistence/persistencethread.h index 218d2f7dd23..4d714dc878a 100644 --- a/storage/src/vespa/storage/persistence/persistencethread.h +++ b/storage/src/vespa/storage/persistence/persistencethread.h @@ -16,31 +16,22 @@ namespace storage { class BucketOwnershipNotifier; class TestAndSetHelper; -class PersistenceThread : public DiskThread, public Types +class PersistenceThread final : public DiskThread, public Types { public: - PersistenceThread(ServiceLayerComponentRegister&, - const config::ConfigUri & configUri, - spi::PersistenceProvider& provider, - FileStorHandler& filestorHandler, - FileStorThreadMetrics& metrics, - uint16_t deviceIndex, - uint8_t lowestPriority, - bool startThread = false); + PersistenceThread(ServiceLayerComponentRegister&, const config::ConfigUri & configUri, + spi::PersistenceProvider& provider, FileStorHandler& filestorHandler, + FileStorThreadMetrics& metrics, uint16_t deviceIndex, uint8_t lowestPriority); ~PersistenceThread(); /** Waits for current operation to be finished. */ void flush() override; - - bool isMerging(const BucketId& bucket) const; - framework::Thread& getThread() override { return *_thread; } MessageTracker::UP handlePut(api::PutCommand& cmd); MessageTracker::UP handleRemove(api::RemoveCommand& cmd); MessageTracker::UP handleUpdate(api::UpdateCommand& cmd); MessageTracker::UP handleGet(api::GetCommand& cmd); - MessageTracker::UP handleMultiOperation(api::MultiOperationCommand& cmd); MessageTracker::UP handleRevert(api::RevertCommand& cmd); MessageTracker::UP handleCreateBucket(api::CreateBucketCommand& cmd); @@ -57,37 +48,31 @@ public: MessageTracker::UP handleRecheckBucketInfo(RecheckBucketInfoCommand& cmd); private: - PersistenceUtil _env; - uint32_t _warnOnSlowOperations; - + PersistenceUtil _env; + uint32_t _warnOnSlowOperations; spi::PersistenceProvider& _spi; - ProcessAllHandler _processAllHandler; - MergeHandler _mergeHandler; - DiskMoveOperationHandler _diskMoveHandler; + ProcessAllHandler _processAllHandler; + MergeHandler _mergeHandler; + DiskMoveOperationHandler _diskMoveHandler; ServiceLayerComponent::UP _component; - framework::Thread::UP _thread; - spi::Context _context; + framework::Thread::UP _thread; + spi::Context _context; std::unique_ptr<BucketOwnershipNotifier> _bucketOwnershipNotifier; + vespalib::Monitor _flushMonitor; + bool _closed; - vespalib::Monitor _flushMonitor; - bool _closed; - - void setBucketInfo(MessageTracker& tracker, - const document::BucketId& bucketId); + void setBucketInfo(MessageTracker& tracker, const document::BucketId& bucketId); - bool checkProviderBucketInfoMatches(const spi::Bucket&, - const api::BucketInfo&) const; + bool checkProviderBucketInfoMatches(const spi::Bucket&, const api::BucketInfo&) const; - void updateBucketDatabase(const document::BucketId& id, - const api::BucketInfo& info); + void updateBucketDatabase(const document::BucketId& id, const api::BucketInfo& info); /** * Sanity-checking of join command parameters. Invokes tracker.fail() with * an appropriate error and returns false iff the command does not validate * OK. Returns true and does not touch the tracker otherwise. */ - bool validateJoinCommand(const api::JoinBucketsCommand& cmd, - MessageTracker& tracker) const; + bool validateJoinCommand(const api::JoinBucketsCommand& cmd, MessageTracker& tracker) const; // Message handling functions MessageTracker::UP handleCommand(api::StorageCommand&); @@ -102,8 +87,7 @@ private: bool checkForError(const spi::Result& response, MessageTracker& tracker); spi::Bucket getBucket(const DocumentId& id, const BucketId& bucket) const; - void flushAllReplies(const document::BucketId& bucketId, - std::vector<MessageTracker::UP>& trackers); + void flushAllReplies(const document::BucketId& bucketId, std::vector<MessageTracker::UP>& trackers); friend class TestAndSetHelper; bool tasConditionExists(const api::TestAndSetCommand & cmd); diff --git a/storage/src/vespa/storage/storageserver/servicelayernode.cpp b/storage/src/vespa/storage/storageserver/servicelayernode.cpp index e2861ef42cd..9faf380d2ba 100644 --- a/storage/src/vespa/storage/storageserver/servicelayernode.cpp +++ b/storage/src/vespa/storage/storageserver/servicelayernode.cpp @@ -28,13 +28,11 @@ using StorServerConfigBuilder = vespa::config::content::core::StorServerConfigBu namespace storage { -ServiceLayerNode::ServiceLayerNode( - const config::ConfigUri & configUri, - ServiceLayerNodeContext& context, - ApplicationGenerationFetcher& generationFetcher, - spi::PersistenceProvider& persistenceProvider, - const VisitorFactory::Map& externalVisitors) - : StorageNode(configUri, context, generationFetcher, std::unique_ptr<HostInfo>(new HostInfo)), +ServiceLayerNode::ServiceLayerNode(const config::ConfigUri & configUri, ServiceLayerNodeContext& context, + ApplicationGenerationFetcher& generationFetcher, + spi::PersistenceProvider& persistenceProvider, + const VisitorFactory::Map& externalVisitors) + : StorageNode(configUri, context, generationFetcher, std::make_unique<HostInfo>()), _context(context), _persistenceProvider(persistenceProvider), _partitions(0), diff --git a/storage/src/vespa/storage/storageserver/storagenodecontext.cpp b/storage/src/vespa/storage/storageserver/storagenodecontext.cpp index 5f4ceff2a6b..2e1aa52e68d 100644 --- a/storage/src/vespa/storage/storageserver/storagenodecontext.cpp +++ b/storage/src/vespa/storage/storageserver/storagenodecontext.cpp @@ -4,16 +4,16 @@ #include <vespa/storageframework/defaultimplementation/memory/prioritymemorylogic.h> -using storage::framework::defaultimplementation::AllocationLogic; - namespace storage { +using framework::defaultimplementation::AllocationLogic; +using framework::defaultimplementation::PriorityMemoryLogic; + StorageNodeContext::StorageNodeContext(ComponentRegister::UP compReg, framework::Clock::UP clock) : _componentRegister(std::move(compReg)), _clock(std::move(clock)), _threadPool(*_clock), - _memoryLogic(new framework::defaultimplementation::PriorityMemoryLogic( - *_clock, 1024 * 1024 * 1024)), + _memoryLogic(new PriorityMemoryLogic(*_clock, 1024 * 1024 * 1024)), _memoryManager(AllocationLogic::UP(_memoryLogic)) { _componentRegister->setClock(*_clock); diff --git a/storage/src/vespa/storage/storageserver/storagenodecontext.h b/storage/src/vespa/storage/storageserver/storagenodecontext.h index 7d6f3b0aef5..0149f975f63 100644 --- a/storage/src/vespa/storage/storageserver/storagenodecontext.h +++ b/storage/src/vespa/storage/storageserver/storagenodecontext.h @@ -53,8 +53,7 @@ struct StorageNodeContext { protected: // Initialization has been split in two as subclass needs to initialize // component register before sending it on. - StorageNodeContext(ComponentRegister::UP, - framework::Clock::UP); + StorageNodeContext(ComponentRegister::UP, framework::Clock::UP); private: ComponentRegister::UP _componentRegister; diff --git a/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h b/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h index bdc491a5da6..798251f0573 100644 --- a/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h +++ b/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadimpl.h @@ -49,12 +49,8 @@ class ThreadImpl : public Thread void run(); public: - ThreadImpl(ThreadPoolImpl&, - Runnable&, - vespalib::stringref id, - uint64_t waitTimeMs, - uint64_t maxProcessTimeMs, - int ticksBeforeWait); + ThreadImpl(ThreadPoolImpl&, Runnable&, vespalib::stringref id, uint64_t waitTimeMs, + uint64_t maxProcessTimeMs, int ticksBeforeWait); ~ThreadImpl(); bool interrupted() const override; diff --git a/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp b/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp index eae02c71cfb..09c805b2b85 100644 --- a/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp +++ b/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.cpp @@ -3,12 +3,12 @@ #include "threadpoolimpl.h" #include "threadimpl.h" #include <vespa/vespalib/util/exceptions.h> +#include <thread> +using namespace std::chrono_literals; using vespalib::IllegalStateException; -namespace storage { -namespace framework { -namespace defaultimplementation { +namespace storage::framework::defaultimplementation { ThreadPoolImpl::ThreadPoolImpl(Clock& clock) : _backendThreadPool(512 * 1024), @@ -21,11 +21,11 @@ ThreadPoolImpl::~ThreadPoolImpl() { vespalib::LockGuard lock(_threadVectorLock); _stopping = true; - for (uint32_t i=0, n=_threads.size(); i<n; ++i) { - _threads[i]->interrupt(); + for (ThreadImpl * thread : _threads) { + thread->interrupt(); } - for (uint32_t i=0, n=_threads.size(); i<n; ++i) { - _threads[i]->join(); + for (ThreadImpl * thread : _threads) { + thread->join(); } } for (uint32_t i=0; true; i+=10) { @@ -34,30 +34,25 @@ ThreadPoolImpl::~ThreadPoolImpl() if (_threads.empty()) break; } if (i > 1000) { - fprintf(stderr, "Failed to kill thread pool. Threads won't die. (And " - "if allowing thread pool object to be deleted this " - "will create a segfault later)\n"); + fprintf(stderr, "Failed to kill thread pool. Threads won't die. (And if allowing thread pool object" + " to be deleted this will create a segfault later)\n"); abort(); } - FastOS_Thread::Sleep(10); + std::this_thread::sleep_for(10ms); } _backendThreadPool.Close(); } Thread::UP -ThreadPoolImpl::startThread(Runnable& runnable, - vespalib::stringref id, - uint64_t waitTimeMs, - uint64_t maxProcessTime, - int ticksBeforeWait) +ThreadPoolImpl::startThread(Runnable& runnable, vespalib::stringref id, uint64_t waitTimeMs, + uint64_t maxProcessTime, int ticksBeforeWait) { vespalib::LockGuard lock(_threadVectorLock); if (_stopping) { - throw vespalib::IllegalStateException("Threadpool is stopping", VESPA_STRLOC); + throw IllegalStateException("Threadpool is stopping", VESPA_STRLOC); } ThreadImpl* ti; - Thread::UP t(ti = new ThreadImpl( - *this, runnable, id, waitTimeMs, maxProcessTime, ticksBeforeWait)); + Thread::UP t(ti = new ThreadImpl(*this, runnable, id, waitTimeMs, maxProcessTime, ticksBeforeWait)); _threads.push_back(ti); return t; } @@ -66,9 +61,8 @@ void ThreadPoolImpl::visitThreads(ThreadVisitor& visitor) const { vespalib::LockGuard lock(_threadVectorLock); - for (uint32_t i=0, n=_threads.size(); i<n; ++i) { - visitor.visitThread(_threads[i]->getId(), _threads[i]->getProperties(), - _threads[i]->getTickData()); + for (const ThreadImpl * thread : _threads) { + visitor.visitThread(thread->getId(), thread->getProperties(), thread->getTickData()); } } @@ -78,14 +72,12 @@ ThreadPoolImpl::unregisterThread(ThreadImpl& t) vespalib::LockGuard lock(_threadVectorLock); std::vector<ThreadImpl*> threads; threads.reserve(_threads.size()); - for (uint32_t i=0, n=_threads.size(); i<n; ++i) { - if (_threads[i] != &t) { - threads.push_back(_threads[i]); + for (ThreadImpl * thread : _threads) { + if (thread != &t) { + threads.push_back(thread); } } _threads.swap(threads); } -} // defaultimplementation -} // framework -} // storage +} diff --git a/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h b/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h index 2b16836eba2..4e973c2ad20 100644 --- a/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h +++ b/storageframework/src/vespa/storageframework/defaultimplementation/thread/threadpoolimpl.h @@ -12,11 +12,11 @@ class ThreadImpl; struct ThreadPoolImpl : public ThreadPool { - FastOS_ThreadPool _backendThreadPool; - std::vector<ThreadImpl*> _threads; - vespalib::Lock _threadVectorLock; - Clock& _clock; - bool _stopping; + FastOS_ThreadPool _backendThreadPool; + std::vector<ThreadImpl*> _threads; + vespalib::Lock _threadVectorLock; + Clock & _clock; + bool _stopping; public: ThreadPoolImpl(Clock&); diff --git a/storageframework/src/vespa/storageframework/generic/component/component.cpp b/storageframework/src/vespa/storageframework/generic/component/component.cpp index a35cad68b00..869df4296ef 100644 --- a/storageframework/src/vespa/storageframework/generic/component/component.cpp +++ b/storageframework/src/vespa/storageframework/generic/component/component.cpp @@ -33,9 +33,7 @@ Component::Component(ComponentRegister& cr, vespalib::stringref name) cr.registerComponent(*this); } -Component::~Component() -{ -} +Component::~Component() = default; void Component::registerComponentStateListener(ComponentStateListener& l) @@ -67,8 +65,7 @@ Component::registerMetricUpdateHook(MetricUpdateHook& hook, SecondTime period) assert(_metricUpdateHook.first == 0); _metricUpdateHook = std::make_pair(&hook, period); if (_metricReg != 0) { - _metricReg->registerUpdateHook( - _name, *_metricUpdateHook.first, _metricUpdateHook.second); + _metricReg->registerUpdateHook(_name, *_metricUpdateHook.first, _metricUpdateHook.second); } } @@ -86,8 +83,7 @@ void Component::setMetricRegistrator(MetricRegistrator& mr) { _metricReg = &mr; if (_metricUpdateHook.first != 0) { - _metricReg->registerUpdateHook( - _name, *_metricUpdateHook.first, _metricUpdateHook.second); + _metricReg->registerUpdateHook(_name, *_metricUpdateHook.first, _metricUpdateHook.second); } if (_metric != 0) { _metricReg->registerMetric(*_metric); @@ -117,16 +113,10 @@ Component::getClock() const // Helper functions for components wanting to start a single thread. Thread::UP -Component::startThread(Runnable& runnable, - MilliSecTime waitTime, - MilliSecTime maxProcessTime, - int ticksBeforeWait) +Component::startThread(Runnable& runnable, MilliSecTime waitTime, MilliSecTime maxProcessTime, int ticksBeforeWait) { - return getThreadPool().startThread(runnable, - getName(), - waitTime.getTime(), - maxProcessTime.getTime(), - ticksBeforeWait); + return getThreadPool().startThread(runnable, getName(), waitTime.getTime(), + maxProcessTime.getTime(), ticksBeforeWait); } void diff --git a/storageframework/src/vespa/storageframework/generic/component/component.h b/storageframework/src/vespa/storageframework/generic/component/component.h index 8a65d186557..b16e31290b8 100644 --- a/storageframework/src/vespa/storageframework/generic/component/component.h +++ b/storageframework/src/vespa/storageframework/generic/component/component.h @@ -79,7 +79,7 @@ namespace storage::framework { class ComponentRegister; struct ComponentStateListener { - virtual ~ComponentStateListener() {} + virtual ~ComponentStateListener() = default; virtual void onOpen() {} virtual void onClose() {} diff --git a/storageserver/src/vespa/storageserver/app/servicelayerprocess.cpp b/storageserver/src/vespa/storageserver/app/servicelayerprocess.cpp index 20868e79fce..2ca29223254 100644 --- a/storageserver/src/vespa/storageserver/app/servicelayerprocess.cpp +++ b/storageserver/src/vespa/storageserver/app/servicelayerprocess.cpp @@ -17,7 +17,7 @@ void ServiceLayerProcess::shutdown() { Process::shutdown(); - _node.reset(0); + _node.reset(); } void @@ -25,7 +25,7 @@ ServiceLayerProcess::createNode() { _externalVisitors["searchvisitor"].reset(new SearchVisitorFactory(_configUri)); setupProvider(); - _node.reset(new ServiceLayerNode(_configUri, _context, *this, getProvider(), _externalVisitors)); + _node = std::make_unique<ServiceLayerNode>(_configUri, _context, *this, getProvider(), _externalVisitors); _node->init(); } diff --git a/storageserver/src/vespa/storageserver/app/servicelayerprocess.h b/storageserver/src/vespa/storageserver/app/servicelayerprocess.h index 0a002db114b..af991c00f03 100644 --- a/storageserver/src/vespa/storageserver/app/servicelayerprocess.h +++ b/storageserver/src/vespa/storageserver/app/servicelayerprocess.h @@ -19,9 +19,8 @@ #include "process.h" #include <vespa/storage/storageserver/servicelayernodecontext.h> #include <vespa/storage/common/visitorfactory.h> -#include <vespa/config/config.h> -#include <vespa/config/helper/configfetcher.h> -#include <vespa/config-persistence.h> + +namespace config { class ConfigUri; } namespace storage { diff --git a/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java b/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java index 2cba2e05536..5ad1a8f1e17 100644 --- a/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java +++ b/vespajlib/src/main/java/com/yahoo/tensor/Tensor.java @@ -174,11 +174,17 @@ public interface Tensor { default Tensor equal(Tensor argument) { return join(argument, (a, b) -> ( a == b ? 1.0 : 0.0)); } default Tensor notEqual(Tensor argument) { return join(argument, (a, b) -> ( a != b ? 1.0 : 0.0)); } + default Tensor avg(String dimension) { return avg(Collections.singletonList(dimension)); } default Tensor avg(List<String> dimensions) { return reduce(Reduce.Aggregator.avg, dimensions); } + default Tensor count(String dimension) { return count(Collections.singletonList(dimension)); } default Tensor count(List<String> dimensions) { return reduce(Reduce.Aggregator.count, dimensions); } + default Tensor max(String dimension) { return max(Collections.singletonList(dimension)); } default Tensor max(List<String> dimensions) { return reduce(Reduce.Aggregator.max, dimensions); } + default Tensor min(String dimension) { return min(Collections.singletonList(dimension)); } default Tensor min(List<String> dimensions) { return reduce(Reduce.Aggregator.min, dimensions); } + default Tensor prod(String dimension) { return prod(Collections.singletonList(dimension)); } default Tensor prod(List<String> dimensions) { return reduce(Reduce.Aggregator.prod, dimensions); } + default Tensor sum(String dimension) { return sum(Collections.singletonList(dimension)); } default Tensor sum(List<String> dimensions) { return reduce(Reduce.Aggregator.sum, dimensions); } // ----------------- serialization diff --git a/vespajlib/src/test/java/com/yahoo/tensor/TensorTestCase.java b/vespajlib/src/test/java/com/yahoo/tensor/TensorTestCase.java index f0b800bea7f..c47bfe84373 100644 --- a/vespajlib/src/test/java/com/yahoo/tensor/TensorTestCase.java +++ b/vespajlib/src/test/java/com/yahoo/tensor/TensorTestCase.java @@ -66,6 +66,16 @@ public class TensorTestCase { assertTrue(dimensions3.contains("d3")); } + @Test + public void testExpressions() { + Tensor y = Tensor.from("{{y:1}:3}"); + Tensor x = Tensor.from("{{x:0}:5,{x:1}:7}"); + Tensor xy = Tensor.from("{{x:0,y:1}:11, {x:1,y:1}:13}"); + double nest = y.multiply(x.multiply(xy).sum("x")).sum("y").asDouble(); + double flat = y.multiply(x).multiply(xy).sum(ImmutableList.of("x","y")).asDouble(); + assertEquals(nest, flat, 0.000000001); + } + /** All functions are more throughly tested in searchlib EvaluationTestCase */ @Test public void testTensorComputation() { diff --git a/vespalog/src/test/bufferedlogtest.cpp b/vespalog/src/test/bufferedlogtest.cpp index 3e974057361..9b69d9d3a14 100644 --- a/vespalog/src/test/bufferedlogtest.cpp +++ b/vespalog/src/test/bufferedlogtest.cpp @@ -71,12 +71,11 @@ void spamLog2(uint64_t& time, int diff) { time += diff; std::ostringstream ost; ost << "Message " << i; - LOGBT(info, ost.str(), ost.str().c_str()); + LOGBT(info, ost.str(), "%s", ost.str().c_str()); } } -void testThatEntriesWithHighCountIsKept(const std::string& file, - uint64_t& timer) +void testThatEntriesWithHighCountIsKept(const std::string& file, uint64_t& timer) { std::cerr << "testThatEntriesWithHighCountIsKept ...\n"; timer = 10 * 1000000 + 4; diff --git a/vespalog/src/test/bufferedlogtest.logger1.cpp b/vespalog/src/test/bufferedlogtest.logger1.cpp index 24b9237a71d..dde5f2edbb5 100644 --- a/vespalog/src/test/bufferedlogtest.logger1.cpp +++ b/vespalog/src/test/bufferedlogtest.logger1.cpp @@ -5,7 +5,7 @@ LOG_SETUP(".logger1"); -void logWithLogger1(const std::string& token, const std::string message) +void logWithLogger1(const std::string& token, const std::string & message) { - LOGBT(info, token, message.c_str()); + LOGBT(info, token, "%s", message.c_str()); } diff --git a/vespalog/src/test/bufferedlogtest.logger1.h b/vespalog/src/test/bufferedlogtest.logger1.h index acbd67e8c3e..1ec8f9acad4 100644 --- a/vespalog/src/test/bufferedlogtest.logger1.h +++ b/vespalog/src/test/bufferedlogtest.logger1.h @@ -4,5 +4,5 @@ #include <string> -void logWithLogger1(const std::string& token, const std::string message); +void logWithLogger1(const std::string& token, const std::string & message); diff --git a/vespalog/src/test/bufferedlogtest.logger2.cpp b/vespalog/src/test/bufferedlogtest.logger2.cpp index 8d6ca97130e..992eeb70481 100644 --- a/vespalog/src/test/bufferedlogtest.logger2.cpp +++ b/vespalog/src/test/bufferedlogtest.logger2.cpp @@ -5,7 +5,7 @@ LOG_SETUP(".logger2"); -void logWithLogger2(const std::string& token, const std::string message) +void logWithLogger2(const std::string& token, const std::string & message) { - LOGBT(info, token, message.c_str()); + LOGBT(info, token, "%s", message.c_str()); } diff --git a/vespalog/src/test/bufferedlogtest.logger2.h b/vespalog/src/test/bufferedlogtest.logger2.h index 398d799a2b3..cd88d8ea0be 100644 --- a/vespalog/src/test/bufferedlogtest.logger2.h +++ b/vespalog/src/test/bufferedlogtest.logger2.h @@ -4,5 +4,5 @@ #include <string> -void logWithLogger2(const std::string& token, const std::string message); +void logWithLogger2(const std::string& token, const std::string & message); diff --git a/vespalog/src/vespa/log/bufferedlogger.h b/vespalog/src/vespa/log/bufferedlogger.h index 64419311a17..9081ab8f9cf 100644 --- a/vespalog/src/vespa/log/bufferedlogger.h +++ b/vespalog/src/vespa/log/bufferedlogger.h @@ -102,7 +102,7 @@ "", __VA_ARGS__); \ } \ } \ - } while (0) + } while (false) #endif // Define LOGBM macro for logging buffered, using the message itself as a @@ -121,7 +121,7 @@ "", __VA_ARGS__); \ } \ } \ - } while (0) + } while (false) // Define LOGBP macro for logging buffered, using the call point as token. // (File/line of macro caller) @@ -140,7 +140,7 @@ __FILE__, __LINE__, ost123.str(), ##ARGS); \ } \ } \ - } while (0) + } while (false) // Define LOGT calls for using the buffer specifically stating token #define LOGBT(level, token, ...) \ @@ -156,7 +156,7 @@ __FILE__, __LINE__, token, __VA_ARGS__); \ } \ } \ - } while (0) + } while (false) #define LOGB_FLUSH() \ ns_log::BufferedLogger::logger.flush() diff --git a/vespalog/src/vespa/log/log.cpp b/vespalog/src/vespa/log/log.cpp index 7d98c22957d..193f4230502 100644 --- a/vespalog/src/vespa/log/log.cpp +++ b/vespalog/src/vespa/log/log.cpp @@ -23,7 +23,7 @@ namespace ns_log { uint64_t Timer::getTimestamp() const { struct timeval tv; - gettimeofday(&tv, NULL); + gettimeofday(&tv, nullptr); uint64_t timestamp = tv.tv_sec; timestamp *= 1000000; timestamp += tv.tv_usec; @@ -164,16 +164,16 @@ Logger::~Logger() { _numInstances--; if ((_numInstances == 1)) { - if (logger != NULL) { + if (logger != nullptr) { logger->~Logger(); free(logger); - logger = NULL; + logger = nullptr; } } else if (_numInstances == 0) { delete _controlFile; logInitialised = false; delete _target; - _target = NULL; + _target = nullptr; } } @@ -390,13 +390,6 @@ Logger::doEventValue(const char *name, double value) } void -Logger::doEventCollection(uint64_t collectionId, const char* name, const char* params) -{ - doLog(event, "", 0, "collection/1 collectionId=%lu name=\"%s\" %s", - collectionId, name, params); -} - -void Logger::doEventState(const char *name, const char *value) { doLog(event, "", 0, "state/1 name=\"%s\" value=\"%s\"", name, value); diff --git a/vespalog/src/vespa/log/log.h b/vespalog/src/vespa/log/log.h index 127baf14d55..de0b9809e35 100644 --- a/vespalog/src/vespa/log/log.h +++ b/vespalog/src/vespa/log/log.h @@ -39,13 +39,13 @@ do { \ if (logger.wants(ns_log::Logger::level)) { \ logger.doLog(ns_log::Logger::level, __FILE__, __LINE__, __VA_ARGS__); \ } \ -} while (0) +} while (false) #define VLOG(level, ...) \ do { \ if (logger.wants(level)) { \ logger.doLog(level, __FILE__, __LINE__, __VA_ARGS__); \ } \ -} while (0) +} while (false) #endif // Must use placement new in the following definition, since the variable @@ -64,7 +64,7 @@ do { if (logger->wants(ns_log::Logger::level)) { \ logger->doLog(ns_log::Logger::level, __FILE__, __LINE__, __VA_ARGS__); \ } \ -} while (0) +} while (false) #define LOG_WOULD_LOG(level) logger.wants(ns_log::Logger::level) #define LOG_WOULD_VLOG(level) logger.wants(level) @@ -74,84 +74,77 @@ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventStarting(name); \ } \ -} while (0) +} while (false) #define EV_STOPPING(name,why) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventStopping(name, why); \ } \ -} while (0) +} while (false) #define EV_STARTED(name) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventStarted(name); \ } \ -} while (0) +} while (false) #define EV_STOPPED(name,pid,exitcode) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventStopped(name, pid, exitcode); \ } \ -} while (0) +} while (false) #define EV_RELOADING(name) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventReloading(name); \ } \ -} while (0) +} while (false) #define EV_RELOADED(name) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventReloaded(name); \ } \ -} while (0) +} while (false) #define EV_CRASH(name,pid,signal) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventCrash(name, pid, signal); \ } \ -} while (0) +} while (false) #define EV_PROGRESS(name, ...) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventProgress(name, __VA_ARGS__); \ } \ -} while (0) +} while (false) #define EV_COUNT(name,value) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventCount(name, value); \ } \ -} while (0) +} while (false) #define EV_VALUE(name,value) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventValue(name, value); \ } \ -} while (0) - -#define EV_COLLECTION(collectionId,name,params) \ -do { \ - if (logger.wants(ns_log::Logger::event)) { \ - logger.doEventCollection(collectionId, name, params); \ - } \ -} while (0) +} while (false) #define EV_STATE(name,value) \ do { \ if (logger.wants(ns_log::Logger::event)) { \ logger.doEventState(name, value); \ } \ -} while (0) +} while (false) namespace ns_log { @@ -161,7 +154,7 @@ class ControlFile; // XXX this is way too complicated, must be some simpler way to do this /** Timer class used to retrieve timestamp, such that we can override in test */ struct Timer { - virtual ~Timer() {} + virtual ~Timer() = default; virtual uint64_t getTimestamp() const; }; @@ -187,7 +180,6 @@ public: static bool fakePid; private: - Logger(); Logger(const Logger &); Logger& operator =(const Logger &); @@ -205,7 +197,6 @@ private: static ControlFile *_controlFile; static void setTarget(); - void makeLockFile(); char _appendix[256]; @@ -220,8 +211,7 @@ private: const char *fmt, va_list args); public: ~Logger(); - explicit Logger(const char *name, const char *rcsId = 0); - static Logger& getLogger(const char *name); + explicit Logger(const char *name, const char *rcsId = nullptr); int setRcsId(const char *rcsId); static const char *levelName(LogLevel level); @@ -247,8 +237,6 @@ public: void doEventProgress(const char *name, double value, double total = 0); void doEventCount(const char *name, uint64_t value); void doEventValue(const char *name, double value); - void doEventCollection(uint64_t collectionId, const char *name, - const char *params); void doEventState(const char *name, const char *value); // Only for unit testing |