diff --git a/.gitignore b/.gitignore index ed8edee24..66b8acd00 100644 --- a/.gitignore +++ b/.gitignore @@ -122,5 +122,4 @@ Assets/SequenceSDK/WaaS/Tests/Resources/ # Foundry /testchain/lib -/testchain/artifacts/* diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/ConfigTests.cs b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/ConfigTests.cs new file mode 100644 index 000000000..e6f33aa8f --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/ConfigTests.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Numerics; +using System.Threading.Tasks; +using Sequence.EcosystemWallet.Primitives; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.IntegrationTests +{ + public class ConfigTests + { + public Task ConfigNew(Dictionary parameters) + { + var threshold = (string)parameters["threshold"]; + var checkpoint = (string)parameters["checkpoint"]; + var content = (string)parameters["content"]; + + var checkpointer = parameters.TryGetValue("checkpointer", out var checkpointerValue) && + checkpointerValue != null ? new Address(checkpointerValue as string) : null; + + var config = new Primitives.Config + { + threshold = BigInteger.Parse(threshold), + checkpoint = BigInteger.Parse(checkpoint), + topology = Topology.FromLeaves(Topology.ParseContentToLeafs(content)), + checkpointer = checkpointer + }; + + return Task.FromResult(config.ToJson()); + } + + public Task ConfigEncode(Dictionary parameters) + { + var input = parameters["input"].ToString(); + var config = Primitives.Config.FromJson(input); + var signature = new RawSignature + { + checkpointerData = null, + configuration = config, + }; + + var encoded = signature.Encode().ByteArrayToHexStringWithPrefix(); + return Task.FromResult(encoded); + } + + public Task ConfigImageHash(Dictionary parameters) + { + var input = parameters["input"].ToString(); + var config = Primitives.Config.FromJson(input); + var imageHash = config.HashConfiguration().ByteArrayToHexStringWithPrefix(); + return Task.FromResult(imageHash); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/ConfigTests.cs.meta b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/ConfigTests.cs.meta new file mode 100644 index 000000000..0c901dada --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/ConfigTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6cb18b91df9a4eb0b23d829424d21f90 +timeCreated: 1750107270 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/DevToolsTest.cs b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/DevToolsTest.cs new file mode 100644 index 000000000..fb89ce63f --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/DevToolsTest.cs @@ -0,0 +1,32 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Sequence.EcosystemWallet.IntegrationTests +{ + public class DevToolsTest + { + public Task DevToolsRandomConfig(Dictionary parameters) + { + var maxDepth = int.Parse(parameters["maxDepth"].ToString()); + var seed = (string)parameters["seed"]; + var minThresholdOnNested = int.Parse(parameters["minThresholdOnNested"].ToString()); + var checkpointer = parameters.TryGetValue("checkpointer", out var checkpointerObj) ? checkpointerObj.ToString() : "no"; + var skewed = parameters.TryGetValue("skewed", out var skewedObj) ? skewedObj.ToString() : "none"; + + var options = new DevTools.RandomOptions + { + seededRandom = string.IsNullOrEmpty(seed) ? null : DevTools.CreateSeededRandom(seed), + checkpointer = checkpointer, + minThresholdOnNested = minThresholdOnNested, + skewed = skewed + }; + + return Task.FromResult(DevTools.CreateRandomConfig(maxDepth, options).ToJson()); + } + + public Task DevToolsRandomSessionTopology(Dictionary parameters) + { + throw new System.NotImplementedException("DevToolsTest.DevToolsRandomSessionTopology"); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/DevToolsTest.cs.meta b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/DevToolsTest.cs.meta new file mode 100644 index 000000000..3a0c6a188 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/DevToolsTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fa674b79ccbe4a95a6f31ef385b33de9 +timeCreated: 1750143753 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/Server/Server.cs b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/Server/Server.cs index 62e58d131..f99b0b255 100644 --- a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/Server/Server.cs +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/Server/Server.cs @@ -15,10 +15,31 @@ internal class Server public static readonly Dictionary, Task>> Methods = new Dictionary, Task>> { + // PAYLOAD ["payload_toAbi"] = async (parameters) => await new PayloadTests().PayloadToAbi(parameters), ["payload_toPacked"] = async (parameters) => await new PayloadTests().PayloadToPacked(parameters), ["payload_toJson"] = async (parameters) => await new PayloadTests().PayloadToJson(parameters), ["payload_hashFor"] = async (parameters) => await new PayloadTests().PayloadHashFor(parameters), + // CONFIG + ["config_new"] = async (parameters) => await new ConfigTests().ConfigNew(parameters), + ["config_encode"] = async (parameters) => await new ConfigTests().ConfigEncode(parameters), + ["config_imageHash"] = async (parameters) => await new ConfigTests().ConfigImageHash(parameters), + // DEV TOOLS + ["devTools_randomConfig"] = async (parameters) => await new DevToolsTest().DevToolsRandomConfig(parameters), + ["devTools_randomSessionTopology"] = async (parameters) => await new DevToolsTest().DevToolsRandomSessionTopology(parameters), + // SIGNATURE + ["signature_encode"] = async (parameters) => await new SignatureTests().SignatureEncode(parameters), + ["signature_concat"] = async (parameters) => await new SignatureTests().SignatureConcat(parameters), + ["signature_decode"] = async (parameters) => await new SignatureTests().SignatureDecode(parameters), + // SESSIONS + ["session_empty"] = async (parameters) => await new SessionsTest().SessionEmpty(parameters), + ["session_encodeTopology"] = async (parameters) => await new SessionsTest().SessionEncodeTopology(parameters), + ["session_encodeCallSignatures"] = async (parameters) => await new SessionsTest().SessionEncodeCallSignatures(parameters), + ["session_imageHash"] = async (parameters) => await new SessionsTest().SessionImageHash(parameters), + ["session_explicit_add"] = async (parameters) => await new SessionsTest().SessionExplicitAdd(parameters), + ["session_explicit_remove"] = async (parameters) => await new SessionsTest().SessionExplicitRemove(parameters), + ["session_implicit_addBlacklistAddress"] = async (parameters) => await new SessionsTest().SessionImplicitAddBlacklistAddress(parameters), + ["session_implicit_removeBlacklistAddress"] = async (parameters) => await new SessionsTest().SessionImplicitRemoveBlacklistAddress(parameters), }; public async Task HandleSingleRequest( @@ -33,12 +54,7 @@ public async Task HandleSingleRequest( if (!silent) { - Debug.Log($"[{DateTime.UtcNow:O}] Processing request: method={method} id={id}"); - } - - if (debug && !silent) - { - Debug.Log("Request details: " + JsonConvert.SerializeObject(rpcRequest, Formatting.Indented)); + Debug.Log($"Processing request: method={method} id={id} payload={JsonConvert.SerializeObject(rpcRequest, Formatting.Indented)}"); } if (jsonrpc != "2.0") @@ -47,7 +63,7 @@ public async Task HandleSingleRequest( new JsonRpcErrorResponse(new JsonRpcErrorResponse.Error(-32600, "Invalid JSON-RPC version"), id); if (!silent) { - Debug.LogError($"[{DateTime.UtcNow:O}] Error response: {(debug ? JsonConvert.SerializeObject(error) : error.error.message)}"); + Debug.LogError($"Error response: {(debug ? JsonConvert.SerializeObject(error) : error.error.message)}"); } return error; @@ -58,7 +74,7 @@ public async Task HandleSingleRequest( JsonRpcErrorResponse error = new JsonRpcErrorResponse(new JsonRpcErrorResponse.Error(-32601, $"Method not found: {method}"), id); if (!silent) { - Debug.LogError($"[{DateTime.UtcNow:O}] Error response: {(debug ? JsonConvert.SerializeObject(error) : error.error.message)}"); + Debug.LogError($"Error response: {(debug ? JsonConvert.SerializeObject(error) : error.error.message)}"); } return error; } @@ -66,13 +82,6 @@ public async Task HandleSingleRequest( try { Dictionary methodParams; - - if (debug && !silent) - { - Debug.Log($"[{DateTime.UtcNow:O}] Raw params: {JsonConvert.SerializeObject(@params)}"); - } - - // Convert params to JObject for more flexible parsing if needed Newtonsoft.Json.Linq.JObject paramsJObject = null; if (@params is Dictionary paramsDict) { @@ -90,20 +99,11 @@ public async Task HandleSingleRequest( Debug.LogWarning("No method params"); } - if (debug && !silent) - { - Debug.Log($"[{DateTime.UtcNow:O}] Final methodParams: {JsonConvert.SerializeObject(methodParams)}"); - } - var result = await Methods[method](methodParams); JsonRpcSuccessResponse response = new JsonRpcSuccessResponse(result, id); if (!silent) { - Debug.Log($"[{DateTime.UtcNow:O}] Success Response for Method={method} id={id}"); - if (debug) - { - Debug.Log("Response details: " + JsonConvert.SerializeObject(response, Formatting.Indented)); - } + Debug.Log($"Response details for Method={method}: " + JsonConvert.SerializeObject(response, Formatting.Indented) + $", Params used = {JsonConvert.SerializeObject(methodParams)}"); } return response; } @@ -112,7 +112,7 @@ public async Task HandleSingleRequest( JsonRpcErrorResponse error = new JsonRpcErrorResponse(new JsonRpcErrorResponse.Error(-32000, $"Unknown error: {ex.Message}"), id); if (!silent) { - Debug.LogError($"[{DateTime.UtcNow:O}] Error response: {(debug ? JsonConvert.SerializeObject(error) : error.error.message)}"); + Debug.LogError($"Error response: {(debug ? JsonConvert.SerializeObject(error) : error.error.message)} {ex.StackTrace}"); } return error; } diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SessionsTest.cs b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SessionsTest.cs new file mode 100644 index 000000000..82806afaa --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SessionsTest.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Sequence.EcosystemWallet.Primitives; +using Sequence.EcosystemWallet.UnitTests; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.IntegrationTests +{ + public class SessionsTest + { + public Task SessionEmpty(Dictionary parameters) + { + var identitySigner = parameters["identitySigner"].ToString(); + var topology = SessionsUtils.CreateSessionsTopologyWithSingleIdentity(identitySigner); + + return Task.FromResult(topology.JsonSerialize()); + } + + public Task SessionEncodeTopology(Dictionary parameters) + { + var topologyJson = parameters["sessionTopology"].ToString(); + var topology = SessionsTopology.FromJson(topologyJson); + var encoded = topology.Encode().ByteArrayToHexStringWithPrefix(); + + return Task.FromResult(encoded); + } + + public Task SessionEncodeCallSignatures(Dictionary parameters) + { + var sessionTopologyJson = parameters["sessionTopology"].ToString(); + + var signatures = JsonConvert.DeserializeObject(parameters["callSignatures"] + .ToString()).Select(s => SessionCallSignature.FromJson(s.ToString())).ToArray(); + + var explicitSigners = JsonConvert.DeserializeObject(parameters["explicitSigners"] + .ToString()).Select(v => new Address(v)).ToArray(); + + var implicitSigners = JsonConvert.DeserializeObject(parameters["implicitSigners"] + .ToString()).Select(v => new Address(v)).ToArray(); + + var sessionsTopology = SessionsTopology.FromJson(sessionTopologyJson); + var encodedSignatures = SessionCallSignature.EncodeSignatures(signatures, sessionsTopology, explicitSigners, implicitSigners); + + return Task.FromResult(encodedSignatures.ByteArrayToHexStringWithPrefix()); + } + + public Task SessionImageHash(Dictionary parameters) + { + var sessionTopologyJson = parameters["sessionTopology"].ToString(); + var topology = SessionsTopology.FromJson(sessionTopologyJson); + + return Task.FromResult(topology.ImageHash()); + } + + public Task SessionExplicitAdd(Dictionary parameters) + { + var explicitSessionJson = parameters["explicitSession"].ToString(); + var sessionTopologyJson = parameters["sessionTopology"].ToString(); + + var explicitSession = SessionPermissions.FromJson(explicitSessionJson); + var sessionTopology = SessionsTopology.FromJson(sessionTopologyJson); + + var existingPermission = sessionTopology.FindLeaf(leaf => + leaf.permissions.signer.Equals(explicitSession.signer)); + + if (existingPermission != null) + throw new Exception("Session already exists."); + + var newTopology = sessionTopology.AddExplicitSession(explicitSession); + return Task.FromResult(newTopology.JsonSerialize()); + } + + public Task SessionExplicitRemove(Dictionary parameters) + { + var explicitSessionAddress = new Address((string)parameters["explicitSession"]); + var sessionTopology = SessionsTopology.FromJson(parameters["sessionTopology"].ToString()); + var newTopology = sessionTopology.RemoveExplicitSession(explicitSessionAddress); + + return Task.FromResult(newTopology.JsonSerialize()); + } + + public Task SessionImplicitAddBlacklistAddress(Dictionary parameters) + { + var blacklistAddress = new Address((string)parameters["blacklistAddress"]); + var sessionTopologyJson = parameters["sessionTopology"].ToString(); + + var sessionsTopology = SessionsTopology.FromJson(sessionTopologyJson); + sessionsTopology.AddToImplicitBlacklist(blacklistAddress); + + return Task.FromResult(sessionsTopology.JsonSerialize()); + } + + public Task SessionImplicitRemoveBlacklistAddress(Dictionary parameters) + { + var address = new Address((string)parameters["address"]); + var sessionTopology = SessionsTopology.FromJson(parameters["sessionTopology"].ToString()); + sessionTopology.RemoveFromImplicitBlacklist(address); + + return Task.FromResult(sessionTopology.JsonSerialize()); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SessionsTest.cs.meta b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SessionsTest.cs.meta new file mode 100644 index 000000000..bae40abc1 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SessionsTest.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 805675a795e945c3b1312d9c8911b573 +timeCreated: 1751288157 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SignatureTests.cs b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SignatureTests.cs new file mode 100644 index 000000000..c3e1690a8 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SignatureTests.cs @@ -0,0 +1,46 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Newtonsoft.Json; +using Sequence.EcosystemWallet.Primitives; +using Sequence.EcosystemWallet.Utils; +using Sequence.Utils; +using UnityEngine; + +namespace Sequence.EcosystemWallet.IntegrationTests +{ + public class SignatureTests + { + public Task SignatureEncode(Dictionary parameters) + { + var input = parameters["input"].ToString(); + var signatures = parameters["signatures"].ToString(); + var noChainId = !parameters.TryGetValue("chainId", out var chainIdValue) || !(bool)chainIdValue; + var checkpointerData = parameters.TryGetValue("checkpointerData", out var checkpointerDataValue) ? + checkpointerDataValue.ToString().HexStringToByteArray() : null; + + return Task.FromResult(SignatureUtils.EncodeSignatureFromInput(input, signatures, noChainId, checkpointerData)); + } + + public Task SignatureDecode(Dictionary parameters) + { + var encodedSignature = parameters["signature"].ToString().HexStringToByteArray(); + var signature = RawSignature.Decode(encodedSignature); + + return Task.FromResult(signature.ToJson()); + } + + public Task SignatureConcat(Dictionary parameters) + { + var signatures = parameters.GetArray("signatures"); + var decoded = signatures.Select(signature => + RawSignature.Decode(signature.HexStringToByteArray())).ToArray(); + + var parentSignature = decoded[0]; + parentSignature.suffix = decoded.Slice(1); + var encoded = parentSignature.Encode(); + + return Task.FromResult(encoded.ByteArrayToHexStringWithPrefix()); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SignatureTests.cs.meta b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SignatureTests.cs.meta new file mode 100644 index 000000000..3813916d6 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/IntegrationTests/SignatureTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e9f2efd497c548a0938a764d667b4db5 +timeCreated: 1750148218 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/UnitTests/ConfigSignatureTests.cs b/Assets/SequenceSDK/EcosystemWallet/UnitTests/ConfigSignatureTests.cs new file mode 100644 index 000000000..86530efc0 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/UnitTests/ConfigSignatureTests.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using Newtonsoft.Json; +using NUnit.Framework; +using Sequence.EcosystemWallet.IntegrationTests; +using Sequence.EcosystemWallet.Primitives; +using Sequence.EcosystemWallet.Utils; +using Sequence.Utils; +using UnityEngine; + +namespace Sequence.EcosystemWallet.UnitTests +{ + public class ConfigSignatureTests + { + [TestCase("{\"input\":{\"threshold\":\"2\",\"checkpoint\":\"22850\",\"topology\":{\"type\":\"signer\",\"address\":\"0xD461055c456f50E9A3B6A497C5AA8027c0e3884D\",\"weight\":\"2\"},\"checkpointer\":\"0x0000000000000000000000000000000000001bE9\"},\"signatures\":\"0xD461055c456f50E9A3B6A497C5AA8027c0e3884D:hash:0x13a31d1a2ec622361e3285cc7377bb05ad8a7ee7db48551f9d94e5036a1306de:0x1d615daff8918cd9180a9ac57c6dd590beb8d567b4ad8ecc4ca7b05296895916:27\",\"chainId\":true,\"checkpointerData\":\"0x000000000000000000000000000000000000000000000000000000000001a12a\"}")] + public void TestConfigSignature(string json) + { + var parameters = JsonConvert.DeserializeObject>(json); + var input = parameters["input"].ToString(); + var config = Primitives.Config.FromJson(input); + + var signatures = parameters["signatures"].ToString(); + var noChainId = !parameters.TryGetValue("chainId", out var chainIdValue) || !(bool)chainIdValue; + var checkpointerData = parameters.TryGetValue("checkpointerData", out var checkpointerDataValue) ? + checkpointerDataValue.ToString().HexStringToByteArray() : null; + + var encoded = SignatureUtils.EncodeSignatureFromInput(input, signatures, noChainId, checkpointerData); + Debug.Log($"Encoded Signature {encoded}"); + + var encodedSignature = encoded.HexStringToByteArray(); + var decoded = RawSignature.Decode(encodedSignature); + + Debug.Log($"Decoded Signature {JsonConvert.SerializeObject(decoded)}"); + + Assert.AreEqual(config.checkpoint, decoded.configuration.checkpoint); + Assert.AreEqual(config.threshold, decoded.configuration.threshold); + Assert.AreEqual(config.checkpointer, decoded.configuration.checkpointer); + } + + [TestCase("{\"threshold\":\"2\",\"checkpoint\":\"22850\",\"topology\":{\"type\":\"signer\",\"address\":\"0xD461055c456f50E9A3B6A497C5AA8027c0e3884D\",\"weight\":\"2\"},\"checkpointer\":\"0x0000000000000000000000000000000000001bE9\"}")] + public void CreateConfigHashConfiguration(string json) + { + var config = Primitives.Config.FromJson(json); + var imageHash = config.HashConfiguration(); + Debug.Log($"Image Hash for config: {imageHash.ByteArrayToHexStringWithPrefix()}"); + } + + [TestCase("{\"maxDepth\":54,\"seed\":\"3313\",\"minThresholdOnNested\":1,\"skewed\":\"right\"}")] + public void TestRecoverRandomConfig(string json) + { + var parameters = JsonConvert.DeserializeObject>(json); + + var maxDepth = int.Parse(parameters["maxDepth"].ToString()); + var seed = (string)parameters["seed"]; + var minThresholdOnNested = int.Parse(parameters["minThresholdOnNested"].ToString()); + var checkpointer = parameters.TryGetValue("checkpointer", out var checkpointerObj) ? checkpointerObj.ToString() : "no"; + var skewed = parameters.TryGetValue("skewed", out var skewedObj) ? skewedObj.ToString() : "none"; + + var options = new DevTools.RandomOptions + { + seededRandom = string.IsNullOrEmpty(seed) ? null : DevTools.CreateSeededRandom(seed), + checkpointer = checkpointer, + minThresholdOnNested = minThresholdOnNested, + skewed = skewed + }; + + var config = DevTools.CreateRandomConfig(maxDepth, options); + var signature = new RawSignature + { + checkpointerData = null, + configuration = config, + }; + + var encodedSignature = signature.Encode(); + + Debug.Log($"Encoded Signature {encodedSignature.ByteArrayToHexStringWithPrefix()}"); + + var decodedSignature = RawSignature.Decode(encodedSignature); + + Debug.Log($"Decoded Signature: {decodedSignature.ToJson()}"); + + Assert.AreEqual( + encodedSignature.ByteArrayToHexStringWithPrefix(), + decodedSignature.Encode().ByteArrayToHexStringWithPrefix()); + + Assert.AreEqual( + config.HashConfiguration().ByteArrayToHexStringWithPrefix(), + decodedSignature.configuration.HashConfiguration().ByteArrayToHexStringWithPrefix()); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/UnitTests/ConfigSignatureTests.cs.meta b/Assets/SequenceSDK/EcosystemWallet/UnitTests/ConfigSignatureTests.cs.meta new file mode 100644 index 000000000..35e923873 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/UnitTests/ConfigSignatureTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 57253615ecff4d18a7f326e035357da0 +timeCreated: 1751219840 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/UnitTests/SessionsUnitTests.cs b/Assets/SequenceSDK/EcosystemWallet/UnitTests/SessionsUnitTests.cs new file mode 100644 index 000000000..53e5444b4 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/UnitTests/SessionsUnitTests.cs @@ -0,0 +1,113 @@ +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; +using NUnit.Framework; +using Sequence.EcosystemWallet.Primitives; +using Sequence.Utils; +using UnityEngine; + +namespace Sequence.EcosystemWallet.UnitTests +{ + public class SessionsUnitTests + { + [TestCase("0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1")] + public void TestSessionEncoding(string identitySigner) + { + var topology = SessionsUtils.CreateSessionsTopologyWithSingleIdentity(identitySigner); + var encoded = topology.Encode().ByteArrayToHexStringWithPrefix(); + Debug.Log($"Encoded Sessions Topology: {encoded}"); + + Debug.Log($"Sessions Topology: {topology.JsonSerialize()}"); + + var newTopology = SessionsTopology.FromJson(topology.JsonSerialize()); + + Assert.AreEqual(topology.JsonSerialize(), newTopology.JsonSerialize()); + } + + [TestCase("{\"explicitSession\":{\"signer\":\"0x00000000000000000000000000000000000025a8\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},\"sessionTopology\":[{\"type\":\"implicit-blacklist\",\"blacklist\":[]},{\"type\":\"identity-signer\",\"identitySigner\":\"0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1\"}]}")] + public void TestAddExplicitSession(string inputJson) + { + var input = JsonConvert.DeserializeObject>(inputJson); + var explicitSessionJson = input["explicitSession"].ToString(); + var sessionTopologyJson = input["sessionTopology"].ToString(); + + var explicitSession = SessionPermissions.FromJson(explicitSessionJson); + var sessionTopology = SessionsTopology.FromJson(sessionTopologyJson); + + var newTopology = sessionTopology.AddExplicitSession(explicitSession); + Debug.Log($"{newTopology.JsonSerialize()}"); + } + + [TestCase("0x00000000000000000000000000000000000025a8", "[{\"type\":\"implicit-blacklist\",\"blacklist\":[]},[{\"type\":\"identity-signer\",\"identitySigner\":\"0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1\"},{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000025a8\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]]")] + public void RemoveExplicitSession(string address, string inputJson) + { + var sessionTopology = SessionsTopology.FromJson(inputJson); + var newTopology = sessionTopology.RemoveExplicitSession(new Address(address)); + + Debug.Log($"{newTopology.JsonSerialize()}"); + } + + [TestCase("{\"sessionTopology\":[[[[[[[[[[[[[[[[[[[[[{\"type\":\"implicit-blacklist\",\"blacklist\":[]},{\"type\":\"identity-signer\",\"identitySigner\":\"0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1\"}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000025a8\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000009CD\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002AA7\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000026eB\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000001F8C\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000435E\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000026e\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000133b\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002B44\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000004C\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002015\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000000E9\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003Ec4\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000002eF\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003703\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003dEB\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000057Eb\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000000373\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000002be\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000001EA6\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],\"blacklistAddress\":\"0x0000000000000000000000000000000000000269\"}")] + public void AddBlacklistAddress(string inputJson) + { + var input = JsonConvert.DeserializeObject>(inputJson); + var blacklistAddress = new Address((string)input["blacklistAddress"]); + var sessionTopologyJson = input["sessionTopology"].ToString(); + + var sessionsTopology = SessionsTopology.FromJson(sessionTopologyJson); + sessionsTopology.AddToImplicitBlacklist(blacklistAddress); + + Debug.Log($"{sessionsTopology.JsonSerialize()}"); + } + + [TestCase("0x0000000000000000000000000000000000000269", "[[[[[[[[[[[[[[[[[[[[[{\"type\":\"implicit-blacklist\",\"blacklist\":[\"0x0000000000000000000000000000000000000269\"]},{\"type\":\"identity-signer\",\"identitySigner\":\"0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1\"}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000025a8\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000009CD\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002AA7\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000026eB\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000001F8C\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000435E\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000026e\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000133b\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002B44\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000004C\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002015\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000000E9\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003Ec4\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000002eF\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003703\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003dEB\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000057Eb\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000000373\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000002be\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000001EA6\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]")] + public void RemoveBlacklistAddress(string address, string inputJson) + { + var sessionsTopology = SessionsTopology.FromJson(inputJson); + sessionsTopology.RemoveFromImplicitBlacklist(new Address(address)); + + Debug.Log($"{sessionsTopology.JsonSerialize()}"); + + var removed = sessionsTopology.FindLeaf(_ => true).blacklist.Length == 0; + Assert.True(removed); + } + + [TestCase("{\"sessionTopology\":[[[[{\"type\":\"implicit-blacklist\",\"blacklist\":[\"0x0000000000000000000000000000000000000120\",\"0x0000000000000000000000000000000000000269\",\"0x00000000000000000000000000000000000019c7\",\"0x00000000000000000000000000000000000027D6\",\"0x000000000000000000000000000000000000289C\"]},{\"type\":\"identity-signer\",\"identitySigner\":\"0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1\"}],[{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000025a8\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},[{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000009CD\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002AA7\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]]],[[{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000026eB\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},[{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000001F8C\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000435E\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]],[{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000026e\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},[{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000133b\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002B44\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]]]],[[[{\"type\":\"session-permissions\",\"signer\":\"0x000000000000000000000000000000000000004C\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000002015\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}],[{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000000E9\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},[{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003Ec4\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000002eF\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]]],[[{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003703\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},[{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000003dEB\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000057Eb\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]],[{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000000373\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},[{\"type\":\"session-permissions\",\"signer\":\"0x00000000000000000000000000000000000002be\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]},{\"type\":\"session-permissions\",\"signer\":\"0x0000000000000000000000000000000000001EA6\",\"valueLimit\":\"0\",\"deadline\":\"0\",\"permissions\":[]}]]]]],\"callSignatures\":[],\"explicitSigners\":[\"0x00000000000000000000000000000000000025a8\"],\"implicitSigners\":[\"0x9ed233eCAE5E093CAff8Ff8E147DdAfc704EC619\"]}")] + public void EncodeCallSignatures(string inputJson) + { + var input = JsonConvert.DeserializeObject>(inputJson); + var sessionTopologyJson = input["sessionTopology"].ToString(); + + var signatures = JsonConvert.DeserializeObject(input["callSignatures"] + .ToString()).Select(SessionCallSignature.FromJson).ToArray(); + + var explicitSigners = JsonConvert.DeserializeObject(input["explicitSigners"] + .ToString()).Select(v => new Address(v)).ToArray(); + + var implicitSigners = JsonConvert.DeserializeObject(input["implicitSigners"] + .ToString()).Select(v => new Address(v)).ToArray(); + + var sessionsTopology = SessionsTopology.FromJson(sessionTopologyJson); + var encodedSignatures = SessionCallSignature.EncodeSignatures(signatures, sessionsTopology, explicitSigners, implicitSigners); + + Debug.Log($"{encodedSignatures.ByteArrayToHexStringWithPrefix()}"); + } + + [TestCase("{\"sessionTopology\":[[{\"type\":\"implicit-blacklist\",\"blacklist\":[]},{\"type\":\"identity-signer\",\"identitySigner\":\"0x8312fc6754389018bdD3BDfEFf226DD8eD9EcdB1\"}],[{\"type\":\"session-permissions\",\"signer\":\"0x9ed233eCAE5E093CAff8Ff8E147DdAfc704EC619\",\"valueLimit\":\"1000\",\"deadline\":\"2000\",\"permissions\":[{\"target\":\"0x000000000000000000000000000000000000bEEF\",\"rules\":[{\"cumulative\":false,\"operation\":0,\"value\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"offset\":\"0\",\"mask\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}]}]},{\"type\":\"session-permissions\",\"signer\":\"0xe67ee7a9b12041BdE69ef786fa0431d0d4e59239\",\"valueLimit\":\"1000\",\"deadline\":\"2000\",\"permissions\":[{\"target\":\"0x000000000000000000000000000000000000cafE\",\"rules\":[{\"cumulative\":false,\"operation\":0,\"value\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"offset\":\"0\",\"mask\":\"0x0000000000000000000000000000000000000000000000000000000000000000\"}]}]}]]}")] + public void CreateSessionImageHash(string inputJson) + { + var input = JsonConvert.DeserializeObject>(inputJson); + var sessionTopology = SessionsTopology.FromJson(input["sessionTopology"].ToString()); + var imageHash = sessionTopology.ImageHash(); + + Debug.Log($"{imageHash}"); + } + + [TestCase("0x96ce1c47176b2034168210c9f807835d82e7bf8ca8fb08ce54e2cf81af7ad016", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000")] + public void CreateAddress(string imageHash, string factory, string module, string creationCode) + { + var address = AddressFactory.Create(imageHash.HexStringToByteArray(), factory, module, creationCode); + Debug.Log($"Sequence Address: {address}"); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/UnitTests/SessionsUnitTests.cs.meta b/Assets/SequenceSDK/EcosystemWallet/UnitTests/SessionsUnitTests.cs.meta new file mode 100644 index 000000000..dd24de757 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/UnitTests/SessionsUnitTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 21e26cef4dc442d1ba7d10cdb4cb4e90 +timeCreated: 1751302112 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils.meta b/Assets/SequenceSDK/EcosystemWallet/Utils.meta new file mode 100644 index 000000000..7390b3ec1 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9f231ef218604f2bbd211b7963016a43 +timeCreated: 1750151204 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils/DevTools.cs b/Assets/SequenceSDK/EcosystemWallet/Utils/DevTools.cs new file mode 100644 index 000000000..90bc6f329 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils/DevTools.cs @@ -0,0 +1,151 @@ +using System; +using System.Numerics; +using System.Security.Cryptography; +using System.Text; +using Sequence.EcosystemWallet.Primitives; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.IntegrationTests +{ + public static class DevTools + { + public class RandomOptions + { + public Random random = new(); + public Func seededRandom; + public string checkpointer; + public BigInteger minThresholdOnNested; + public BigInteger maxPermissions; + public string skewed; + } + + public static Primitives.Config CreateRandomConfig(int maxDepth, RandomOptions options) + { + return new Primitives.Config + { + threshold = RandomBigInt(100, options), + checkpoint = RandomBigInt(1000, options), + topology = GenerateRandomTopology(maxDepth, options), + checkpointer = options?.checkpointer switch + { + "yes" => RandomAddress(options), + "random" => (options?.seededRandom?.Invoke() ?? options.random.NextDouble()) > 0.5 + ? RandomAddress(options) + : null, + "no" or null => null, + _ => null + } + }; + } + + public static BigInteger RandomBigInt(int max, RandomOptions options) + { + var rnd = options.seededRandom?.Invoke() ?? options.random.NextDouble(); + return new BigInteger((long)(rnd * max)); + } + + public static Address RandomAddress(RandomOptions options) + { + return new Address(RandomHex(20, options)); + } + + public static string RandomHex(int byteLength, RandomOptions options) + { + var bytes = new byte[byteLength]; + options.random.NextBytes(bytes); + return "0x" + BitConverter.ToString(bytes).Replace("-", "").ToLower(); + } + + public static Func CreateSeededRandom(string seed) + { + string currentSeed = seed; + byte[] hash = ComputeSha256(currentSeed); + int index = 0; + + return () => + { + if (index >= hash.Length - 4) + { + currentSeed += "1"; + hash = ComputeSha256(currentSeed); + index = 0; + } + + uint value = BitConverter.ToUInt32(hash, index); + index += 4; + + return value / (double)uint.MaxValue; + }; + } + + public static byte[] ComputeSha256(string input) + { + using var sha = SHA256.Create(); + return sha.ComputeHash(Encoding.UTF8.GetBytes(input)); + } + + public static Topology GenerateRandomTopology(int depth, RandomOptions options) + { + if (depth <= 0) + { + var leafType = (int)Math.Floor((options.seededRandom?.Invoke() ?? options.random.NextDouble()) * 5); + switch (leafType) + { + case 0: + return new Topology(new SignerLeaf + { + address = RandomAddress(options), + weight = RandomBigInt(256, options) + }); + + case 1: + return new Topology(new SapientSignerLeaf + { + address = RandomAddress(options), + weight = RandomBigInt(256, options), + imageHash = RandomHex(32, options) + }); + + case 2: + return new Topology(new SubdigestLeaf + { + digest = RandomHex(32, options).HexStringToByteArray() + }); + + case 3: + return new Topology(new NodeLeaf + { + Value = RandomHex(32, options).HexStringToByteArray() + }); + + case 4: + BigInteger minThreshold = (BigInteger)options?.minThresholdOnNested; + return new Topology(new NestedLeaf + { + tree = GenerateRandomTopology(0, options), + weight = RandomBigInt(256, options), + threshold = minThreshold + RandomBigInt(65535 - (int)minThreshold, options) + }); + } + } + + if (options?.skewed == "left") + { + return new Topology(new Node( + GenerateRandomTopology(0, options), + GenerateRandomTopology(depth - 1, options))); + } + + if (options?.skewed == "right") + { + return new Topology(new Node( + GenerateRandomTopology(depth - 1, options), + GenerateRandomTopology(0, options))); + } + + return new Topology(new Node( + GenerateRandomTopology(depth - 1, options), + GenerateRandomTopology(depth - 1, options))); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils/DevTools.cs.meta b/Assets/SequenceSDK/EcosystemWallet/Utils/DevTools.cs.meta new file mode 100644 index 000000000..5fc6eedf7 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils/DevTools.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 66bb4c6f8a504aa5aaa62b1b3b995d18 +timeCreated: 1751223526 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils/IntegrationTestParamsUtils.cs b/Assets/SequenceSDK/EcosystemWallet/Utils/IntegrationTestParamsUtils.cs new file mode 100644 index 000000000..95cf2c75f --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils/IntegrationTestParamsUtils.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Newtonsoft.Json; + +namespace Sequence.EcosystemWallet.IntegrationTests +{ + public static class IntegrationTestParamsUtils + { + public static T[] GetArray(this Dictionary @params, string key) + { + if (!@params.TryGetValue(key, out var inputObj)) + return null; + + var inputJson = inputObj.ToString(); + return JsonConvert.DeserializeObject(inputJson); + } + + public static Dictionary GetNestedObjects(this Dictionary dict, string key) + { + if (!dict.TryGetValue(key, out var inputObj)) + return null; + + var inputJson = inputObj.ToString(); + return JsonConvert.DeserializeObject>(inputJson); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils/IntegrationTestParamsUtils.cs.meta b/Assets/SequenceSDK/EcosystemWallet/Utils/IntegrationTestParamsUtils.cs.meta new file mode 100644 index 000000000..66d67d292 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils/IntegrationTestParamsUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7010a713448445a18de2c793d2b75624 +timeCreated: 1750151241 \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils/SessionsUtils.cs b/Assets/SequenceSDK/EcosystemWallet/Utils/SessionsUtils.cs new file mode 100644 index 000000000..c5b80f5d4 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils/SessionsUtils.cs @@ -0,0 +1,22 @@ +using System; +using Sequence.EcosystemWallet.Primitives; + +namespace Sequence.EcosystemWallet.UnitTests +{ + public static class SessionsUtils + { + public static SessionsTopology CreateSessionsTopologyWithSingleIdentity(string identitySigner) + { + return new SessionsTopology(new SessionBranch( + new ImplicitBlacklistLeaf + { + blacklist = Array.Empty
() + }.ToTopology(), + new IdentitySignerLeaf + { + identitySigner = new Address(identitySigner) + }.ToTopology()) + ); + } + } +} \ No newline at end of file diff --git a/Assets/SequenceSDK/EcosystemWallet/Utils/SessionsUtils.cs.meta b/Assets/SequenceSDK/EcosystemWallet/Utils/SessionsUtils.cs.meta new file mode 100644 index 000000000..a32b96739 --- /dev/null +++ b/Assets/SequenceSDK/EcosystemWallet/Utils/SessionsUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2a84bde3e0574ac8b3577e2d7806baf3 +timeCreated: 1751302493 \ No newline at end of file diff --git a/Assets/StreamingAssets/UnityServicesProjectConfiguration.json b/Assets/StreamingAssets/UnityServicesProjectConfiguration.json new file mode 100644 index 000000000..34b3a4412 --- /dev/null +++ b/Assets/StreamingAssets/UnityServicesProjectConfiguration.json @@ -0,0 +1 @@ +{"Keys":["com.unity.services.core.version"],"Values":[{"m_Value":"1.4.0","m_IsReadOnly":true}]} \ No newline at end of file diff --git a/Assets/PlayFab/PlayFabEditorExtensions/Editor/Resources/MostRecentPackage.unitypackage.meta b/Assets/StreamingAssets/UnityServicesProjectConfiguration.json.meta similarity index 74% rename from Assets/PlayFab/PlayFabEditorExtensions/Editor/Resources/MostRecentPackage.unitypackage.meta rename to Assets/StreamingAssets/UnityServicesProjectConfiguration.json.meta index c0cdc5250..0a939a75b 100644 --- a/Assets/PlayFab/PlayFabEditorExtensions/Editor/Resources/MostRecentPackage.unitypackage.meta +++ b/Assets/StreamingAssets/UnityServicesProjectConfiguration.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aa66cce13570c4036afe2e85742962d9 +guid: 0c03aa341727243a1b8ec5e362407c52 DefaultImporter: externalObjects: {} userData: diff --git a/Makefile b/Makefile index 30b6c404b..8f27417fb 100644 --- a/Makefile +++ b/Makefile @@ -23,32 +23,32 @@ all: # Testchain # bootstrap: - cd ./testchain && yarn install + cd ./testchain && pnpm install start-testchain: - cd ./testchain && yarn start:hardhat + cd ./testchain && pnpm start:hardhat start-testchain-verbose: - cd ./testchain && yarn start:hardhat:verbose + cd ./testchain && pnpm start:hardhat:verbose start-testchain-geth: - cd ./testchain && yarn start:geth + cd ./testchain && pnpm start:geth start-testchain-geth-verbose: - cd ./testchain && yarn start:geth:verbose + cd ./testchain && pnpm start:geth:verbose check-testchain-running: @curl http://localhost:8545 -H"Content-type: application/json" -X POST -d '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' --write-out '%{http_code}' --silent --output /dev/null | grep 200 > /dev/null \ || { echo "*****"; echo "Oops! testchain is not running. Please run 'make start-testchain' in another terminal or use 'test-concurrently'."; echo "*****"; exit 1; } test-testchain: - cd ./testchain && (yarn start:hardhat & echo $$! > .pid) && yarn test > ../chaintest.out && cd .. && make stop && cat chaintest.out + cd ./testchain && (pnpm start:hardhat & echo $$! > .pid) && pnpm test > ../chaintest.out && cd .. && make stop && cat chaintest.out stop: -pkill -F ./testchain/.pid && rm testchain/.pid test: - rm TestResults*.xml ; cd ./testchain && (yarn start:hardhat & echo $$! > .pid) && cd .. && \ + rm TestResults*.xml ; cd ./testchain && (pnpm start:hardhat & echo $$! > .pid) && cd .. && \ Unity -batchmode -runTests -projectPath "$(pwd)" -testPlatform editmode -testResults TestResults_Edit.xml ; Unity -quit && \ Unity -runTests -projectPath "$(pwd)" -testPlatform playmode -testResults TestResults_Play.xml ; \ make stop && \ @@ -65,7 +65,7 @@ test-ui: head -n 2 TestResults_Play.xml | grep -Eo 'result="[^"]+"|total="[^"]+"|passed="[^"]+"|failed="[^"]+"|inconclusive="[^"]+"|skipped="[^"]+"|start-time="[^"]+"|end-time="[^"]+"|duration="[^"]+"' | grep -Ev 'clr-version=|engine-version=|asserts=|id=|testcasecount=' | sed -E 's/^[^"]+"([^"]+)"[^"]+"([^"]+)".*/\1: \2/' test-sdk: - rm TestResults*.xml ; cd ./testchain && (yarn start:hardhat & echo $$! > .pid) && cd .. && \ + rm TestResults*.xml ; cd ./testchain && (pnpm start:hardhat & echo $$! > .pid) && cd .. && \ Unity -batchmode -runTests -projectPath "$(pwd)" -testPlatform editmode -testResults TestResults_Edit.xml ; Unity -quit && \ make stop && \ echo "Edit mode Test results: " && \ diff --git a/Packages/Sequence-Unity/Plugins/Nethereum/Nethereum.Web3.dll b/Packages/Sequence-Unity/Plugins/Nethereum/Nethereum.Web3.dll new file mode 100644 index 000000000..bfcca1c8a Binary files /dev/null and b/Packages/Sequence-Unity/Plugins/Nethereum/Nethereum.Web3.dll differ diff --git a/Packages/Sequence-Unity/Plugins/Nethereum/Nethereum.Web3.dll.meta b/Packages/Sequence-Unity/Plugins/Nethereum/Nethereum.Web3.dll.meta new file mode 100644 index 000000000..10f49b7e3 --- /dev/null +++ b/Packages/Sequence-Unity/Plugins/Nethereum/Nethereum.Web3.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: ab9e6a33ae25545b0b50a25d4a248225 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope.meta new file mode 100644 index 000000000..85d566e5d --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2a77ab90a77d4051a70f71e43db08c6a +timeCreated: 1750960956 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Envelope.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Envelope.cs new file mode 100644 index 000000000..3096a76ac --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Envelope.cs @@ -0,0 +1,13 @@ +using System.Numerics; +using Sequence.EcosystemWallet.Primitives; + +namespace Sequence.EcosystemWallet.Envelope +{ + public class Envelope where T : Payload + { + public Address wallet; + public BigInteger chainId; + public Primitives.Config configuration; + public T payload; + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Envelope.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Envelope.cs.meta new file mode 100644 index 000000000..78ec18226 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Envelope.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8202126a7b284cfcb863147f89d81a2e +timeCreated: 1750957989 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/EnvelopeSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/EnvelopeSignature.cs new file mode 100644 index 000000000..4f9a49913 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/EnvelopeSignature.cs @@ -0,0 +1,6 @@ +using Sequence.EcosystemWallet.Primitives; + +namespace Sequence.EcosystemWallet.Envelope +{ + public abstract class EnvelopeSignature : SignatureOfLeaf { } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/EnvelopeSignature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/EnvelopeSignature.cs.meta new file mode 100644 index 000000000..866d7aaee --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/EnvelopeSignature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b355f43ce38e4301be7998ccca7f18b6 +timeCreated: 1750961131 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/SapientSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/SapientSignature.cs new file mode 100644 index 000000000..f8b7aa963 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/SapientSignature.cs @@ -0,0 +1,16 @@ +using Sequence.EcosystemWallet.Primitives; + +namespace Sequence.EcosystemWallet.Envelope +{ + public class SapientSignature : EnvelopeSignature + { + public string imageHash; + public SignatureOfSapientSignerLeaf signature; + public override string type { get; } + + public override byte[] Encode(Leaf leaf) + { + throw new System.NotImplementedException("SapientSignature.Encode"); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/SapientSignature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/SapientSignature.cs.meta new file mode 100644 index 000000000..bee377e49 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/SapientSignature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 05dda43067604df1ad96e14a05860507 +timeCreated: 1750961050 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signature.cs new file mode 100644 index 000000000..bd262a0ec --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signature.cs @@ -0,0 +1,16 @@ +using Sequence.EcosystemWallet.Primitives; + +namespace Sequence.EcosystemWallet.Envelope +{ + public class Signature : EnvelopeSignature + { + public Address address; + public SignatureOfSignerLeaf signature; + public override string type { get; } + + public override byte[] Encode(Leaf leaf) + { + throw new System.NotImplementedException("Signature.Encode"); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signature.cs.meta new file mode 100644 index 000000000..0abf4ef51 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f591c3de715a4011a9db1ddbbfb2acc5 +timeCreated: 1750961021 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signed.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signed.cs new file mode 100644 index 000000000..858da00e6 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signed.cs @@ -0,0 +1,9 @@ +using Sequence.EcosystemWallet.Primitives; + +namespace Sequence.EcosystemWallet.Envelope +{ + public class Signed : Envelope where T : Payload + { + public EnvelopeSignature[] signatures; + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signed.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signed.cs.meta new file mode 100644 index 000000000..75f2ca7d1 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Envelope/Signed.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1cc78c760cfa4b91bf73e70ef10c6e48 +timeCreated: 1750958436 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address.meta new file mode 100644 index 000000000..6380783f1 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1bf937add01542f88f4c9e54a59e3c6a +timeCreated: 1751382100 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address/AddressFactory.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address/AddressFactory.cs new file mode 100644 index 000000000..29803cd1c --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address/AddressFactory.cs @@ -0,0 +1,31 @@ +using Sequence.ABI; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public static class AddressFactory + { + public static Address Create(Topology topology, string factory, string module, string creationCode = null) + { + return Create(topology.HashConfiguration(), factory, module, creationCode); + } + + public static Address Create(byte[] imageHash, string factory, string module, string creationCode = null) + { + return new Address( + SequenceCoder.KeccakHash( + ByteArrayExtensions.ConcatenateByteArrays("0xff".HexStringToByteArray(), + factory.HexStringToByteArray(), + imageHash, + SequenceCoder.KeccakHash( + ByteArrayExtensions.ConcatenateByteArrays( + creationCode.HexStringToByteArray(), + module.HexStringToByteArray(32)) + ) + ) + ) + .SubArray(12) + ); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address/AddressFactory.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address/AddressFactory.cs.meta new file mode 100644 index 000000000..1fa1ca6cf --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Address/AddressFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8139d1c21f4a4fefbaa8ebea081158fb +timeCreated: 1751382106 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/Attestation.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/Attestation.cs index 73c634b58..b792ade41 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/Attestation.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/Attestation.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Numerics; using Newtonsoft.Json; using Sequence.ABI; using Sequence.Utils; @@ -6,7 +8,7 @@ namespace Sequence.EcosystemWallet.Primitives { - internal class Attestation + public class Attestation { public static readonly byte[] ACCEPT_IMPLICIT_REQUEST_MAGIC_PREFIX = SequenceCoder.KeccakHash("acceptImplicitRequest".ToByteArray()); @@ -18,19 +20,6 @@ internal class Attestation public byte[] applicationData; public AuthData authData; - public Attestation(Address approvedSigner, FixedByte identityType, FixedByte issuerHash, FixedByte audienceHash, byte[] applicationData, AuthData authData) - { - this.approvedSigner = approvedSigner; - AssertHasSize(identityType, 4, nameof(identityType)); - this.identityType = identityType; - AssertHasSize(issuerHash, 32, nameof(issuerHash)); - this.issuerHash = issuerHash; - AssertHasSize(audienceHash, 32, nameof(audienceHash)); - this.audienceHash = audienceHash; - this.applicationData = applicationData; - this.authData = authData; - } - private void AssertHasSize(FixedByte obj, int size, string argumentName) { if (obj.Count != size) @@ -48,6 +37,7 @@ public byte[] Encode() byte[] issuerHashBytes = issuerHash.Data.PadLeft(32); byte[] audienceHashBytes = audienceHash.Data.PadLeft(32); byte[] applicationDataLengthBytes = applicationData.Length.ByteArrayFromNumber(3); + return ByteArrayExtensions.ConcatenateByteArrays(approvedSignerBytes, identityTypeBytes, issuerHashBytes, audienceHashBytes, applicationDataLengthBytes, applicationData, authDataBytes); } @@ -58,26 +48,35 @@ public byte[] Hash() return SequenceCoder.KeccakHash(encoded); } - public string ToJson() // Todo make this a JsonConverter + public object ToJson() { - JsonAttestation jsonAble = new JsonAttestation(this); - return JsonConvert.ToString(jsonAble); - } - - public Attestation(JsonAttestation jsonAble) - { - this.approvedSigner = jsonAble.approvedSigner; - this.identityType = new FixedByte(4, jsonAble.identityType.HexStringToByteArray()); - this.issuerHash = new FixedByte(32, jsonAble.issuerHash.HexStringToByteArray()); - this.audienceHash = new FixedByte(32, jsonAble.audienceHash.HexStringToByteArray()); - this.applicationData = jsonAble.applicationData.HexStringToByteArray(); - this.authData = jsonAble.authData; + return new + { + approvedSigner = approvedSigner.Value, + identityType = identityType.Data.ByteArrayToHexStringWithPrefix(), + issuerHash = issuerHash.Data.ByteArrayToHexStringWithPrefix(), + audienceHash = audienceHash.Data.ByteArrayToHexStringWithPrefix(), + applicationData = applicationData.ByteArrayToHexStringWithPrefix(), + authData = new + { + redirectUrl = authData.redirectUrl, + issuedAt = authData.issuedAt.ToString() + } + }; } - public Attestation FromJson(string json) // Todo make this a JsonConverter + public static Attestation FromJson(string json) { - JsonAttestation jsonAble = JsonConvert.DeserializeObject(json); - return new Attestation(jsonAble); + var jsonAble = JsonConvert.DeserializeObject(json); + return new Attestation + { + approvedSigner = jsonAble.approvedSigner, + identityType = new FixedByte(4, jsonAble.identityType.HexStringToByteArray()), + issuerHash = new FixedByte(32, jsonAble.issuerHash.HexStringToByteArray()), + audienceHash = new FixedByte(32, jsonAble.audienceHash.HexStringToByteArray()), + applicationData = jsonAble.applicationData.HexStringToByteArray(), + authData = new AuthData(jsonAble.authData.redirectUrl, BigInteger.Parse(jsonAble.authData.issuedAt)) + }; } public byte[] GenerateImplicitRequestMagic(Address wallet) @@ -88,18 +87,18 @@ public byte[] GenerateImplicitRequestMagic(Address wallet) } [Serializable] - internal class JsonAttestation + public class JsonAttestation { public Address approvedSigner; public string identityType; public string issuerHash; public string audienceHash; public string applicationData; - public AuthData authData; + public JsonAuthData authData; [JsonConstructor] [Preserve] - public JsonAttestation(Address approvedSigner, string identityType, string issuerHash, string audienceHash, string applicationData, AuthData authData) + public JsonAttestation(Address approvedSigner, string identityType, string issuerHash, string audienceHash, string applicationData, JsonAuthData authData) { this.approvedSigner = approvedSigner; this.identityType = identityType; @@ -116,7 +115,19 @@ public JsonAttestation(Attestation attestation) this.issuerHash = attestation.issuerHash.Data.ByteArrayToHexStringWithPrefix(); this.audienceHash = attestation.audienceHash.Data.ByteArrayToHexStringWithPrefix(); this.applicationData = attestation.applicationData.ByteArrayToHexStringWithPrefix(); - this.authData = attestation.authData; + this.authData = new JsonAuthData(attestation.authData.redirectUrl, attestation.authData.issuedAt.ToString()); + } + } + + public class JsonAuthData + { + public string redirectUrl; + public string issuedAt; + + public JsonAuthData(string redirectUrl, string issuedAt) + { + this.redirectUrl = redirectUrl; + this.issuedAt = issuedAt; } } } diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/AuthData.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/AuthData.cs index ca5e144d7..0f3ba2d98 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/AuthData.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Attestation/AuthData.cs @@ -1,25 +1,28 @@ using System; +using System.Numerics; using Sequence.Utils; using UnityEngine.Scripting; namespace Sequence.EcosystemWallet.Primitives { [Serializable] - internal class AuthData + public class AuthData { public string redirectUrl; + public BigInteger issuedAt; [Preserve] - public AuthData(string redirectUrl) + public AuthData(string redirectUrl, BigInteger issuedAt) { this.redirectUrl = redirectUrl; + this.issuedAt = issuedAt; } public byte[] Encode() { byte[] redirectUrlLength = ByteArrayExtensions.ByteArrayFromNumber(redirectUrl.Length, 3); byte[] redirectUrlBytes = redirectUrl.ToByteArray(); - return ByteArrayExtensions.ConcatenateByteArrays(redirectUrlLength, redirectUrlBytes); + return ByteArrayExtensions.ConcatenateByteArrays(redirectUrlLength, redirectUrlBytes, issuedAt.ByteArrayFromNumber(8)); } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/AnyAddressSubdigestLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/AnyAddressSubdigestLeaf.cs index 586934f26..fd88c3269 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/AnyAddressSubdigestLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/AnyAddressSubdigestLeaf.cs @@ -1,8 +1,32 @@ +using System.Text; +using Sequence.ABI; +using Sequence.Utils; + namespace Sequence.EcosystemWallet.Primitives { - internal class AnyAddressSubdigestLeaf : Leaf + public class AnyAddressSubdigestLeaf : Leaf { - public const string type = "any-address-subdigest"; public byte[] digest; + + public override object Parse() + { + return new + { + type = AnyAddressSubdigest, + digest = digest.ByteArrayToHexStringWithPrefix() + }; + } + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + var flag = Topology.FlagSignatureAnyAddressSubdigest << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), digest); + } + + public override byte[] HashConfiguration() + { + byte[] prefix = Encoding.UTF8.GetBytes("Sequence any address subdigest:\n"); + return SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(prefix, digest)); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Config.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Config.cs index 6ed9305f8..fdc0d1c69 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Config.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Config.cs @@ -1,12 +1,75 @@ +using System.Collections.Generic; using System.Numerics; +using Newtonsoft.Json; +using Sequence.ABI; +using Sequence.Utils; +using UnityEngine; namespace Sequence.EcosystemWallet.Primitives { - internal class Config + public class Config { public BigInteger threshold; public BigInteger checkpoint; public Topology topology; public Address checkpointer; + + public Leaf FindSignerLeaf(Address address) + { + return topology?.FindSignerLeaf(address); + } + + public byte[] HashConfiguration() + { + if (topology == null) + return null; + + byte[] root = topology.HashConfiguration(); + + byte[] thresholdBytes = threshold.ByteArrayFromNumber(threshold.MinBytesFor()).PadLeft(32); + root = SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(root, thresholdBytes)); + + byte[] checkpointBytes = checkpoint.ByteArrayFromNumber(checkpoint.MinBytesFor()).PadLeft(32); + root = SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(root, checkpointBytes)); + + string checkpointerAddress = checkpointer?.Value ?? "0x0000000000000000000000000000000000000000"; + byte[] checkpointerBytes = checkpointerAddress.HexStringToByteArray().PadLeft(32); + root = SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(root, checkpointerBytes)); + + return root; + } + + public string ToJson() + { + var jsonObject = new + { + threshold = threshold.ToString(), + checkpoint = checkpoint.ToString(), + topology = topology?.Parse(), + checkpointer = checkpointer?.Value + }; + + return JsonConvert.SerializeObject(jsonObject); + } + + public static Config FromJson(string json) + { + var input = JsonConvert.DeserializeObject>(json); + + var threshold = input["threshold"].ToString(); + var checkpoint = input["checkpoint"].ToString(); + var topology = input["topology"].ToString(); + + var checkpointer = input.TryGetValue("checkpointer", out var value) && + value is string valueStr ? new Address(valueStr) : null; + + return new Config + { + threshold = BigInteger.Parse(threshold), + checkpoint = BigInteger.Parse(checkpoint), + checkpointer = checkpointer, + topology = Topology.Decode(topology) + }; + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Leaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Leaf.cs index 2cdef16c2..ba75baf19 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Leaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Leaf.cs @@ -1,7 +1,23 @@ namespace Sequence.EcosystemWallet.Primitives { - internal abstract class Leaf : RawLeaf + public abstract class Leaf { + public const string Signer = "signer"; + public const string Subdigest = "subdigest"; + public const string AnyAddressSubdigest = "any-address-subdigest"; + public const string Sapient = "sapient"; + public const string SapientSigner = "sapient-signer"; + public const string Nested = "nested"; + public const string UnrecoveredSigner = "unrecovered-signer"; + public const string Node = "node"; + public abstract object Parse(); + public abstract byte[] Encode(bool noChainId, byte[] checkpointerData); + public abstract byte[] HashConfiguration(); + + public Topology ToTopology() + { + return new Topology(this); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NestedLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NestedLeaf.cs index e950dde54..a177d9b31 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NestedLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NestedLeaf.cs @@ -1,12 +1,69 @@ +using System; +using System.Linq; using System.Numerics; +using System.Text; +using Sequence.ABI; +using Sequence.Utils; namespace Sequence.EcosystemWallet.Primitives { - internal class NestedLeaf : Leaf + public class NestedLeaf : Leaf { - public const string type = "nested"; public Topology tree; public BigInteger weight; public BigInteger threshold; + + public override object Parse() + { + return new + { + type = Nested, + tree = tree.Parse(), + weight = weight.ToString(), + threshold = threshold.ToString() + }; + } + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + var nested = tree.Encode(noChainId, checkpointerData); + int flag = Topology.FlagNested << 4; + + var weightBytes = new byte[0]; + if (weight <= 3 && weight > 0) + flag |= (int)weight << 2; + else if (weight <= 255) + weightBytes = weight.ByteArrayFromNumber(weight.MinBytesFor()); + else + throw new Exception("Weight too large"); + + var thresholdBytes = new byte[0]; + if (threshold <= 3 && threshold > 0) + flag |= (int)threshold; + else if (threshold <= 65535) + thresholdBytes = threshold.ByteArrayFromNumber(threshold.MinBytesFor()).PadLeft(2); + else + throw new Exception("Threshold too large"); + + if (nested.Length > 0xFFFFFF) + throw new Exception("Nested tree too large"); + + return ByteArrayExtensions.ConcatenateByteArrays( + flag.ByteArrayFromNumber(flag.MinBytesFor()), + weightBytes, + thresholdBytes, + nested.Length.ByteArrayFromNumber(nested.Length.MinBytesFor()).PadLeft(3), + nested); + } + + public override byte[] HashConfiguration() + { + byte[] prefix = Encoding.UTF8.GetBytes("Sequence nested config:\n"); + byte[] treeHash = tree.HashConfiguration(); + byte[] threshold = this.threshold.ByteArrayFromNumber(32); + byte[] weight = this.weight.ByteArrayFromNumber(32); + + return SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(prefix, treeHash, threshold, weight)); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Node.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Node.cs index 698d9c2c0..a2305bcfc 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Node.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Node.cs @@ -1,8 +1,14 @@ namespace Sequence.EcosystemWallet.Primitives { - internal class Node + public class Node { public Topology left; public Topology right; + + public Node(Topology left, Topology right) + { + this.left = left; + this.right = right; + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NodeLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NodeLeaf.cs index c45b73dd9..5bd625744 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NodeLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/NodeLeaf.cs @@ -1,6 +1,8 @@ +using Sequence.Utils; + namespace Sequence.EcosystemWallet.Primitives { - internal class NodeLeaf : Leaf + public class NodeLeaf : Leaf { public byte[] Value; @@ -8,5 +10,23 @@ public static implicit operator byte[](NodeLeaf leaf) { return leaf.Value; } + + public override object Parse() + { + return Value.ByteArrayToHexStringWithPrefix(); + } + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + var flag = Topology.FlagNode << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), Value); + } + + // In the JS code, this just returns the topology itself, but in C# we need to return bytes + // Since NodeLeaf doesn't have any properties to hash, we'll return a byte array + public override byte[] HashConfiguration() + { + return Value; + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSigner.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSigner.cs new file mode 100644 index 000000000..ba4a700d7 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSigner.cs @@ -0,0 +1,8 @@ +namespace Sequence.EcosystemWallet.Primitives +{ + public class SapientSigner + { + public Address address; + public string imageHash; + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSigner.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSigner.cs.meta new file mode 100644 index 000000000..e3a8d21f3 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSigner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 46460864f16b498083767fddd18e64d9 +timeCreated: 1749748371 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSignerLeaf.cs index 6e743de4e..4c3aec846 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSignerLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SapientSignerLeaf.cs @@ -1,14 +1,41 @@ using System.Numerics; +using System.Text; +using Sequence.ABI; +using Sequence.Utils; namespace Sequence.EcosystemWallet.Primitives { - internal class SapientSignerLeaf : Leaf + public class SapientSignerLeaf : Leaf { - public const string type = "sapient-signer"; public Address address; public BigInteger weight; public string imageHash; - public bool signed; - public SignatureOfSapientSignerLeaf signature; + + public override object Parse() + { + return new + { + type = SapientSigner, + address = address, + weight = weight.ToString(), + imageHash = imageHash + }; + } + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + var flag = Topology.FlagNode << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), HashConfiguration()); + } + + public override byte[] HashConfiguration() + { + byte[] prefix = Encoding.UTF8.GetBytes("Sequence sapient config:\n"); + byte[] address = this.address.Value.HexStringToByteArray(); + byte[] weight = this.weight.ByteArrayFromNumber(this.weight.MinBytesFor()).PadLeft(32); + byte[] imageHash = this.imageHash.HexStringToByteArray().PadLeft(32); + + return SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(prefix, address, weight, imageHash)); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Signer.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Signer.cs new file mode 100644 index 000000000..4620c4b44 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Signer.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Numerics; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class Signer + { + public Address[] signers; + public SapientSigner[] sapientSigners; + public bool isComplete; + + public static Signer[] GetSigners(Config configuration) + { + if (configuration == null || configuration.topology == null) + { + return null; + } + + return GetSigners(configuration.topology); + } + + public static Signer[] GetSigners(Topology topology) + { + if (topology == null) + { + return null; + } + + var signers = new List
(); + var sapientSigners = new List(); + bool isComplete = true; + + void Scan(Topology top) + { + if (top.IsNode()) + { + Scan(top.Node.left); + Scan(top.Node.right); + } + else if (top.IsLeaf()) + { + if (top.Leaf is SignerLeaf signerLeaf) + { + if (signerLeaf.weight > 0) + { + signers.Add(signerLeaf.address); + } + } + else if (top.Leaf is SapientSignerLeaf sapientSignerLeaf) + { + sapientSigners.Add(new SapientSigner + { + address = sapientSignerLeaf.address, + imageHash = sapientSignerLeaf.imageHash + }); + } + else if (top.Leaf is NodeLeaf) + { + isComplete = false; + } + else if (top.Leaf is NestedLeaf nestedLeaf) + { + if (nestedLeaf.weight > 0) + { + Scan(nestedLeaf.tree); + } + } + } + } + + Scan(topology); + + return new Signer[] + { + new Signer + { + signers = signers.ToArray(), + sapientSigners = sapientSigners.ToArray(), + isComplete = isComplete + } + }; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Signer.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Signer.cs.meta new file mode 100644 index 000000000..294f2f97d --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Signer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ee645338ed2746a3834fefbeaae5e833 +timeCreated: 1749748321 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SignerLeaf.cs index 5395e7057..f9a8b0f2f 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SignerLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SignerLeaf.cs @@ -1,13 +1,50 @@ +using System; using System.Numerics; +using System.Text; +using Sequence.ABI; +using Sequence.Utils; +using UnityEngine; namespace Sequence.EcosystemWallet.Primitives { - internal class SignerLeaf : Leaf + public class SignerLeaf : Leaf { - public const string type = "signer"; public Address address; public BigInteger weight; - public bool signed; - public SignatureOfSignerLeaf signature; + + public override object Parse() + { + return new + { + type = Signer, + address = address, + weight = weight.ToString() + }; + } + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + var flag = Topology.FlagAddress << 4; + var weightBytes = Array.Empty(); + + if (weight > 0 && weight <= 15) + flag |= (int)weight; + else if (weight <= 255) + weightBytes = weight.ByteArrayFromNumber(flag.MinBytesFor()); + else + throw new ArgumentException("Weight too large"); + + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), weightBytes, + address.Value.HexStringToByteArray().PadLeft(20)); + } + + public override byte[] HashConfiguration() + { + byte[] prefix = Encoding.UTF8.GetBytes("Sequence signer:\n"); + byte[] address = this.address.Value.HexStringToByteArray(); + byte[] weight = this.weight.ByteArrayFromNumber(this.weight.MinBytesFor()).PadLeft(32); + + return SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(prefix, address, weight)); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SubdigestLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SubdigestLeaf.cs index 6e68af81f..b28096a9e 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SubdigestLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/SubdigestLeaf.cs @@ -1,8 +1,32 @@ +using System.Text; +using Sequence.ABI; +using Sequence.Utils; + namespace Sequence.EcosystemWallet.Primitives { - internal class SubdigestLeaf : Leaf + public class SubdigestLeaf : Leaf { - public const string type = "subdigest"; public byte[] digest; + + public override object Parse() + { + return new + { + type = Subdigest, + digest = digest.ByteArrayToHexStringWithPrefix() + }; + } + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + var flag = Topology.FlagSubdigest << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), digest); + } + + public override byte[] HashConfiguration() + { + byte[] prefix = Encoding.UTF8.GetBytes("Sequence static digest:\n"); + return SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(prefix, digest)); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Topology.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Topology.cs index cd1f3b484..cfc0287ff 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Topology.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Topology.cs @@ -1,7 +1,27 @@ +using System; +using System.Numerics; +using System.Collections.Generic; +using Newtonsoft.Json; +using Sequence.ABI; +using Sequence.Utils; +using UnityEngine; + namespace Sequence.EcosystemWallet.Primitives { - internal class Topology + public class Topology { + public const int FlagSignatureHash = 0; + public const int FlagAddress = 1; + public const int FlagSignatureErc1271 = 2; + public const int FlagNode = 3; + public const int FlagBranch = 4; + public const int FlagSubdigest = 5; + public const int FlagNested = 6; + public const int FlagSignatureEthSign = 7; + public const int FlagSignatureAnyAddressSubdigest = 8; + public const int FlagSignatureSapient = 9; + public const int FlagSignatureSapientCompact = 10; + public Node Node; public Leaf Leaf; @@ -15,6 +35,29 @@ public Topology(Node node) this.Node = node; } + public static Topology FromLeaves(List leaves) + { + if (leaves == null || leaves.Count == 0) + throw new ArgumentException("Cannot create topology from empty leaves"); + + if (leaves.Count == 1) + return leaves[0].ToTopology(); + + if (leaves.Count == 2) + { + return new Topology(new Node( + leaves[0].ToTopology(), + leaves[1].ToTopology() + )); + } + + int midPoint = leaves.Count / 2; + return new Topology(new Node( + FromLeaves(leaves.GetRange(0, midPoint)), + FromLeaves(leaves.GetRange(midPoint, leaves.Count - midPoint)) + )); + } + public bool IsLeaf() { return this.Leaf != null; @@ -24,5 +67,264 @@ public bool IsNode() { return this.Node != null; } + + public Leaf FindSignerLeaf(Address address) + { + if (IsNode()) + { + Leaf leftResult = Node.left.FindSignerLeaf(address); + if (leftResult != null) + { + return leftResult; + } + return Node.right.FindSignerLeaf(address); + } + + if (IsLeaf()) + { + if (Leaf is SignerLeaf signerLeaf) + { + if (signerLeaf.address.Equals(address)) + { + return signerLeaf; + } + } + else if (Leaf is SapientSignerLeaf sapientSignerLeaf) + { + if (sapientSignerLeaf.address.Equals(address)) + { + return sapientSignerLeaf; + } + } + } + + return null; + } + + public object Parse() + { + if (IsNode()) + { + return new object[] + { + Node.left.Parse(), + Node.right.Parse() + }; + } + + return Leaf.Parse(); + } + + public static Topology Decode(string input) + { + if (input.StartsWith("[")) + { + var list = JsonConvert.DeserializeObject>(input); + if (list.Count != 2) + { + throw new Exception("Invalid node structure in JSON"); + } + + return new Topology(new Node(Decode(list[0].ToString()), Decode(list[1].ToString()))); + } + + if (input.StartsWith("0x")) + { + return new NodeLeaf + { + Value = input.HexStringToByteArray() + }.ToTopology(); + } + + var data = JsonConvert.DeserializeObject>(input); + string type = (string)data["type"]; + + switch (type) + { + case Leaf.Signer: + return new SignerLeaf + { + address = new Address((string)data["address"]), + weight = BigInteger.Parse((string)data["weight"]) + }.ToTopology(); + case Leaf.SapientSigner: + return new SapientSignerLeaf + { + address = new Address((string)data["address"]), + weight = BigInteger.Parse((string)data["weight"]), + imageHash = (string)data["imageHash"] + }.ToTopology(); + case Leaf.Subdigest: + return new SubdigestLeaf + { + digest = ((string)data["digest"]).HexStringToByteArray() + }.ToTopology(); + case Leaf.AnyAddressSubdigest: + return new AnyAddressSubdigestLeaf + { + digest = ((string)data["digest"]).HexStringToByteArray() + }.ToTopology(); + case Leaf.Nested: + return new NestedLeaf + { + tree = Decode(data["tree"].ToString()), + weight = BigInteger.Parse((string)data["weight"]), + threshold = BigInteger.Parse((string)data["threshold"]) + }.ToTopology(); + default: + throw new Exception($"Invalid type {type} in topology JSON"); + } + } + + public byte[] HashConfiguration() + { + if (IsNode()) + { + byte[] leftHash = Node.left.HashConfiguration(); + byte[] rightHash = Node.right.HashConfiguration(); + return SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(leftHash, rightHash)); + } + + return Leaf.HashConfiguration(); + } + + public byte[] Encode(bool noChainId = true, byte[] checkpointerData = null) + { + if (IsNode()) + { + var encoded0 = Node.left.Encode(noChainId, checkpointerData); + var encoded1 = Node.right.Encode(noChainId, checkpointerData); + + var isBranching = Node.right.IsNode(); + if (!isBranching) + return ByteArrayExtensions.ConcatenateByteArrays(encoded0, encoded1); + + var encoded1Size = encoded1.Length.MinBytesFor(); + if (encoded1Size > 15) + throw new Exception("Branch too large"); + + var flag = (FlagBranch << 4) | encoded1Size; + + return ByteArrayExtensions.ConcatenateByteArrays(encoded0, + flag.ByteArrayFromNumber(flag.MinBytesFor()), + encoded1.Length.ByteArrayFromNumber(encoded1Size) + .PadLeft(encoded1Size), + encoded1); + } + + return Leaf.Encode(noChainId, checkpointerData); + } + + public static List ParseContentToLeafs(string elements) + { + var leaves = new List(); + + while (!string.IsNullOrWhiteSpace(elements)) + { + string firstElement = elements.Split(' ')[0]; + string firstElementType = firstElement.Split(':')[0]; + + if (firstElementType == Leaf.Signer) + { + var parts = firstElement.Split(':'); + string address = parts[1]; + BigInteger weight = BigInteger.Parse(parts[2]); + + leaves.Add(new SignerLeaf + { + address = new Address(address), + weight = weight + }); + + elements = elements.Substring(firstElement.Length).TrimStart(); + } + else if (firstElementType == Leaf.Subdigest) + { + var parts = firstElement.Split(':'); + string digest = parts[1]; + + leaves.Add(new SubdigestLeaf + { + digest = digest.HexStringToByteArray() + }); + + elements = elements.Substring(firstElement.Length).TrimStart(); + } + else if (firstElementType == Leaf.AnyAddressSubdigest) + { + var parts = firstElement.Split(':'); + string digest = parts[1]; + + leaves.Add(new AnyAddressSubdigestLeaf + { + digest = digest.HexStringToByteArray() + }); + + elements = elements.Substring(firstElement.Length).TrimStart(); + } + else if (firstElementType == Leaf.Sapient) + { + var parts = firstElement.Split(':'); + string imageHash = parts[1]; + string address = parts[2]; + BigInteger weight = BigInteger.Parse(parts[3]); + + if (!imageHash.StartsWith("0x") || imageHash.Length != 66) + throw new Exception($"Invalid image hash: {imageHash}"); + + leaves.Add(new SapientSignerLeaf + { + imageHash = imageHash, + address = new Address(address), + weight = weight + }); + + elements = elements.Substring(firstElement.Length).TrimStart(); + } + else if (firstElementType == Leaf.Nested) + { + var parts = firstElement.Split(':'); + BigInteger threshold = BigInteger.Parse(parts[1]); + BigInteger weight = BigInteger.Parse(parts[2]); + + int start = elements.IndexOf('('); + int end = elements.IndexOf(')'); + if (start == -1 || end == -1) + throw new Exception($"Missing ( ) for nested element: {elements}"); + + string inner = elements.Substring(start + 1, end - start - 1); + + leaves.Add(new NestedLeaf + { + threshold = threshold, + weight = weight, + tree = Topology.FromLeaves(ParseContentToLeafs(inner)) + }); + + elements = elements.Substring(end + 1).TrimStart(); + } + else if (firstElementType == Leaf.Node) + { + var parts = firstElement.Split(':'); + string hash = parts[1]; + + leaves.Add(new NodeLeaf + { + Value = hash.HexStringToByteArray() + }); + + elements = elements.Substring(firstElement.Length).TrimStart(); + } + else + { + throw new Exception($"Invalid element: {firstElement}"); + } + } + + if (leaves.Count == 0) + Debug.LogError($"Topology.FromLeaves resulted in an empty list of leafs: {elements}"); + + return leaves; + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/WeightCalculator.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/WeightCalculator.cs new file mode 100644 index 000000000..655efe16e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/WeightCalculator.cs @@ -0,0 +1,87 @@ +using System; +using System.Numerics; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class WeightCalculator + { + public struct WeightResult + { + public BigInteger weight; + public BigInteger maxWeight; + } + + public static WeightResult GetWeight(Topology topology, Func canSign) + { + if (topology == null) + { + return new WeightResult { weight = 0, maxWeight = 0 }; + } + + if (topology.IsNode()) + { + var left = GetWeight(topology.Node.left, canSign); + var right = GetWeight(topology.Node.right, canSign); + return new WeightResult + { + weight = left.weight + right.weight, + maxWeight = left.maxWeight + right.maxWeight + }; + } + else if (topology.IsLeaf()) + { + return GetWeightForLeaf(topology.Leaf, canSign); + } + + return new WeightResult { weight = 0, maxWeight = 0 }; + } + + public static WeightResult GetWeight(Config configuration, Func canSign) + { + if (configuration?.topology == null) + { + return new WeightResult { weight = 0, maxWeight = 0 }; + } + + return GetWeight(configuration.topology, canSign); + } + + private static WeightResult GetWeightForLeaf(Leaf leaf, Func canSign) + { + // Handle signed leaves (they have weight) + if (leaf is SignedSignerLeaf signedSigner) + { + return new WeightResult { weight = signedSigner.weight, maxWeight = signedSigner.weight }; + } + else if (leaf is SignedSapientSignerLeaf signedSapient) + { + return new WeightResult { weight = signedSapient.weight, maxWeight = signedSapient.weight }; + } + // Handle unsigned leaves that can potentially be signed + else if (leaf is SignerLeaf signer) + { + BigInteger maxWeight = canSign(signer) ? signer.weight : 0; + return new WeightResult { weight = 0, maxWeight = maxWeight }; + } + else if (leaf is SapientSignerLeaf sapient) + { + BigInteger maxWeight = canSign(sapient) ? sapient.weight : 0; + return new WeightResult { weight = 0, maxWeight = maxWeight }; + } + // Handle other leaf types + else if (leaf is SubdigestLeaf || leaf is AnyAddressSubdigestLeaf || leaf is NodeLeaf) + { + return new WeightResult { weight = 0, maxWeight = 0 }; + } + else if (leaf is NestedLeaf rawNested) + { + var result = GetWeight(rawNested.tree, canSign); + BigInteger weight = result.weight >= rawNested.threshold ? rawNested.weight : 0; + BigInteger maxWeight = result.maxWeight >= rawNested.threshold ? rawNested.weight : 0; + return new WeightResult { weight = weight, maxWeight = maxWeight }; + } + + return new WeightResult { weight = 0, maxWeight = 0 }; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/WeightCalculator.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/WeightCalculator.cs.meta new file mode 100644 index 000000000..08dda4bd7 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/WeightCalculator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed7f1a79a8a9f41b696860cf81826754 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Weigth.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Weigth.cs new file mode 100644 index 000000000..a203fd60e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Weigth.cs @@ -0,0 +1,82 @@ +using System; +using System.Numerics; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class Weigth + { + public BigInteger weight; + public BigInteger maxWeight; + + public static Weigth GetWeight(Topology topology, Func canSign) + { + if (topology == null) + { + return new Weigth { weight = 0, maxWeight = 0 }; + } + + if (topology.IsNode()) + { + var left = GetWeight(topology.Node.left, canSign); + var right = GetWeight(topology.Node.right, canSign); + return new Weigth + { + weight = left.weight + right.weight, + maxWeight = left.maxWeight + right.maxWeight + }; + } + else if (topology.IsLeaf()) + { + return GetWeightForLeaf(topology.Leaf, canSign); + } + + return new Weigth { weight = 0, maxWeight = 0 }; + } + + public static Weigth GetWeight(Config configuration, Func canSign) + { + if (configuration?.topology == null) + { + return new Weigth { weight = 0, maxWeight = 0 }; + } + + return GetWeight(configuration.topology, canSign); + } + + // Todo once tests are passing refactor to get the weight on the leafs directly, we can create an abstract method and overwrite it + private static Weigth GetWeightForLeaf(Leaf leaf, Func canSign) + { + if (leaf is SignedSignerLeaf signedSigner) + { + return new Weigth { weight = signedSigner.weight, maxWeight = signedSigner.weight }; + } + if (leaf is SignedSapientSignerLeaf signedSapient) + { + return new Weigth { weight = signedSapient.weight, maxWeight = signedSapient.weight }; + } + if (leaf is SignerLeaf signer) + { + BigInteger maxWeight = canSign(signer) ? signer.weight : 0; + return new Weigth { weight = 0, maxWeight = maxWeight }; + } + if (leaf is SapientSignerLeaf sapient) + { + BigInteger maxWeight = canSign(sapient) ? sapient.weight : 0; + return new Weigth { weight = 0, maxWeight = maxWeight }; + } + if (leaf is SubdigestLeaf || leaf is AnyAddressSubdigestLeaf || leaf is NodeLeaf) + { + return new Weigth { weight = 0, maxWeight = 0 }; + } + if (leaf is NestedLeaf rawNested) + { + var result = GetWeight(rawNested.tree, canSign); + BigInteger weight = result.weight >= rawNested.threshold ? rawNested.weight : 0; + BigInteger maxWeight = result.maxWeight >= rawNested.threshold ? rawNested.weight : 0; + return new Weigth { weight = weight, maxWeight = maxWeight }; + } + + return new Weigth { weight = 0, maxWeight = 0 }; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Weigth.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Weigth.cs.meta new file mode 100644 index 000000000..940804a64 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Config/Weigth.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 457086af22864215b1882e7fefc9ce63 +timeCreated: 1749754054 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterOperation.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterOperation.cs index 5a926f5e1..3302c9b57 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterOperation.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterOperation.cs @@ -4,11 +4,11 @@ namespace Sequence.EcosystemWallet.Primitives { [JsonConverter(typeof(EnumConverter))] - public enum ParameterOperation : byte + public enum ParameterOperation { - equal = 0x00, - notEqual = 0x01, - greaterThanOrEqual = 0x02, - lessThanOrEqual = 0x03 + equal = 0, + notEqual = 1, + greaterThanOrEqual = 2, + lessThanOrEqual = 3 } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterRule.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterRule.cs index 02700d6a3..8a17f62b6 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterRule.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/ParameterRule.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Numerics; using Sequence.Utils; +using Unity.Plastic.Newtonsoft.Json; +using UnityEngine; namespace Sequence.EcosystemWallet.Primitives { @@ -14,6 +16,18 @@ public class ParameterRule public BigInteger offset; public byte[] mask; + public object ToJson() + { + return new + { + cumulative = cumulative, + operation = operation, + value = value.ByteArrayToHexStringWithPrefix(), + offset = offset.ToString(), + mask = mask.ByteArrayToHexStringWithPrefix() + }; + } + public byte[] Encode() { byte operationCumulative = (byte)(((byte)operation << 1) | (cumulative ? 1 : 0)); @@ -23,6 +37,19 @@ public byte[] Encode() result.AddRange(mask.PadLeft(32)); return result.ToArray(); } + + public static ParameterRule FromJson(string json) + { + var data = JsonConvert.DeserializeObject>(json); + return new() + { + cumulative = (bool)data["cumulative"], + operation = (ParameterOperation)Convert.ToInt32(data["operation"]), + value = data["value"].ToString().HexStringToByteArray(), + offset = BigInteger.Parse(data["offset"].ToString()), + mask = data["mask"].ToString().HexStringToByteArray() + }; + } public static ParameterRule Decode(byte[] data) { diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/Permission.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/Permission.cs index 153bfec9b..4729fb2cb 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/Permission.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/Permission.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; using Sequence.Utils; namespace Sequence.EcosystemWallet.Primitives @@ -13,6 +15,15 @@ public class Permission public Address target; public ParameterRule[] rules; + public object ToJson() + { + return new + { + target = target.Value, + rules = rules.Select(rule => rule.ToJson()).ToArray(), + }; + } + public byte[] Encode() { if (rules.Length > MAX_RULES_COUNT) { @@ -30,6 +41,18 @@ public byte[] Encode() return result.ToArray(); } + public static Permission FromJson(string json) + { + var data = JsonConvert.DeserializeObject>(json); + return new() + { + target = new Address((string)data["target"]), + rules = JsonConvert.DeserializeObject>(data["rules"].ToString()) + .Select(r => ParameterRule.FromJson(r.ToString())) + .ToArray(), + }; + } + public static (Permission Permission, int Consumed) Decode(byte[] data, int offset) { if (data.Length < offset + 21) diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/SessionPermissions.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/SessionPermissions.cs index 1cecd13c9..61cf1ca91 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/SessionPermissions.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Permission/SessionPermissions.cs @@ -1,7 +1,10 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Numerics; +using Newtonsoft.Json; using Sequence.Utils; +using UnityEngine; namespace Sequence.EcosystemWallet.Primitives { @@ -13,6 +16,18 @@ public class SessionPermissions public BigInteger deadline; public Permission[] permissions; + public object ToJson() + { + return new + { + type = SessionLeaf.SessionPermissionsType, + signer = signer.Value, + valueLimit = valueLimit.ToString(), + deadline = deadline.ToString(), + permissions = permissions.Select(permission => permission.ToJson()).ToArray() + }; + } + public byte[] Encode() { if (permissions.Length > Permission.MAX_PERMISSIONS_COUNT) { @@ -21,10 +36,10 @@ public byte[] Encode() List result = new(); result.AddRange(signer.ToString().HexStringToByteArray().PadLeft(20)); - result.AddRange(valueLimit.ToByteArray().PadLeft(32)); - result.AddRange(deadline.ToByteArray().PadLeft(32)); + result.AddRange(valueLimit.ByteArrayFromNumber(32)); + result.AddRange(deadline.ByteArrayFromNumber(8)); result.Add((byte)permissions.Length); - + foreach (var permission in permissions) { result.AddRange(permission.Encode()); } @@ -68,5 +83,19 @@ public static SessionPermissions Decode(byte[] data) permissions = permissions }; } + + public static SessionPermissions FromJson(string json) + { + var data = JsonConvert.DeserializeObject>(json); + return new SessionPermissions + { + signer = new Address((string)data["signer"]), + valueLimit = BigInteger.Parse((string)data["valueLimit"]), + deadline = BigInteger.Parse((string)data["deadline"]), + permissions = JsonConvert.DeserializeObject(data["permissions"].ToString()) + .Select(p => Permission.FromJson(p.ToString())) + .ToArray() + }; + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions.meta new file mode 100644 index 000000000..342b6895d --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 72f8734ad7464142b27eb1d7aeab7763 +timeCreated: 1751286941 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ExplicitSessionCallSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ExplicitSessionCallSignature.cs new file mode 100644 index 000000000..e7ab589df --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ExplicitSessionCallSignature.cs @@ -0,0 +1,15 @@ +using System.Numerics; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class ExplicitSessionCallSignature : SessionCallSignature + { + public BigInteger permissionIndex; + public RSY sessionSignature; + + public override byte[] Encode() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ExplicitSessionCallSignature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ExplicitSessionCallSignature.cs.meta new file mode 100644 index 000000000..43485f29a --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ExplicitSessionCallSignature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4e4d387190ee456d84d8eaa213e9c52c +timeCreated: 1751352635 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/IdentitySignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/IdentitySignerLeaf.cs new file mode 100644 index 000000000..96e670a1a --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/IdentitySignerLeaf.cs @@ -0,0 +1,32 @@ +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class IdentitySignerLeaf : SessionLeaf + { + public Address identitySigner; + + public override object ToJson() + { + return new + { + type = IdentitySignerType, + identitySigner = identitySigner.Value, + }; + } + + public override byte[] Encode() + { + var flag = SessionsTopology.FlagIdentitySigner << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), + identitySigner.Value.HexStringToByteArray()); + } + + public override byte[] EncodeGeneric() + { + return ByteArrayExtensions.ConcatenateByteArrays( + SessionsTopology.FlagIdentitySigner.ByteArrayFromNumber(1), + identitySigner.Value.HexStringToByteArray(20)); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/IdentitySignerLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/IdentitySignerLeaf.cs.meta new file mode 100644 index 000000000..88fa29ed4 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/IdentitySignerLeaf.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5eee5342bd534baf980785969a5c3817 +timeCreated: 1751287601 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitBlacklistLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitBlacklistLeaf.cs new file mode 100644 index 000000000..3000eb010 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitBlacklistLeaf.cs @@ -0,0 +1,56 @@ +using System; +using System.Linq; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class ImplicitBlacklistLeaf : SessionLeaf + { + public Address[] blacklist; + + public override object ToJson() + { + return new + { + type = ImplicitBlacklistType, + blacklist = blacklist.Select(a => a.Value).ToArray() , + }; + } + + public override byte[] Encode() + { + var encoded = EncodeBlacklist(); + + var count = blacklist.Length; + if (count >= 0x0f) + { + if (count > 0xffff) + throw new Exception("Blacklist too large"); + + var flag = (SessionsTopology.FlagBlacklist << 4) | 0x0f; + return ByteArrayExtensions.ConcatenateByteArrays( + flag.ByteArrayFromNumber(flag.MinBytesFor()), + count.ByteArrayFromNumber(2), + encoded + ); + } + + var flagByte = (SessionsTopology.FlagBlacklist << 4) | count; + return ByteArrayExtensions.ConcatenateByteArrays(flagByte.ByteArrayFromNumber(flagByte.MinBytesFor()), encoded); + } + + public override byte[] EncodeGeneric() + { + return ByteArrayExtensions.ConcatenateByteArrays( + SessionsTopology.FlagBlacklist.ByteArrayFromNumber(1), + EncodeBlacklist()); + } + + private byte[] EncodeBlacklist() + { + return ByteArrayExtensions.ConcatenateByteArrays(blacklist + .Select(hex => hex.Value.HexStringToByteArray()) + .ToArray()); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitBlacklistLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitBlacklistLeaf.cs.meta new file mode 100644 index 000000000..874f123c5 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitBlacklistLeaf.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dcc0ed43608a43e78e094ffef93276fc +timeCreated: 1751287568 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitSessionCallSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitSessionCallSignature.cs new file mode 100644 index 000000000..2e5b0ba23 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitSessionCallSignature.cs @@ -0,0 +1,14 @@ +namespace Sequence.EcosystemWallet.Primitives +{ + public class ImplicitSessionCallSignature : SessionCallSignature + { + public Attestation attestation; + public RSY identitySignature; + public RSY sessionSignature; + + public override byte[] Encode() + { + throw new System.NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitSessionCallSignature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitSessionCallSignature.cs.meta new file mode 100644 index 000000000..f25c1190e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/ImplicitSessionCallSignature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9fd706feb17d4e9c846647b4e9fd36e2 +timeCreated: 1751352624 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/PermissionLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/PermissionLeaf.cs new file mode 100644 index 000000000..1dd132468 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/PermissionLeaf.cs @@ -0,0 +1,25 @@ +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class PermissionLeaf : SessionLeaf + { + public SessionPermissions permissions; + + public override object ToJson() + { + return permissions.ToJson(); + } + + public override byte[] Encode() + { + var flag = SessionsTopology.FlagPermissions << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), permissions.Encode()); + } + + public override byte[] EncodeGeneric() + { + return ByteArrayExtensions.ConcatenateByteArrays(SessionsTopology.FlagPermissions.ByteArrayFromNumber(1), permissions.Encode()); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/PermissionLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/PermissionLeaf.cs.meta new file mode 100644 index 000000000..c2a49c104 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/PermissionLeaf.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8c8d92e38fa049069a75780e90042b12 +timeCreated: 1751287550 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionBranch.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionBranch.cs new file mode 100644 index 000000000..6a6769b1d --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionBranch.cs @@ -0,0 +1,49 @@ +using System; +using System.Linq; +using Newtonsoft.Json; +using Sequence.Utils; +using UnityEngine; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class SessionBranch + { + public SessionsTopology[] Children; + + public SessionBranch(SessionsTopology left, SessionsTopology right) + { + Children = new[] { left, right }; + } + + public SessionBranch(SessionsTopology[] children) + { + Children = children; + } + + public object ToJson() + { + return Children.Select(child => child.ToJson()).ToArray(); + } + + public byte[] Encode() + { + var encodings = Children.Select(child => child.Encode()).ToArray(); + var encoded = ByteArrayExtensions.ConcatenateByteArrays(encodings); + var encodedSize = encoded.Length.MinBytesFor(); + if (encodedSize > 15) + throw new Exception("Session Branch is too large."); + + var flag = (SessionsTopology.FlagBranch << 4) | encodedSize; + + return ByteArrayExtensions.ConcatenateByteArrays( + flag.ByteArrayFromNumber(flag.MinBytesFor()), + encoded.Length.ByteArrayFromNumber(encodedSize), + encoded); + } + + public SessionsTopology ToTopology() + { + return new SessionsTopology(this); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionBranch.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionBranch.cs.meta new file mode 100644 index 000000000..20221a048 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionBranch.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ae7cd21e7d6042eab9a39444c67d6004 +timeCreated: 1751287124 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionCallSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionCallSignature.cs new file mode 100644 index 000000000..d0ff61b09 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionCallSignature.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using Sequence.Utils; +using Unity.Plastic.Newtonsoft.Json; +using UnityEngine; + +namespace Sequence.EcosystemWallet.Primitives +{ + public abstract class SessionCallSignature + { + public abstract byte[] Encode(); + + public static SessionCallSignature FromJson(string json) + { + var data = JsonConvert.DeserializeObject>(json); + if (data.TryGetValue("identitySignature", out var identitySignature)) + { + return new ImplicitSessionCallSignature + { + attestation = Attestation.FromJson(data["attestation"].ToString()), + sessionSignature = RSY.FromString((string)data["sessionSignature"]), + identitySignature = RSY.FromString((string)identitySignature) + }; + } + + if (data.TryGetValue("permissionIndex", out var permissionIndex)) + { + return new ExplicitSessionCallSignature + { + permissionIndex = BigInteger.Parse((string)permissionIndex), + sessionSignature = RSY.FromString((string)data["sessionSignature"]), + }; + } + + throw new Exception("Invalid signature"); + } + + public static byte[] EncodeSignatures(SessionCallSignature[] signatures, SessionsTopology sessionsTopology, + Address[] explicitSigners, Address[] implicitSigners) + { + var parts = new List(); + + if (!sessionsTopology.IsComplete()) + throw new Exception("Incomplete topology"); + + sessionsTopology = sessionsTopology.Minimise(explicitSigners, implicitSigners); + + Debug.Log($"{sessionsTopology.JsonSerialize()}"); + + var encodedTopology = sessionsTopology.Encode(); + if (encodedTopology.Length.MinBytesFor() > 3) + throw new Exception("Session topology is too large"); + + parts.Add(encodedTopology.Length.ByteArrayFromNumber(3)); + parts.Add(encodedTopology); + + var attestationMap = new Dictionary(); + var encodedAttestations = new List(); + + foreach (var signature in signatures.Where(s => s is ImplicitSessionCallSignature)) + { + if (signature is not ImplicitSessionCallSignature implicitSignature) + throw new Exception("Invalid implicit signature"); + + if (implicitSignature.attestation != null) + { + var attestationStr = JsonConvert.SerializeObject(implicitSignature.attestation.ToJson()); + if (!attestationMap.ContainsKey(attestationStr)) + { + attestationMap[attestationStr] = encodedAttestations.Count; + encodedAttestations.Add(ByteArrayExtensions.ConcatenateByteArrays( + implicitSignature.attestation.Encode(), + implicitSignature.identitySignature.Pack() + )); + } + } + } + + if (encodedAttestations.Count >= 128) + throw new Exception("Too many attestations"); + + parts.Add(encodedAttestations.Count.ByteArrayFromNumber(1)); + parts.Add(ByteArrayExtensions.ConcatenateByteArrays(encodedAttestations.ToArray())); + + foreach (var signature in signatures) + { + if (signature is ImplicitSessionCallSignature implicitCallSignature) + { + var attestationStr = JsonConvert.SerializeObject(implicitCallSignature.attestation.ToJson()); + if (!attestationMap.TryGetValue(attestationStr, out var index)) + throw new Exception("Failed to find attestation index"); + + var packedFlag = 0x80 | index; + parts.Add(packedFlag.ByteArrayFromNumber(1)); + parts.Add(implicitCallSignature.sessionSignature.Pack()); + } + else if (signature is ExplicitSessionCallSignature explicitCallSignature) + { + if (explicitCallSignature.permissionIndex > 127) + throw new Exception("Permission index is too large"); + + var packedFlag = explicitCallSignature.permissionIndex; + parts.Add(packedFlag.ByteArrayFromNumber(1)); + parts.Add(explicitCallSignature.sessionSignature.Pack()); + } + else + { + throw new Exception("Invalid call signature"); + } + } + + return ByteArrayExtensions.ConcatenateByteArrays(parts.ToArray()); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionCallSignature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionCallSignature.cs.meta new file mode 100644 index 000000000..fb101ce91 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionCallSignature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2095aa9474bb40d396bbdc148354ef7e +timeCreated: 1751352126 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionLeaf.cs new file mode 100644 index 000000000..3377b846a --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionLeaf.cs @@ -0,0 +1,18 @@ +namespace Sequence.EcosystemWallet.Primitives +{ + public abstract class SessionLeaf + { + public const string ImplicitBlacklistType = "implicit-blacklist"; + public const string IdentitySignerType = "identity-signer"; + public const string SessionPermissionsType = "session-permissions"; + + public abstract object ToJson(); + public abstract byte[] Encode(); + public abstract byte[] EncodeGeneric(); + + public SessionsTopology ToTopology() + { + return new SessionsTopology(this); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionLeaf.cs.meta new file mode 100644 index 000000000..7b721da34 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionLeaf.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5dda202330ab407f95316fa253a185d1 +timeCreated: 1751287064 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionNodeLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionNodeLeaf.cs new file mode 100644 index 000000000..7b0edc2d9 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionNodeLeaf.cs @@ -0,0 +1,25 @@ +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class SessionNodeLeaf : SessionLeaf + { + public byte[] Value; + + public override object ToJson() + { + return Value.ByteArrayToHexStringWithPrefix(); + } + + public override byte[] Encode() + { + var flag = SessionsTopology.FlagNode << 4; + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), Value); + } + + public override byte[] EncodeGeneric() + { + return Value; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionNodeLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionNodeLeaf.cs.meta new file mode 100644 index 000000000..0b30b2a1e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionNodeLeaf.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9502deecea324e95aa0784587edebeca +timeCreated: 1751287728 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopology.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopology.cs new file mode 100644 index 000000000..149597752 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopology.cs @@ -0,0 +1,305 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using JetBrains.Annotations; +using Newtonsoft.Json; +using Sequence.ABI; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class SessionsTopology + { + public const int FlagPermissions = 0; + public const int FlagNode = 1; + public const int FlagBranch = 2; + public const int FlagBlacklist = 3; + public const int FlagIdentitySigner = 4; + + public readonly SessionBranch Branch; + public readonly SessionLeaf Leaf; + + public bool IsBranch => Branch != null; + public bool IsLeaf => Leaf != null; + + public SessionsTopology(SessionBranch branch) + { + this.Branch = branch; + this.Leaf = null; + } + + public SessionsTopology(SessionLeaf leaf) + { + this.Branch = null; + this.Leaf = leaf; + } + + public string JsonSerialize() + { + return JsonConvert.SerializeObject(ToJson()); + } + + public object ToJson() + { + if (IsBranch) + return Branch.ToJson(); + + if (IsLeaf) + return Leaf.ToJson(); + + throw new Exception("Invalid topology."); + } + + public string ImageHash() + { + return Hash(true); + } + + public byte[] Encode() + { + if (IsBranch) + return Branch.Encode(); + + if (IsLeaf) + return Leaf.Encode(); + + throw new Exception("Invalid topology."); + } + + /// + /// Optimise the configuration tree by rolling unused signers into nodes. + /// + /// The list of explicit signers to consider. + /// The list of implicit signers to consider. + /// New reference to the compromised topology. + /// + public SessionsTopology Minimise(Address[] explicitSigners, Address[] implicitSigners) + { + if (IsBranch) + { + var branchList = Branch.Children + .Select(branch => branch.Minimise(explicitSigners, implicitSigners)) + .ToArray(); + + if (branchList.All(b => b.IsLeaf && b.Leaf is SessionNodeLeaf)) + { + var nodeBytes = branchList + .Select(node => (node.Leaf as SessionNodeLeaf)?.Value) + .ToArray(); + + var concatenated = ByteArrayExtensions.ConcatenateByteArrays(nodeBytes); + return new SessionNodeLeaf + { + Value = SequenceCoder.KeccakHash(concatenated) + }.ToTopology(); + } + + return new SessionBranch(branchList).ToTopology(); + } + + if (Leaf is PermissionLeaf permissionLeaf) + { + if (explicitSigners.Contains(permissionLeaf.permissions.signer)) + return this; + + return new SessionNodeLeaf + { + Value = Hash(true).HexStringToByteArray() + }.ToTopology(); + } + + if (Leaf is ImplicitBlacklistLeaf) + { + if (implicitSigners.Length == 0) + { + return new SessionNodeLeaf + { + Value = Hash(true).HexStringToByteArray() + }.ToTopology(); + } + + return this; + } + + if (Leaf is IdentitySignerLeaf or SessionNodeLeaf) + return this; + + throw new Exception("Invalid topology"); + } + + public string Hash(bool generic = false) + { + if (IsBranch) + { + var children = Branch.Children; + if (children.Length == 0) + throw new Exception("Empty branch"); + + var hashedChildren = children.Select(child => child.Hash(generic)).ToArray(); + + var childBytes = hashedChildren[0].HexStringToByteArray(); + for (var i = 1; i < hashedChildren.Length; i++) + { + var nextBytes = hashedChildren[i].HexStringToByteArray(); + childBytes = SequenceCoder.KeccakHash(ByteArrayExtensions.ConcatenateByteArrays(childBytes, nextBytes)); + } + + return childBytes.ByteArrayToHexStringWithPrefix(); + } + + if (IsLeaf && Leaf is SessionNodeLeaf nodeLeaf) + return nodeLeaf.Value.ByteArrayToHexStringWithPrefix(); + + if (IsLeaf) + return SequenceCoder.KeccakHash(generic ? Leaf.EncodeGeneric() : Leaf.Encode()).ByteArrayToHexStringWithPrefix(); + + throw new Exception("Invalid tree structure"); + } + + public bool IsComplete() + { + return FindLeaf(_ => true) != null && + FindLeaf(_ => true) != null; + } + + public T FindLeaf(Func check) where T : SessionLeaf + { + if (Leaf is T leaf && check(leaf)) + return leaf; + + if (!IsBranch) + return null; + + return Branch.Children.Select(child => child.FindLeaf(check)) + .FirstOrDefault(childLeaf => childLeaf != null); + } + + public SessionsTopology AddExplicitSession(SessionPermissions session) + { + var existingPermission = FindLeaf(leaf => + leaf.permissions.signer.Equals(session.signer)); + + if (existingPermission != null) + throw new Exception("Session already exists."); + + return SessionsTopologyUtils.BalanceSessionsTopology(MergeSessionsTopologies(this, new PermissionLeaf + { + permissions = session + }.ToTopology())); + } + + [CanBeNull] + public SessionsTopology RemoveExplicitSession(Address address) + { + if (IsLeaf && Leaf is PermissionLeaf permissionLeaf) + return permissionLeaf.permissions.signer.Equals(address) ? null : this; + + if (IsBranch) + { + var newChildren = new List(); + foreach (var child in Branch.Children) + { + var updatedChild = child.RemoveExplicitSession(address); + if (updatedChild != null) + newChildren.Add(updatedChild); + } + + if (newChildren.Count == 0) + return null; + + if (newChildren.Count == 1) + return newChildren[0]; + + return new SessionBranch(newChildren.ToArray()).ToTopology(); + } + + return this; + } + + public void AddToImplicitBlacklist(Address address) + { + var existingLeaf = FindLeaf(_ => true); + if (existingLeaf == null) + throw new Exception("No blacklist found."); + + if (existingLeaf.blacklist.Any(b => b.Equals(address))) + return; + + var blacklist = existingLeaf.blacklist.ToList(); + blacklist.Add(address); + existingLeaf.blacklist = blacklist.OrderBy(h => h.Value.HexStringToByteArray(), new ByteArrayComparer()).ToArray(); + } + + public void RemoveFromImplicitBlacklist(Address address) + { + var leaf = FindLeaf(_ => true); + if (leaf == null) + throw new Exception("No blacklist found."); + + var newBlacklist = leaf.blacklist.Where(a => !a.Equals(address)).ToArray(); + leaf.blacklist = newBlacklist; + } + + public static SessionsTopology MergeSessionsTopologies(SessionsTopology a, SessionsTopology b) + { + return new SessionsTopology(new SessionBranch(a, b)); + } + + public static SessionsTopology FromJson(string json) + { + if (json.StartsWith("[")) + { + var list = JsonConvert.DeserializeObject>(json); + if (list.Count < 2) + throw new Exception("Invalid node structure in JSON"); + + var children = list.Select(i => FromJson(i.ToString())).ToArray(); + return new SessionBranch(children).ToTopology(); + } + + if (json.StartsWith("0x")) + { + return new SessionNodeLeaf + { + Value = json.HexStringToByteArray() + }.ToTopology(); + } + + var data = JsonConvert.DeserializeObject>(json); + var type = (string)data["type"]; + + switch (type) + { + case SessionLeaf.SessionPermissionsType: + return new PermissionLeaf + { + permissions = new() + { + signer = new Address((string)data["signer"]), + valueLimit = BigInteger.Parse((string)data["valueLimit"]), + deadline = BigInteger.Parse((string)data["deadline"]), + permissions = JsonConvert.DeserializeObject>(data["permissions"].ToString()) + .Select(i => Permission.FromJson(i.ToString())) + .ToArray() + } + }.ToTopology(); + case SessionLeaf.IdentitySignerType: + var identitySigner = data["identitySigner"].ToString(); + return new IdentitySignerLeaf + { + identitySigner = new Address(identitySigner) + }.ToTopology(); + case SessionLeaf.ImplicitBlacklistType: + var blacklistJson = data["blacklist"].ToString(); + var blacklist = JsonConvert.DeserializeObject(blacklistJson); + return new ImplicitBlacklistLeaf + { + blacklist = blacklist.Select(b => new Address(b)).ToArray() + }.ToTopology(); + default: + throw new Exception("Invalid topology."); + } + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopology.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopology.cs.meta new file mode 100644 index 000000000..bc5022d33 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopology.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 690b46a16a3b4e378e527a067dcf86c8 +timeCreated: 1751286953 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopologyUtils.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopologyUtils.cs new file mode 100644 index 000000000..814fd3356 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopologyUtils.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace Sequence.EcosystemWallet.Primitives +{ + public static class SessionsTopologyUtils + { + public static SessionsTopology BalanceSessionsTopology(SessionsTopology topology) + { + var flattened = FlattenSessionsTopology(topology); + + var blacklist = flattened.FirstOrDefault(l => l.IsLeaf && l.Leaf is ImplicitBlacklistLeaf); + var identitySigner = flattened.FirstOrDefault(l => l.IsLeaf && l.Leaf is IdentitySignerLeaf); + var leaves = flattened.Where(l => l.IsLeaf && l.Leaf is PermissionLeaf).ToArray(); + + if (blacklist == null || identitySigner == null) + { + throw new Exception("No blacklist or identity signer"); + } + + var elements = new List { blacklist, identitySigner }; + elements.AddRange(leaves); + + return BuildBalancedSessionsTopology(elements.ToArray()); + } + + private static SessionsTopology[] FlattenSessionsTopology(SessionsTopology topology) + { + if (topology.IsLeaf) + return new [] { topology }; + + if (!topology.IsBranch) + throw new Exception("Invalid topology structure"); + + var result = new List(); + foreach (var child in topology.Branch.Children) + result.AddRange(FlattenSessionsTopology(child)); + + return result.ToArray(); + + } + + private static SessionsTopology BuildBalancedSessionsTopology(SessionsTopology[] topologies) + { + var len = topologies.Length; + if (len == 0) + throw new Exception("Cannot build a topology from an empty list"); + + if (len == 1) + return topologies[0]; + + var mid = len / 2; + var left = topologies.Take(mid).ToArray(); + var right = topologies.Skip(mid).ToArray(); + + var leftTopo = BuildBalancedSessionsTopology(left); + var rightTopo = BuildBalancedSessionsTopology(right); + + return new SessionBranch(leftTopo, rightTopo).ToTopology(); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopologyUtils.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopologyUtils.cs.meta new file mode 100644 index 000000000..ff52edc82 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Sessions/SessionsTopologyUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 802712a51e264d2e9d97b6c4a303bf74 +timeCreated: 1751359802 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/ChainedSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/ChainedSignature.cs new file mode 100644 index 000000000..3e6acde07 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/ChainedSignature.cs @@ -0,0 +1,61 @@ +using System; +using System.Linq; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class ChainedSignature + { + public RawSignature[] signatures; + + public ChainedSignature(RawSignature[] signatures) + { + this.signatures = signatures; + } + + public byte[] Encode() + { + if (signatures == null || signatures.Length == 0) + throw new ArgumentException("Signatures list cannot be empty."); + + byte flag = 0x01; + + var sigForCheckpointer = signatures[^1]; + if (sigForCheckpointer.configuration.checkpointer != null) + { + flag |= 0x40; + } + + byte[] output = new byte[] { flag }; + + if (sigForCheckpointer.configuration.checkpointer != null) + { + var checkpointer = sigForCheckpointer.configuration.checkpointer.Value.HexStringToByteArray().PadLeft(20); + output = ByteArrayExtensions.ConcatenateByteArrays(output, checkpointer); + + var checkpointerDataSize = sigForCheckpointer.checkpointerData?.Length ?? 0; + if (checkpointerDataSize > 16777215) + throw new Exception("Checkpointer data too large"); + + output = ByteArrayExtensions.ConcatenateByteArrays(output, + checkpointerDataSize.ByteArrayFromNumber(3), + sigForCheckpointer.checkpointerData ?? new byte[0]); + } + + for (int i = 0; i < signatures.Length; i++) + { + var signature = signatures[i]; + bool isLast = i == signatures.Length - 1; + + var encoded = signature.Encode(skipCheckpointerData: true, skipCheckpointerAddress: isLast); + if (encoded.Length > 16777215) + throw new Exception("Chained signature too large"); + + var encodedSize = encoded.Length.ByteArrayFromNumber(3); + output = ByteArrayExtensions.ConcatenateByteArrays(output, encodedSize, encoded); + } + + return output; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/ChainedSignature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/ChainedSignature.cs.meta new file mode 100644 index 000000000..0e794478e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/ChainedSignature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6ad1783d9cd9402f8bf6b23d53269bbf +timeCreated: 1750161157 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Erc6492.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Erc6492.cs new file mode 100644 index 000000000..a9577806e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Erc6492.cs @@ -0,0 +1,14 @@ +namespace Sequence.EcosystemWallet.Primitives +{ + public class Erc6492 + { + public Address to; + public byte[] data; + + public Erc6492(Address to, byte[] data) + { + this.to = to; + this.data = data; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Erc6492.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Erc6492.cs.meta new file mode 100644 index 000000000..426074a6d --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Erc6492.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b951c13874834f1bb6bf07c888c9f58e +timeCreated: 1751198455 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/FLAG.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/FLAG.cs deleted file mode 100644 index ccaf97d5d..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/FLAG.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Sequence.EcosystemWallet.Primitives -{ - internal enum FLAG - { - SIGNATURE_HASH = 0, - ADDRESS = 1, - SIGNATURE_ERC1271 = 2, - NODE = 3, - BRANCH = 4, - SUBDIGEST = 5, - NESTED = 6, - SIGNATURE_ETH_SIGN = 7, - SIGNATURE_ANY_ADDRESS_SUBDIGEST = 8, - SIGNATURE_SAPIENT = 9, - SIGNATURE_SAPIENT_COMPACT = 10, - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/FLAG.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/FLAG.cs.meta deleted file mode 100644 index d37a0a357..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/FLAG.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1e2a94e26e344dfbb5f82a75e4742313 -timeCreated: 1747224577 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RSY.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RSY.cs index 8590f3940..5d5cf75e1 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RSY.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RSY.cs @@ -1,12 +1,73 @@ +using System; +using System.Linq; using System.Numerics; +using Sequence.Utils; namespace Sequence.EcosystemWallet.Primitives { - internal abstract class RSY : SignatureOfSignerLeaf + public class RSY { - public abstract string type { get; } public BigInteger r; public BigInteger s; public BigInteger yParity; + + public byte[] Pack() + { + if (yParity != 0 && yParity != 1 && yParity != 27 && yParity != 28) + throw new ArgumentException("yParity must be 0, 1, 27, or 28."); + + var rBytes = r.ByteArrayFromNumber(r.MinBytesFor()).PadLeft(32); + var sBytes = s.ByteArrayFromNumber(s.MinBytesFor()).PadLeft(32); + + if (yParity % 2 == 1) + sBytes[0] |= 0x80; + + return ByteArrayExtensions.ConcatenateByteArrays(rBytes, sBytes); + } + + public static RSY FromString(string input) + { + var parts = input.Split(':'); + return new RSY + { + r = parts[0].HexStringToBigInteger(), + s = parts[1].HexStringToBigInteger(), + yParity = VToYParity(BigInteger.Parse(parts[2])) + }; + } + + public static RSY Unpack(byte[] rsy) + { + if (rsy.Length != 64) + throw new ArgumentException("RSY must be exactly 64 bytes"); + + var r = rsy[..32].ToBigInteger(); + + var yParityAndS = rsy[32..64]; + int yParity = (yParityAndS[0] & 0x80) != 0 ? 1 : 0; + + var sBytes = (byte[])yParityAndS.Clone(); + sBytes[0] &= 0x7F; + + var s = sBytes.ToBigInteger(); + + return new RSY + { + r = r, + s = s, + yParity = yParity, + }; + } + + public static int VToYParity(BigInteger v) + { + if (v == 27) + return 0; + + if (v == 28) + return 1; + + return (int)(v % 2); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawConfig.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawConfig.cs deleted file mode 100644 index b5d070455..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawConfig.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Numerics; - -namespace Sequence.EcosystemWallet.Primitives -{ - internal class RawConfig - { - public BigInteger threshold; - public BigInteger checkpoint; - public RawTopology topology; - public Address checkpointer; - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawConfig.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawConfig.cs.meta deleted file mode 100644 index e236aba66..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawConfig.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 7fc6fd4fab4649659daedc97e68fab69 -timeCreated: 1747256590 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawLeaf.cs deleted file mode 100644 index 88ef4c980..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawLeaf.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Sequence.EcosystemWallet.Primitives -{ - internal abstract class RawLeaf - { - - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawLeaf.cs.meta deleted file mode 100644 index ddf6db8c1..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawLeaf.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 786152a073eb441f8d96336a9ad00476 -timeCreated: 1747256354 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNestedLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNestedLeaf.cs deleted file mode 100644 index 49194551b..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNestedLeaf.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Numerics; - -namespace Sequence.EcosystemWallet.Primitives -{ - internal class RawNestedLeaf : RawLeaf - { - public const string type = "nested"; - public RawTopology tree; - public BigInteger weight; - public BigInteger threshold; - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNestedLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNestedLeaf.cs.meta deleted file mode 100644 index cf61ff740..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNestedLeaf.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 1cb8fd6f984741aeba6930072b2b1424 -timeCreated: 1747256077 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNode.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNode.cs deleted file mode 100644 index fd93ca7fd..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNode.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Sequence.EcosystemWallet.Primitives -{ - internal class RawNode - { - public RawTopology left; - public RawTopology right; - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNode.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNode.cs.meta deleted file mode 100644 index 24a5a1b01..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawNode.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 76795715dcab466ebac2248e22b70772 -timeCreated: 1747256161 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignature.cs index 5a1e53a05..33b85092e 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignature.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignature.cs @@ -1,17 +1,225 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; +using Sequence.EcosystemWallet.Utils; +using Sequence.Utils; +using UnityEngine; + namespace Sequence.EcosystemWallet.Primitives { - internal class RawSignature + public class RawSignature { - public bool noChainId; + public bool noChainId = true; public byte[] checkpointerData; - public RawConfig configuration; + public Config configuration; public RawSignature[] suffix; public Erc6492 erc6492; - public class Erc6492 + public string ToJson() + { + var jsonObject = new Dictionary(); + + jsonObject.Add("noChainId", noChainId); + + if (checkpointerData != null) + jsonObject.Add("checkpointerData", checkpointerData.ByteArrayToHexStringWithPrefix()); + + jsonObject.Add("configuration", new + { + threshold = configuration.threshold.ToString(), + checkpoint = configuration.checkpoint.ToString(), + topology = configuration.topology.Parse(), + checkpointer = configuration.checkpointer + }); + + if (suffix is { Length: > 0 }) + jsonObject.Add("suffix", suffix.Select(s => s.ToJson())); + + return JsonConvert.SerializeObject(jsonObject); + } + + public byte[] Encode(bool skipCheckpointerData = false, bool skipCheckpointerAddress = false) + { + if (suffix is { Length: > 0 }) + { + var head = new RawSignature + { + noChainId = this.noChainId, + checkpointerData = this.checkpointerData, + configuration = this.configuration, + erc6492 = null + }; + + var chained = new List { head }; + chained.AddRange(suffix); + + var chainedSignature = new ChainedSignature(chained.ToArray()); + var chainedEncoded = chainedSignature.Encode(); + + return erc6492 != null ? Erc6492Helper.Wrap(chainedEncoded, erc6492.to, erc6492.data) : chainedEncoded; + } + + byte flag = 0; + if (noChainId) + flag |= 0x02; + + int bytesForCheckpoint = configuration.checkpoint.MinBytesFor(); + if (bytesForCheckpoint > 7) + throw new Exception("Checkpoint too large"); + + flag |= (byte)(bytesForCheckpoint << 2); + + int bytesForThreshold = configuration.threshold.MinBytesFor(); + bytesForThreshold = bytesForThreshold == 0 ? 1 : bytesForThreshold; + if (bytesForThreshold > 2) + throw new Exception("Threshold too large"); + + flag |= bytesForThreshold == 2 ? (byte)0x20 : (byte)0x00; + + if (configuration.checkpointer != null && !skipCheckpointerAddress) + { + flag |= 0x40; + } + + byte[] output = new byte[] { flag }; + + if (configuration.checkpointer != null && !skipCheckpointerAddress) + { + var checkpointerBytes = configuration.checkpointer.Value.HexStringToByteArray(); + output = ByteArrayExtensions.ConcatenateByteArrays(output, checkpointerBytes.PadLeft(20)); + + if (!skipCheckpointerData) + { + int checkpointerDataSize = checkpointerData?.Length ?? 0; + if (checkpointerDataSize > 16777215) + throw new Exception("Checkpointer data too large"); + + output = ByteArrayExtensions.ConcatenateByteArrays(output, checkpointerDataSize.ByteArrayFromNumber(3), checkpointerData ?? Array.Empty()); + } + } + + var checkpointBytes = configuration.checkpoint.ByteArrayFromNumber(bytesForCheckpoint); + output = ByteArrayExtensions.ConcatenateByteArrays(output, checkpointBytes); + + var thresholdBytes = configuration.threshold.ByteArrayFromNumber(bytesForThreshold); + output = ByteArrayExtensions.ConcatenateByteArrays(output, thresholdBytes); + + var topologyBytes = configuration.topology.Encode(noChainId, checkpointerData); + output = ByteArrayExtensions.ConcatenateByteArrays(output, topologyBytes); + + return erc6492 != null ? Erc6492Helper.Wrap(output, erc6492.to, erc6492.data) : output; + } + + public static RawSignature Decode(byte[] erc6492Signature) + { + var (signature, erc6492) = Erc6492Helper.Decode(erc6492Signature); + + if (signature.Length < 1) + throw new Exception("Signature is empty"); + + int index = 1; + byte flag = signature[0]; + bool noChainId = (flag & 0x02) == 0x02; + + Address checkpointerAddress = null; + byte[]? checkpointerData = null; + + if ((flag & 0x40) == 0x40) + { + AssertBytes("checkpointer address", index, 20, signature.Length); + + var checkpointer = signature[index..(index + 20)].ByteArrayToHexStringWithPrefix(); + checkpointerAddress = new Address(checkpointer); + index += 20; + + AssertBytes("checkpointerData size", index, 3, signature.Length); + + var dataSize = signature[index..(index + 3)].ToInteger(); + index += 3; + + AssertBytes("checkpointerData", index, dataSize, signature.Length); + + checkpointerData = signature[index..(index + dataSize)]; + index += dataSize; + } + + int checkpointSize = (flag & 0x1C) >> 2; + + AssertBytes("checkpoint", index, checkpointSize, signature.Length); + + var checkpoint = signature[index..(index + checkpointSize)].ToBigInteger(); + index += checkpointSize; + + int thresholdSize = ((flag & 0x20) >> 5) + 1; + + AssertBytes("threshold", index, thresholdSize, signature.Length); + + var threshold = signature[index..(index + thresholdSize)].ToBigInteger(); + index += thresholdSize; + + if ((flag & 0x01) == 0x01) + { + var subsignatures = new List(); + + while (index < signature.Length) + { + AssertBytes("chained subsignature size", index, 3, signature.Length); + + int subSize = signature[index..(index + 3)].ToInteger(); + index += 3; + + AssertBytes("chained subsignature", index, subSize, signature.Length); + + var subSignature = Decode(signature[index..(index + subSize)]); + index += subSize; + + if (subSignature.checkpointerData != null) + throw new Exception("Chained subsignature has checkpointer data"); + + subSignature.checkpointerData = null; + subsignatures.Add(subSignature); + } + + if (subsignatures.Count == 0) + throw new Exception("Chained signature has no subsignatures"); + + return new RawSignature + { + noChainId = subsignatures[0].noChainId, + checkpointerData = null, + configuration = subsignatures[0].configuration, + suffix = subsignatures.GetRange(1, subsignatures.Count - 1).ToArray(), + erc6492 = erc6492 + }; + } + + // In case of a SignatureOfSignerLeafHash, the 'index' here is one byte behind + var (nodes, leftover) = SignatureUtils.ParseBranch(signature[index..]); + if (leftover.Length != 0) + throw new Exception("Leftover bytes in signature"); + + var topology = SignatureUtils.FoldNodes(nodes); + + return new RawSignature + { + noChainId = noChainId, + checkpointerData = checkpointerData, + configuration = new Config + { + threshold = threshold, + checkpoint = checkpoint, + topology = topology, + checkpointer = checkpointerAddress + }, + erc6492 = erc6492 + }; + } + + private static void AssertBytes(string key, int current, int dataSize, int total) { - public Address to; - public byte[] data; + if (current + dataSize > total) + throw new Exception($"Not enough bytes for '{key}'. Current: {current}, DataSize: {dataSize}, Total: {total}"); } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignerLeaf.cs deleted file mode 100644 index 33283d329..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignerLeaf.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Numerics; - -namespace Sequence.EcosystemWallet.Primitives -{ - internal class RawSignerLeaf : RawLeaf - { - public const string type = "unrecovered-signer"; - public BigInteger weight; - public SignatureType signature; - } - - internal abstract class SignatureType - { - - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignerLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignerLeaf.cs.meta deleted file mode 100644 index 09a2bf016..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawSignerLeaf.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 9702ffb82ba4491abb965b99775440eb -timeCreated: 1747225789 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawTopology.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawTopology.cs deleted file mode 100644 index db8e5dad2..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawTopology.cs +++ /dev/null @@ -1,28 +0,0 @@ -namespace Sequence.EcosystemWallet.Primitives -{ - internal class RawTopology - { - public RawLeaf Leaf { get; private set; } - public RawNode Node { get; private set; } - - public RawTopology(RawLeaf leaf) - { - this.Leaf = leaf; - } - - public RawTopology(RawNode node) - { - this.Node = node; - } - - public bool IsLeaf() - { - return this.Leaf != null; - } - - public bool IsNode() - { - return this.Node != null; - } - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawTopology.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawTopology.cs.meta deleted file mode 100644 index 01cc943f8..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/RawTopology.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 377a53364b3142c5a8a450c27848ca06 -timeCreated: 1747256210 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Signature.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Signature.cs deleted file mode 100644 index ecd4bdccd..000000000 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Signature.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Sequence.EcosystemWallet.Primitives -{ - internal class Signature - { - - } -} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureHandler.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureHandler.cs new file mode 100644 index 000000000..bf5f04003 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureHandler.cs @@ -0,0 +1,106 @@ +using System; +using Sequence.EcosystemWallet.Envelope; + +namespace Sequence.EcosystemWallet.Primitives +{ + public class SignatureHandler + { + public static Topology FillLeaves(Topology topology, Func signatureFor) + { + if (topology.IsNode()) + { + return new Topology(new Node( + FillLeaves(topology.Node.left, signatureFor), + FillLeaves(topology.Node.right, signatureFor))); + } + + if (!topology.IsLeaf()) + throw new ArgumentException("Cannot create topology from empty leaves"); + + var leaf = topology.Leaf; + if (leaf is SignerLeaf signerLeaf) + { + var signature = signatureFor(signerLeaf); + var newLeaf = signature != null ? new SignedSignerLeaf + { + address = signerLeaf.address, + weight = signerLeaf.weight, + signature = signature + } : signerLeaf; + + return new Topology(newLeaf); + } + + if (leaf is SapientSignerLeaf sapientSignerLeaf) + { + var signature = signatureFor(sapientSignerLeaf); + var newLeaf = signature != null ? new SignedSapientSignerLeaf + { + address = sapientSignerLeaf.address, + imageHash = sapientSignerLeaf.imageHash, + weight = sapientSignerLeaf.weight, + signature = signature + } : sapientSignerLeaf; + + return new Topology(newLeaf); + } + + if (leaf is NestedLeaf nestedLeaf) + { + return new Topology(new NestedLeaf + { + weight = nestedLeaf.weight, + threshold = nestedLeaf.threshold, + tree = FillLeaves(nestedLeaf.tree, signatureFor) + }); + } + + if (leaf is SubdigestLeaf || + leaf is AnyAddressSubdigestLeaf || + leaf is NodeLeaf) + { + return topology; + } + + throw new Exception("Invalid topology"); + } + + public static RawSignature EncodeSignature(Signed envelope) + { + var topology = FillLeaves(envelope.configuration.topology, + leaf => SignatureForLeaf(envelope, leaf)); + + return new RawSignature + { + noChainId = envelope.chainId == 0, + configuration = new Config + { + threshold = envelope.configuration.threshold, + checkpoint = envelope.configuration.checkpoint, + checkpointer = envelope.configuration.checkpointer, + topology = null, + } + }; + } + + public static EnvelopeSignature SignatureForLeaf(Signed envelope, Leaf leaf) + { + if (leaf is SignerLeaf signerLeaf) + { + return Array.Find(envelope.signatures, sig => + sig is Signature signature && + signature.address.Equals(signerLeaf.address)); + } + + if (leaf is SapientSignerLeaf sapientSignerLeaf) + { + return Array.Find(envelope.signatures, sig => + sig is SapientSignature sapient && + sapient.imageHash == sapientSignerLeaf.imageHash && + sapient.signature.address.Equals(sapientSignerLeaf.address)); + } + + return null; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Signature.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureHandler.cs.meta similarity index 100% rename from Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/Signature.cs.meta rename to Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureHandler.cs.meta diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfLeaf.cs new file mode 100644 index 000000000..cfbedeb10 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfLeaf.cs @@ -0,0 +1,9 @@ +namespace Sequence.EcosystemWallet.Primitives +{ + public abstract class SignatureOfLeaf + { + public abstract string type { get; } + + public abstract byte[] Encode(Leaf leaf); + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfLeaf.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfLeaf.cs.meta new file mode 100644 index 000000000..cebb8b59e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfLeaf.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b709cd9ee2144ca2864cf7af5b46ee28 +timeCreated: 1751198284 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSapientSignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSapientSignerLeaf.cs index 68da0579c..07639373c 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSapientSignerLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSapientSignerLeaf.cs @@ -1,15 +1,54 @@ +using System; +using Sequence.Utils; + namespace Sequence.EcosystemWallet.Primitives { - internal class SignatureOfSapientSignerLeaf : SignatureType + public class SignatureOfSapientSignerLeaf : SignatureOfLeaf { - public Address address; - public byte[] data; - public Type type; - public enum Type { sapient, sapient_compact } + + public override string type => curType.ToString(); + + public Address address; + public byte[] data; + public Type curType; + + public override byte[] Encode(Leaf leaf) + { + if (leaf is not SapientSignerLeaf signerLeaf) + throw new Exception(); + + var weight = signerLeaf.weight; + var weightBytes = Array.Empty(); + + var flag = (type == "sapient" ? + Topology.FlagSignatureSapient : + Topology.FlagSignatureSapientCompact) + << 4; + + var bytesForSignatureSize = data.Length.MinBytesFor(); + if (bytesForSignatureSize > 3) + throw new Exception("Signature too large"); + + flag |= bytesForSignatureSize << 2; + + if (weight <= 3 && weight > 0) + flag |= (int)weight; + else if (weight <= 255) + weightBytes = weight.ByteArrayFromNumber(weight.MinBytesFor()); + else + throw new Exception("Weight too large"); + + return ByteArrayExtensions.ConcatenateByteArrays( + flag.ByteArrayFromNumber(flag.MinBytesFor()), + weightBytes, + address.Value.HexStringToByteArray(20), + data.Length.ByteArrayFromNumber(bytesForSignatureSize), + data); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeaf.cs index 0b8ccd530..bb2274f92 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeaf.cs @@ -1,6 +1,6 @@ namespace Sequence.EcosystemWallet.Primitives { - internal abstract class SignatureOfSignerLeaf : SignatureType + public abstract class SignatureOfSignerLeaf : SignatureOfLeaf { } diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafErc1271.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafErc1271.cs index fa789f292..70f7bbd3b 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafErc1271.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafErc1271.cs @@ -1,9 +1,42 @@ +using System; +using System.Linq; +using Sequence.Utils; + namespace Sequence.EcosystemWallet.Primitives { - internal class SignatureOfSignerLeafErc1271 : SignatureOfSignerLeaf + public class SignatureOfSignerLeafErc1271 : SignatureOfSignerLeaf { - public const string type = "erc1271"; + public override string type => "erc1271"; + public Address address; public byte[] data; + + public override byte[] Encode(Leaf leaf) + { + if (leaf is not SignerLeaf signerLeaf) + throw new Exception(); + + var weightBytes = Array.Empty(); + var flag = Topology.FlagSignatureErc1271 << 4; + var sizeLen = data.Length.MinBytesFor(); + if (sizeLen > 3) + throw new Exception("Signature too large"); + + flag |= sizeLen << 2; + + if (signerLeaf.weight <= 3 && signerLeaf.weight > 0) + flag |= (int)signerLeaf.weight; + else if (signerLeaf.weight <= 255) + weightBytes = signerLeaf.weight.ByteArrayFromNumber(signerLeaf.weight.MinBytesFor()); + else + throw new Exception("Weight too large"); + + return ByteArrayExtensions.ConcatenateByteArrays( + flag.ByteArrayFromNumber(flag.MinBytesFor()), + weightBytes, + address.Value.HexStringToByteArray(20), + data.Length.ByteArrayFromNumber(sizeLen), + data); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafEthSign.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafEthSign.cs index 0251ae240..6fe42349f 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafEthSign.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafEthSign.cs @@ -1,7 +1,31 @@ +using System; +using System.Linq; +using Sequence.Utils; + namespace Sequence.EcosystemWallet.Primitives { - internal class SignatureOfSignerLeafEthSign : RSY + public class SignatureOfSignerLeafEthSign : SignatureOfSignerLeaf { public override string type => "eth_sign"; + + public RSY rsy; + + public override byte[] Encode(Leaf leaf) + { + if (leaf is not SignerLeaf signerLeaf) + throw new Exception(); + + var weightBytes = new byte[0]; + var flag = Topology.FlagSignatureEthSign << 4; + + if (signerLeaf.weight <= 15 && signerLeaf.weight > 0) + flag |= (int)signerLeaf.weight; + else if (signerLeaf.weight <= 255) + weightBytes = signerLeaf.weight.ByteArrayFromNumber(flag.MinBytesFor()); + else + throw new Exception("Weight too large"); + + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), weightBytes, rsy.Pack()); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafHash.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafHash.cs index 8659d457b..d290c8ce1 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafHash.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignatureOfSignerLeafHash.cs @@ -1,7 +1,33 @@ +using System; +using Sequence.Utils; +using UnityEngine; + namespace Sequence.EcosystemWallet.Primitives { - internal class SignatureOfSignerLeafHash : RSY + public class SignatureOfSignerLeafHash : SignatureOfSignerLeaf { public override string type => "hash"; + + public RSY rsy; + + public override byte[] Encode(Leaf leaf) + { + if (leaf is not SignerLeaf signerLeaf) + throw new Exception($"Leaf type is not supported: {leaf.GetType()}"); + + var weight = signerLeaf.weight; + var weightBytes = Array.Empty(); + + var flag = Topology.FlagSignatureHash << 4; + + if (weight <= 15 && weight > 0) + flag |= (int)weight; + else if (weight <= 255) + weightBytes = weight.ByteArrayFromNumber(weight.MinBytesFor()); + else + throw new Exception("Weight too large"); + + return ByteArrayExtensions.ConcatenateByteArrays(flag.ByteArrayFromNumber(flag.MinBytesFor()), weightBytes, rsy.Pack()); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSapientSignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSapientSignerLeaf.cs index 1cc97627f..ecc905a6a 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSapientSignerLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSapientSignerLeaf.cs @@ -1,7 +1,12 @@ namespace Sequence.EcosystemWallet.Primitives { - internal class SignedSapientSignerLeaf : SapientSignerLeaf + public class SignedSapientSignerLeaf : SapientSignerLeaf { - public bool signed = true; + public SignatureOfLeaf signature; + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + return signature.Encode(this); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSignerLeaf.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSignerLeaf.cs index 13d8ec208..792f5a27e 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSignerLeaf.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Primitives/Signature/SignedSignerLeaf.cs @@ -1,7 +1,12 @@ namespace Sequence.EcosystemWallet.Primitives { - internal class SignedSignerLeaf : SignerLeaf + public class SignedSignerLeaf : SignerLeaf { - public bool signed = true; + public SignatureOfLeaf signature; + + public override byte[] Encode(bool noChainId, byte[] checkpointerData) + { + return signature.Encode(this); + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils.meta new file mode 100644 index 000000000..77eac38f6 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9ef0ab399b77410f949da7f1914a810b +timeCreated: 1750962415 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/Erc6492Helper.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/Erc6492Helper.cs new file mode 100644 index 000000000..e05537ce3 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/Erc6492Helper.cs @@ -0,0 +1,119 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using Nethereum.ABI; +using Nethereum.ABI.FunctionEncoding; +using Nethereum.ABI.Model; +using Nethereum.Hex.HexConvertors.Extensions; +using Nethereum.Web3; +using Sequence.EcosystemWallet.Primitives; +using Sequence.Utils; +using UnityEngine; + +namespace Sequence.EcosystemWallet.Utils +{ + public static class Erc6492Helper + { + private const string DeployCode = "0x60806040523480..."; + private static readonly string MagicBytes = "0x6492649264926492649264926492649264926492649264926492649264926492"; + + public class Context + { + public Address factory; + public Address stage1; + public Address stage2; + public string creationCode; + } + + public static (string To, string Data) Deploy(string deployHash, Context context) + { + var encoded = EncodeDeploy(context.stage1, deployHash); + return (context.factory, encoded); + } + + private static string EncodeDeploy(string stage1, string deployHash) + { + var function = new FunctionABI("deploy", false); + function.InputParameters = new[] + { + new Parameter("address", "stage1"), + new Parameter("bytes", "hash") + }; + + var encoder = new FunctionCallEncoder(); + return encoder.EncodeRequest(function.Sha3Signature, Array.Empty(), stage1, deployHash.HexToByteArray()); + } + + public static byte[] Wrap(byte[] signature, Address to, byte[] data) + { + var encoder = new ABIEncode(); + var encoded = encoder.GetABIEncodedPacked( + new ABIValue("address", to), + new ABIValue("bytes", data), + new ABIValue("bytes", signature) + ); + + return HexUtils.Concat(encoded.ByteArrayToHexString(), MagicBytes).HexStringToByteArray(); + } + + public static (byte[] Signature, Erc6492 Erc6492) Decode(byte[] signature) + { + var magicBytes = MagicBytes.HexStringToByteArray(); + int magicLength = magicBytes.Length; + + if (signature.Length >= magicLength && signature[^magicLength..].ByteArrayToHexStringWithPrefix() == MagicBytes) + { + var raw = signature[..^magicLength]; + + try + { + var decoder = new ParameterDecoder(); + var parameters = new Parameter[] + { + new ("address", 1), + new ("bytes", 2), + new ("bytes", 3), + }; + + var decoded = decoder.DecodeDefaultData(raw, parameters); + + string to = decoded[0].Result?.ToString() ?? throw new Exception("Missing 'to' address"); + byte[] data = (byte[])(decoded[1].Result ?? throw new Exception("Missing 'data'")); + byte[] unwrappedSignature = (byte[])(decoded[2].Result ?? throw new Exception("Missing 'signature'")); + + return (unwrappedSignature, new Erc6492(new Address(to), data)); + } + catch + { + return (signature, null); + } + } + + return (signature, null); + } + + public static async Task IsValidAsync( + string address, + string messageHash, + string encodedSignature, + Web3 web3) + { + /*var encoder = new ABIEncode(); + var calldata = encoder.GetABIEncoded( + new ABIValue("address", address), + new ABIValue("bytes32", messageHash.HexToByteArray()), + new ABIValue("bytes", encodedSignature.HexToByteArray()) + ).ToHex(); + + var fullData = DeployCode + calldata[2..]; + + var result = await .Transactions.Call.SendRequestAsync(new Nethereum.RPC.Eth.DTOs.CallInput + { + Data = fullData, + To = null // To is null for `eth_call` with deploy bytecode + }, Nethereum.RPC.Eth.DTOs.BlockParameter.CreateLatest());*/ + + return Convert.ToInt32("result", 16) == 1; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/Erc6492Helper.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/Erc6492Helper.cs.meta new file mode 100644 index 000000000..d6a3a8a1e --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/Erc6492Helper.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fd27d3906bbf44eb83fb2b5c33d8d364 +timeCreated: 1750962426 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/SignatureUtils.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/SignatureUtils.cs new file mode 100644 index 000000000..31b921a32 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/SignatureUtils.cs @@ -0,0 +1,372 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using Sequence.EcosystemWallet.Primitives; +using Sequence.Utils; + +namespace Sequence.EcosystemWallet.Utils +{ + public static class SignatureUtils + { + public static string EncodeSignatureFromInput(string input, string signatures, bool noChainId, byte[] checkpointerData) + { + var parts = string.IsNullOrEmpty(signatures) ? + Array.Empty() : + signatures.Split(' '); + + var config = Primitives.Config.FromJson(input); + + var allSignatures = parts.Select(s => + { + var values = s.Split(':'); + + return new + { + Address = new Address(values[0]), + Type = values[1], + Values = values.Skip(2).ToArray() + }; + }).ToList(); + + var fullTopology = SignatureHandler.FillLeaves(config.topology, leaf => + { + if (leaf is SignerLeaf signerLeaf) + { + var candidate = allSignatures.FirstOrDefault(s => s.Address.Equals(signerLeaf.address)); + if (candidate == null) + return null; + + switch (candidate.Type) + { + case "erc1271": + return new SignatureOfSignerLeafErc1271 + { + address = candidate.Address, + data = candidate.Values[0].HexStringToByteArray() + }; + case "eth_sign": + return new SignatureOfSignerLeafEthSign + { + rsy = new RSY + { + r = candidate.Values[0].HexStringToBigInteger(), + s = candidate.Values[1].HexStringToBigInteger(), + yParity = RSY.VToYParity(int.Parse(candidate.Values[2])) + } + }; + case "hash": + return new SignatureOfSignerLeafHash + { + rsy = new RSY + { + r = candidate.Values[0].HexStringToBigInteger(), + s = candidate.Values[1].HexStringToBigInteger(), + yParity = RSY.VToYParity(int.Parse(candidate.Values[2])) + } + }; + case "sapient": + case "sapient_compact": + throw new Exception($"Incorrect type {candidate.Type} for leaf {leaf.GetType()}"); + default: + throw new Exception($"Unsupported signature type: {candidate.Type}"); + } + } + + if (leaf is SapientSignerLeaf sapientSignerLeaf) + { + var candidate = allSignatures.FirstOrDefault(s => s.Address.Equals(sapientSignerLeaf.address)); + if (candidate == null) + return null; + + switch (candidate.Type) + { + case "sapient": + return new SignatureOfSapientSignerLeaf + { + curType = SignatureOfSapientSignerLeaf.Type.sapient, + address = candidate.Address, + data = candidate.Values[0].HexStringToByteArray() + }; + case "sapient_compact": + return new SignatureOfSapientSignerLeaf + { + curType = SignatureOfSapientSignerLeaf.Type.sapient_compact, + address = candidate.Address, + data = candidate.Values[0].HexStringToByteArray() + }; + case "eth_sign": + case "hash": + case "erc1271": + throw new Exception($"Incorrect type {candidate.Type} for leaf {leaf.GetType()}"); + default: + throw new Exception($"Unsupported signature type: {candidate.Type}"); + } + } + + return null; + }); + + var rawSignature = new RawSignature + { + noChainId = noChainId, + configuration = new Primitives.Config + { + threshold = config.threshold, + checkpoint = config.checkpoint, + checkpointer = config.checkpointer, + topology = fullTopology + }, + checkpointerData = checkpointerData + }; + + return rawSignature.Encode().ByteArrayToHexStringWithPrefix(); + } + + public static (Topology[] nodes, byte[] Leftover) ParseBranch(byte[] signature) + { + var leafs = new List(); + int index = 0; + + while (index < signature.Length) + { + byte firstByte = signature[index++]; + int flag = (firstByte & 0xf0) >> 4; + + switch (flag) + { + case Topology.FlagSignatureHash: + { + int weight = firstByte & 0x0f; + if (weight == 0) + weight = signature[index++]; + + if (index + 64 > signature.Length) + throw new Exception("Not enough bytes for hash signature"); + + var rsy = RSY.Unpack(signature[index..(index + 64)]); + index += 64; + + leafs.Add(new Topology(new SignedSignerLeaf + { + weight = new BigInteger(weight), + signature = new SignatureOfSignerLeafHash + { + rsy = rsy + } + })); + + break; + } + + case Topology.FlagAddress: + { + int weight = firstByte & 0x0f; + if (weight == 0) + weight = signature[index++]; + + string address = signature[index..(index + 20)].ByteArrayToHexStringWithPrefix(); + index += 20; + + leafs.Add(new Topology(new SignerLeaf + { + address = new Address(address), + weight = new BigInteger(weight) + })); + + break; + } + + case Topology.FlagSignatureErc1271: + { + int weight = firstByte & 0x03; + if (weight == 0) + weight = signature[index++]; + + string signer = signature[index..(index + 20)].ByteArrayToHexStringWithPrefix(); + index += 20; + + int sizeSize = (firstByte & 0x0c) >> 2; + int dataSize = signature[index..(index + sizeSize)].ToInteger(); + index += sizeSize; + + byte[] data = signature[index..(index + dataSize)]; + index += dataSize; + + leafs.Add(new Topology(new SignedSignerLeaf + { + weight = new BigInteger(weight), + signature = new SignatureOfSignerLeafErc1271 + { + address = new Address(signer), + data = data + } + })); + + break; + } + + case Topology.FlagNode: + { + byte[] nodeHash = signature[index..(index + 32)]; + index += 32; + + leafs.Add(new Topology(new NodeLeaf + { + Value = nodeHash + })); + break; + } + + case Topology.FlagBranch: + { + int sizeSize = firstByte & 0x0f; + int size = signature[index..(index + sizeSize)].ToInteger(); + index += sizeSize; + + var branchBytes = signature[index..(index + size)]; + index += size; + + var (subNodes, leftover) = ParseBranch(branchBytes); + if (leftover.Length > 0) + throw new Exception("Leftover bytes in sub-branch"); + + leafs.Add(FoldNodes(subNodes)); + break; + } + + case Topology.FlagSubdigest: + { + byte[] digest = signature[index..(index + 32)]; + index += 32; + leafs.Add(new Topology(new SubdigestLeaf + { + digest = digest + })); + break; + } + + case Topology.FlagNested: + { + int externalWeight = (firstByte & 0x0c) >> 2; + if (externalWeight == 0) + externalWeight = signature[index++]; + + int internalThreshold = firstByte & 0x03; + if (internalThreshold == 0) + { + internalThreshold = signature[index..(index + 2)].ToInteger(); + index += 2; + } + + int size = signature[index..(index + 3)].ToInteger(); + index += 3; + + var nestedBytes = signature[index..(index + size)]; + index += size; + + var (subNodes, leftover) = ParseBranch(nestedBytes); + if (leftover.Length > 0) + throw new Exception("Leftover bytes in nested tree"); + + leafs.Add(new Topology(new NestedLeaf + { + tree = FoldNodes(subNodes), + weight = new BigInteger(externalWeight), + threshold = new BigInteger(internalThreshold) + })); + + break; + } + + case Topology.FlagSignatureEthSign: + { + int weight = firstByte & 0x0f; + if (weight == 0) + weight = signature[index++]; + + var rsy = RSY.Unpack(signature[index..(index + 64)]); + index += 64; + + leafs.Add(new Topology(new SignedSignerLeaf + { + weight = new BigInteger(weight), + signature = new SignatureOfSignerLeafEthSign + { + rsy = rsy + } + })); + + break; + } + + case Topology.FlagSignatureAnyAddressSubdigest: + { + byte[] digest = signature[index..(index + 32)]; + index += 32; + + leafs.Add(new Topology(new AnyAddressSubdigestLeaf + { + digest = digest, + })); + break; + } + + case Topology.FlagSignatureSapient: + case Topology.FlagSignatureSapientCompact: + { + int weight = firstByte & 0x03; + if (weight == 0) + weight = signature[index++]; + + string address = signature[index..(index + 20)].ByteArrayToHexStringWithPrefix(); + index += 20; + + int sizeSize = (firstByte & 0x0c) >> 2; + int dataSize = signature[index..(index + sizeSize)].ToInteger(); + index += sizeSize; + + byte[] data = signature[index..(index + dataSize)]; + index += dataSize; + + leafs.Add(new Topology(new SignedSapientSignerLeaf + { + weight = new BigInteger(weight), + signature = new SignatureOfSapientSignerLeaf + { + curType = flag == Topology.FlagSignatureSapient ? SignatureOfSapientSignerLeaf.Type.sapient : SignatureOfSapientSignerLeaf.Type.sapient_compact, + address = new Address(address), + data = data + } + })); + + break; + } + + default: + throw new Exception($"Invalid signature flag: 0x{flag:X}"); + } + } + + return (leafs.ToArray(), signature[index..]); + } + + public static Topology FoldNodes(Topology[] nodes) + { + if (nodes == null || nodes.Length == 0) + throw new Exception("Empty signature tree"); + + if (nodes.Length == 1) + return nodes[0]; + + var tree = nodes[0]; + for (var i = 1; i < nodes.Length; i++) + { + var node = new Node(tree, nodes[i]); + tree = new Topology(node); + } + + return tree; + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/SignatureUtils.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/SignatureUtils.cs.meta new file mode 100644 index 000000000..2eac66577 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/EcosystemWallet/Utils/SignatureUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb2ddb04028e4ed099e23518f606d037 +timeCreated: 1751190815 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ArrayUtils.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ArrayUtils.cs index 19f43068d..a14d614b8 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ArrayUtils.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ArrayUtils.cs @@ -114,5 +114,33 @@ public static T[] AppendObject(this T[] arr, T obj) newArr[length] = obj; return newArr; } + + public static T[] Slice(this T[] input, int start) + { + if (input == null || start >= input.Length) + return Array.Empty(); + + int length = input.Length - start; + T[] result = new T[length]; + Array.Copy(input, start, result, 0, length); + return result; + } + + public static T[] SubArray(this T[] array, int startIndex, int? length = null) + { + if (array == null) + throw new ArgumentNullException(nameof(array)); + if (startIndex < 0 || startIndex > array.Length) + throw new ArgumentOutOfRangeException(nameof(startIndex)); + + int actualLength = length ?? (array.Length - startIndex); + + if (actualLength < 0 || startIndex + actualLength > array.Length) + throw new ArgumentOutOfRangeException(nameof(length)); + + T[] result = new T[actualLength]; + Array.Copy(array, startIndex, result, 0, actualLength); + return result; + } } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayComparer.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayComparer.cs new file mode 100644 index 000000000..004bcb0f3 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayComparer.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +namespace Sequence.Utils +{ + public class ByteArrayComparer : IComparer + { + public int Compare(byte[]? x, byte[]? y) + { + if (x == null || y == null) + throw new ArgumentException("Cannot compare null byte arrays"); + + for (var i = 0; i < Math.Min(x.Length, y.Length); i++) + { + var cmp = x[i].CompareTo(y[i]); + if (cmp != 0) + return cmp; + } + return x.Length.CompareTo(y.Length); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayComparer.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayComparer.cs.meta new file mode 100644 index 000000000..28c8a25a7 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayComparer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ee1ab8a872cd4f91b3590fd752b0e006 +timeCreated: 1751358291 \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayExtensions.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayExtensions.cs index 93513e53b..e2fae6202 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayExtensions.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/ByteArrayExtensions.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Numerics; using System.Text; using UnityEngine; @@ -32,6 +33,28 @@ public static string ByteArrayToHexString(this byte[] byteArray) return string.Empty; } } + + public static BigInteger ToBigInteger(this byte[] data) + { + if (data == null || data.Length == 0) + return BigInteger.Zero; + + var unsignedLittleEndian = ConcatenateByteArrays(data.Reverse().ToArray(), new byte[] { 0x00 }); + return new BigInteger(unsignedLittleEndian); + } + + public static int ToInteger(this byte[] data) + { + if (data == null || data.Length == 0) + return 0; + + if (data.Length > 4) + throw new ArgumentOutOfRangeException(nameof(data), "Too many bytes to fit into an int (max 4)."); + + byte[] padded = new byte[4]; + Array.Copy(data.Reverse().ToArray(), 0, padded, 0, data.Length); + return BitConverter.ToInt32(padded, 0); + } public static bool HasPrefix(this byte[] b, byte[] prefix) { return b.AsSpan().StartsWith(prefix); @@ -83,7 +106,9 @@ public static byte[] BuildArrayWithRepeatedValue(byte[] value, int repetitions) public static byte[] PadLeft(this byte[] input, int totalSize) { if (input.Length > totalSize) - throw new ArgumentException("Input is larger than total size"); + { + return input; + } byte[] result = new byte[totalSize]; Buffer.BlockCopy(input, 0, result, totalSize - input.Length, input.Length); @@ -117,6 +142,20 @@ public static byte[] ByteArrayFromNumber(this BigInteger value, int? size = null return rawBytes; } + + public static int MinBytesFor(this int value) + { + return MinBytesFor(new BigInteger(value)); + } + + public static int MinBytesFor(this BigInteger value) + { + if (value < 0) + throw new ArgumentOutOfRangeException(nameof(value), "Value must be non-negative."); + + var hex = value.BigIntegerToHexString().WithoutHexPrefix(); + return (int)Math.Ceiling(hex.Length / 2.0); + } public static byte[] ByteArrayFromNumber(this int value, int size) { diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/DictionaryExtensions.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/DictionaryExtensions.cs index d69bffa45..93eea371a 100644 --- a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/DictionaryExtensions.cs +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/DictionaryExtensions.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using Unity.Plastic.Newtonsoft.Json; namespace Sequence.Utils { @@ -36,7 +37,5 @@ public static TKey[] GetKeys(this Dictionary dict) return keys; } - - } } \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/HexUtils.cs b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/HexUtils.cs new file mode 100644 index 000000000..4bdbe241c --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/HexUtils.cs @@ -0,0 +1,12 @@ +using System.Linq; + +namespace Sequence.Utils +{ + public static class HexUtils + { + public static string Concat(params string[] values) + { + return "0x" + string.Concat(values.Select(v => v.StartsWith("0x") ? v.Substring(2) : v)); + } + } +} \ No newline at end of file diff --git a/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/HexUtils.cs.meta b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/HexUtils.cs.meta new file mode 100644 index 000000000..569e25110 --- /dev/null +++ b/Packages/Sequence-Unity/Sequence/SequenceSDK/Utils/HexUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: df040c3dbaf4497aa9dd9c86dd9876f6 +timeCreated: 1751200497 \ No newline at end of file diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 475561ff7..94a3a2629 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -813,7 +813,7 @@ PlayerSettings: webGLThreadsSupport: 0 webGLDecompressionFallback: 1 scriptingDefineSymbols: - Android: + Android: ENABLE_SEQUENCE_ANDROID_SECURE_STORAGE Server: Standalone: UNITY_ASTOOLS_EXPERIMENTAL WebGL: VUPLEX_CCU;VUPLEX_STANDALONE diff --git a/testchain/artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json b/testchain/artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json new file mode 100644 index 000000000..0b37f0d81 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Estimator.sol/Estimator.json @@ -0,0 +1,1444 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Estimator", + "sourceName": "src/Estimator.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_current", + "type": "uint256" + } + ], + "name": "BadNonce", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "ImageHashIsZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLeft", + "type": "uint256" + } + ], + "name": "NotEnoughGas", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "Reverted", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallAborted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSucceeded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "DefinedHook", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "newImageHash", + "type": "bytes32" + } + ], + "name": "ImageHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_newNonce", + "type": "uint256" + } + ], + "name": "NonceChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "addHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "estimate", + "outputs": [ + { + "internalType": "uint256", + "name": "gasUsed", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "imageHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "readHook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + } + ], + "name": "readNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "removeHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + } + ], + "name": "selfExecute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "tokenReceived", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b506142b88061001f6000396000f3fe6080604052600436106101635760003560e01c80638943ec02116100c0578063ad55366b11610074578063bc197c8111610059578063bc197c81146104d7578063f23a6e611461051f578063f727ef1c146105655761016a565b8063ad55366b14610471578063b93ea7ad146104c45761016a565b806392dcb3fc116100a557806392dcb3fc146103fd578063975befdb14610449578063aaf10f421461045c5761016a565b80638943ec02146103bc5780638c3f5563146103dd5761016a565b80631f6a1eb9116101175780634fcf3eca116100fc5780634fcf3eca1461038157806351605d80146103945780636ea44577146103a95761016a565b80631f6a1eb91461034e57806329561426146103615761016a565b8063150b7a0211610148578063150b7a02146102735780631626ba7e146102e95780631a9b2337146103095761016a565b8063025b22bc1461022d57806313792a4a146102405761016a565b3661016a57005b6004361061022b5760006101866101813683613343565b610585565b905073ffffffffffffffffffffffffffffffffffffffff811615610229576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516101cf9291906133a9565b600060405180830381855af49150503d806000811461020a576040519150601f19603f3d011682016040523d82523d6000602084013e61020f565b606091505b50915091508161022157805160208201fd5b805160208201f35b505b005b61022b61023b3660046133e2565b6105d9565b34801561024c57600080fd5b5061026061025b366004613786565b610625565b6040519081526020015b60405180910390f35b34801561027f57600080fd5b506102b861028e3660046138cd565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161026a565b3480156102f557600080fd5b506102b861030436600461393c565b610790565b34801561031557600080fd5b5061032961032436600461399d565b610827565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026a565b61022b61035c3660046139ba565b610832565b34801561036d57600080fd5b5061022b61037c366004613a2b565b6108bb565b61022b61038f36600461399d565b6108ff565b3480156103a057600080fd5b506102606109c1565b61022b6103b7366004613a44565b6109f0565b3480156103c857600080fd5b5061022b6103d7366004613a86565b50505050565b3480156103e957600080fd5b506102606103f8366004613a2b565b610a5d565b34801561040957600080fd5b5061041d610418366004613a2b565b610a89565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161026a565b6102606104573660046139ba565b610a9e565b34801561046857600080fd5b50610329610b3c565b34801561047d57600080fd5b5061049161048c366004613786565b610b46565b604080519687526020870195909552921515938501939093526060840152608083019190915260a082015260c00161026a565b61022b6104d2366004613ac8565b610b80565b3480156104e357600080fd5b506102b86104f2366004613b42565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561052b57600080fd5b506102b861053a366004613c09565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b34801561057157600080fd5b5061022b610580366004613c81565b610c45565b60006105d37fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610d00565b92915050565b333014610619576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b61062281610d5e565b50565b60008084610100015151600161063b9190613d01565b67ffffffffffffffff811115610653576106536133fd565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b50905060005b856101000151518110156106ee5785610100015181815181106106a7576106a7613d14565b60200260200101518282815181106106c1576106c1613d14565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610682565b503381866101000151518151811061070857610708613d14565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261010085018190526000610742868686610db3565b50905080610782578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161061093929190613fc6565b5060019150505b9392505050565b604080516101208101825260006020820181905260609282018390528282018190526080820181905260a0820183905260c082018190526101008201929092526003815260e0810185905260006107e8828686610db3565b509050806107fc5750600091506107899050565b507f20c13b0b0000000000000000000000000000000000000000000000000000000095945050505050565b60006105d382610585565b60005a905060006108438686610f9a565b9050610857816060015182608001516113b8565b600080610865838787610db3565b91509150816108a6578286866040517fa2b6d61b00000000000000000000000000000000000000000000000000000000815260040161061093929190613fc6565b6108b18482856114a0565b5050505050505050565b3330146108f6576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b610622816117ff565b33301461093a576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b600061094582610585565b73ffffffffffffffffffffffffffffffffffffffff16036109b6576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610610565b61062281600061188f565b60006109eb7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b333014610a2b576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b60005a90506000610a3c8484610f9a565b90506000610a498261194f565b9050610a568382846114a0565b5050505050565b60006105d37f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610d00565b600080610a95836119ca565b91509150915091565b6000805a90506000610ab08787610f9a565b6060810151909150610aca90610ac581610a5d565b6113b8565b600080610ad8838888610db3565b9150915081610b19578287876040517fa2b6d61b00000000000000000000000000000000000000000000000000000000815260040161061093929190613fc6565b610b24848285611a16565b5a610b2f9085613ff6565b9998505050505050505050565b60006109eb305490565b600080600080600080610b5d898989600080611c5e565b939950919750945092509050610b7283611f83565b935093975093979195509350565b333014610bbb576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b6000610bc683610585565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610610565b610c41828261188f565b5050565b333014610c80576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b610c998383836bffffffffffffffffffffffff16611f97565b6040805184815273ffffffffffffffffffffffffffffffffffffffff841660208201526bffffffffffffffffffffffff83168183015290517febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19181900360600190a1505050565b6000808383604051602001610d1f929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b610d66813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b600080600084846000818110610dcb57610dcb613d14565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f80000000000000000000000000000000000000000000000000000000000000009081169003610f2057610e288661194f565b9150600080610e36846119ca565b91509150428111610e7d576040517ff95b6ab70000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610610565b73ffffffffffffffffffffffffffffffffffffffff821615801590610eb8575073ffffffffffffffffffffffffffffffffffffffff82163314155b15610f14576040517f8945c3130000000000000000000000000000000000000000000000000000000081526004810185905233602482015273ffffffffffffffffffffffffffffffffffffffff83166044820152606401610610565b60019450505050610f92565b6000806000610f33898989600080611c5e565b985092955090935091505082821015610f82576040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610610565b610f8b81611f83565b9550505050505b935093915050565b604080516101208101825260008082526020820181905260609282018390528282018190526080820181905260a0820183905260c0820181905260e0820152610100810191909152823560f81c60018082168103610ffe576000606084015261100f565b84810135606090811c908401526014015b6007600183901c1680156110625760016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0187840135610100929092039190911c166080850152908101905b600083601016601003611077575060016110a0565b836020166020036110935750600282019186013560f01c6110a0565b50600182019186013560f81c5b8067ffffffffffffffff8111156110b9576110b96133fd565b60405190808252806020026020018201604052801561114457816020015b6111316040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160008152602001600015158152602001600015158152602001600081525090565b8152602001906001900390816110d75790505b50604086015260005b818110156113ad5760018085019489013560f81c9080821690036111ac57308760400151838151811061118257611182613d14565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff90911690526111f6565b8489013560601c60148601886040015184815181106111cd576111cd613d14565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff90921690915294505b600280821690036112345784890135602086018860400151848151811061121f5761121f613d14565b60200260200101516020018197508281525050505b600480821690036112cc57600385019489013560e81c89868a6112578483613d01565b9261126493929190614009565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408901518051859081106112af576112af613d14565b6020908102919091010151604001526112c88187613d01565b9550505b6008808216900361130a578489013560208601886040015184815181106112f5576112f5613d14565b60200260200101516060018197508281525050505b8060101660ff166010148760400151838151811061132a5761132a613d14565b602002602001015160800190151590811515815250508060201660ff166020148760400151838151811061136057611360613d14565b602090810291909101015190151560a090910152604087015180516003600684901c1691908490811061139557611395613d14565b602090810291909101015160c001525060010161114d565b505050505092915050565b60006113c383610a5d565b905081811461140f576040517f9b6514f4000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610610565b604080517f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e60208083019190915281830186905282518083038401815260609092019092528051910120600183019081905560408051858152602081018390527f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881910160405180910390a150505050565b604081015151600090815b818110156117f7576000846040015182815181106114cb576114cb613d14565b602002602001015190508060a0015180156114e4575083155b156115285760408051878152602081018490527f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b910160405180910390a1506117ef565b606081015160009450801580159061153f5750805a105b1561157c5785835a6040517f2139527400000000000000000000000000000000000000000000000000000000815260040161061093929190614033565b600082608001511561165057825161164990831561159a578361159c565b5a5b634c4e814c60e01b8b8d898b8e606001518b604001516040516024016115c796959493929190614058565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612026565b9050611677565b8251602084015161167491908415611668578461166a565b5a5b866040015161203c565b90505b806117b25760c08301516116d357600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d88856116b4612054565b6040516116c393929190614095565b60405180910390a15050506117ef565b60c08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161173d578684611708612054565b6040517f7f6b0bb1000000000000000000000000000000000000000000000000000000008152600401610610939291906140b4565b60c08301517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016117b2577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b8885611793612054565b6040516117a293929190614095565b60405180910390a15050506117f7565b60408051898152602081018690527f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a910160405180910390a15050505b6001016114ab565b505050505050565b80611836576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61185f7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001610da8565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b600080611960836020015130612073565b9050600061196d84612140565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101849052604281018290529091506062015b6040516020818303038152906040528051906020012092505050919050565b600080806119f87fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8685610d00565b606081901c956bffffffffffffffffffffffff909116945092505050565b604081015151600090815b818110156117f757600084604001518281518110611a4157611a41613d14565b602002602001015190508060a001518015611a5a575083155b15611a9e5760408051878152602081018490527f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b910160405180910390a150611c56565b6060810151600094508015801590611ab55750805a105b15611af25785835a6040517f2139527400000000000000000000000000000000000000000000000000000000815260040161061093929190614033565b6000826080015115611b17578251611b1090831561159a578361159c565b9050611b32565b82516020840151611b2f91908415611668578461166a565b90505b80611c195760c0830151611b8e57600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d8885611b6f612054565b604051611b7e93929190614095565b60405180910390a1505050611c56565b60c08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611bc3578684611708612054565b60c08301517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c19577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b8885611793612054565b60408051898152602081018690527f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a910160405180910390a15050505b600101611a21565b6040805180820182526000808252602082018190529182918291829182918a3560f81c91600191808416148015611ca9575073ffffffffffffffffffffffffffffffffffffffff8916155b15611dc5578b82013560601c985060149091019089611dc55760038201918c013560e81c60008d848e611cdc8583613d01565b92611ce993929190614009565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517fccce3bc80000000000000000000000000000000000000000000000000000000081529293505073ffffffffffffffffffffffffffffffffffffffff8d169163ccce3bc89150611d7490309085906004016140df565b6040805180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190614116565b9250611dc08285613d01565b935050505b82600116600103611dff57611ded8d8a838f8f87908092611de893929190614009565b6123ac565b97509750975097509750505050611f76565b6002838116811460208f015283901c60071660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e850135610100929092039190911c16838201909650925060009050611e6a6001600586901c811690613d01565b60016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018f860135610100929092039190911c1699509092019150611eb58d61194f565b9350611ed38d858e8e86908092611ece93929190614009565b6125f0565b600090815260208a815260408083208352888252808320835273ffffffffffffffffffffffffffffffffffffffff8d1690915290208251919850965015801590611f1e575080518614155b8015611f2e575080602001518511155b15611f72576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528151600482015260208201516024820152604401610610565b5050505b9550955095509550959050565b6000611f8e82612f82565b50600192915050565b6120217fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86847fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166bffffffffffffffffffffffff8516176040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b505050565b60008060008351602085018787f4949350505050565b6000806000835160208501878988f195945050505050565b60603d604051915060208201818101604052818352816000823e505090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856120e357466120e6565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c0015b60405160208183030381529060405280519060200120905092915050565b6000808261010001516040516020016121599190614167565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff166122025760006121aa8460400151612f8d565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c0016119ab565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016122925760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016123025760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001612274565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd016123725760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001612274565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610610565b600080600080600061240e604051806101200160405280600060ff168152602001600015158152602001606081526020016000815260200160008152602001606081526020016000801916815260200160008019168152602001606081525090565b6002815260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b888210156125985760038201916000908b013560e81c6124568482613d01565b9150600090508a821461246a57600061246c565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036124c4576124b38f8d8d879086926124ab93929190614009565b600185611c5e565b939d50919b509950975095506124e6565b6124da858d8d879086926124ab93929190614009565b50929c50909a50985096505b89891015612532576124fa82858d8f614009565b8b8b6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161061094939291906141b3565b819350878d60000151036125455760008d525b828710612588576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810188905260248101849052604401610610565b50505060c0820185905283612436565b8a51158015906125ac57508a602001518511155b15611f72576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528b51600482015260208c01516024820152604401610610565b60008060005b83811015612f7857600181019085013560f881901c9060fc1c8061271357600f8216600081900361262e5750600183019287013560f81c5b60408051600080825260208281018085528d9052601b8c89019182013560ff81811c928301908116868801529235606086018190527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166080870181905296909a0199959094919390929160019060a0015b6020604051602081039080840390855afa1580156126c3573d6000803e3d6000fd5b5050506020604051035190508660ff168c019b5060006126e6828960ff1661301e565b90508b6126f35780612702565b60008c81526020829052604090205b9b50505050505050505050506125f6565b6001810361277757600f821660008190036127355750600183019287013560f81c5b601484019388013560601c600061274f8260ff851661301e565b90508661275c578061276b565b60008781526020829052604090205b965050505050506125f6565b6002810361296c576003821660008190036127995750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168288018098508192505050600081880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261285793929190614009565b6040518463ffffffff1660e01b8152600401612875939291906141da565b602060405180830381865afa158015612892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b691906141f4565b7fffffffff000000000000000000000000000000000000000000000000000000001614612927578c848d8d8b9085926128f193929190614009565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016106109493929190614211565b8097508460ff168a0199506000612941858760ff1661301e565b90508961294e578061295d565b60008a81526020829052604090205b995050505050505050506125f6565b600381036129a0576020830192870135846129875780612996565b60008581526020829052604090205b94505050506125f6565b60048103612a4357600f8216600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018a870135610100929092039190911c16858301809650819250505060008186019050600080612a158e8e8e8e8c908892611ece93929190614009565b91509150829750818a019950612a35898260009182526020526040902090565b9850505050505050506125f6565b60068103612b0d576003600283901c166000819003612a695750600183019287013560f81c5b600383166000819003612a835750600284019388013560f01c5b6000858a013560e81c600387018162ffffff169150809750819250505060008187019050600080612ac18f8f8f8f8d908892611ece93929190614009565b91509150829850848210612ad457998501995b6000612ae1828789613085565b90508a612aee5780612afd565b60008b81526020829052604090205b9a505050505050505050506125f6565b60058103612b7a576020830192870135888103612b48577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b6000612b53826130e9565b905085612b605780612b6f565b60008681526020829052604090205b9550505050506125f6565b60078103612c8057600f82166000819003612b9c5750600183019287013560f81c5b600080858a0135602087019650915089860135602087016040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018e905290975090915060ff82901c907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690601b830190600090600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff851690820152606081018890526080810185905260a0016126a1565b60088103612cd45760208301928701356000612c9c8b8261313d565b9050808203612cc9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b600061274f826131b8565b60098103612e0c57600382166000819003612cf65750600183019287013560f81c5b60008489013560601c601486019550905060006003600286901c1660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168188018098508193505050506000818701905060008373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612d9093929190614009565b6040518463ffffffff1660e01b8152600401612dae93929190613fc6565b602060405180830381865afa158015612dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612def9190614247565b90508197508460ff168a0199506000612941858760ff16846131f3565b600a8103612f4357600382166000819003612e2e5750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c1682880180985081925050506000818801905060008473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792612ec793929190614009565b6040518463ffffffff1660e01b8152600401612ee5939291906141da565b602060405180830381865afa158015612f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f269190614247565b90508198508560ff168b019a506000612ae1868860ff16846131f3565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610610565b5094509492505050565b60006105d382613261565b6000606060005b835181101561300f576000612fc1858381518110612fb457612fb4613d14565b6020026020010151613294565b90508281604051602001612fd6929190614260565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052925050600101612f94565b50805160209091012092915050565b6040517f53657175656e6365207369676e65723a0a00000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b16603182015260458101829052600090606501612122565b6040517f53657175656e6365206e657374656420636f6e6669673a0a000000000000000060208201526038810184905260588101839052607881018290526000906098015b6040516020818303038152906040528051906020012090509392505050565b6040517f53657175656e636520737461746963206469676573743a0a00000000000000006020820152603881018290526000906058015b604051602081830303815290604052805190602001209050919050565b60008061314e846020015184612073565b9050600061315b85612140565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810184905260428101829052909150606201604051602081830303815290604052805190602001209250505092915050565b604080517f53657175656e636520616e792061646472657373207375626469676573743a0a6020820152908101829052600090606001613120565b6040517f53657175656e63652073617069656e7420636f6e6669673a0a0000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166039820152604d8101839052606d8101829052600090608d016130ca565b600081158015906105d35750507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161312098979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156133a2577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b8183823760009101908152919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146133dd57600080fd5b919050565b6000602082840312156133f457600080fd5b610789826133b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561344f5761344f6133fd565b60405290565b604051610120810167ffffffffffffffff8111828210171561344f5761344f6133fd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134c0576134c06133fd565b604052919050565b803560ff811681146133dd57600080fd5b803580151581146133dd57600080fd5b600067ffffffffffffffff821115613503576135036133fd565b5060051b60200190565b600082601f83011261351e57600080fd5b813567ffffffffffffffff811115613538576135386133fd565b61356960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613479565b81815284602083860101111561357e57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126135ac57600080fd5b81356135bf6135ba826134e9565b613479565b8082825260208201915060208360051b8601019250858311156135e157600080fd5b602085015b838110156136ce57803567ffffffffffffffff81111561360557600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561363957600080fd5b61364161342c565b61364d602083016133b9565b815260408201356020820152606082013567ffffffffffffffff81111561367357600080fd5b6136828a60208386010161350d565b6040830152506080820135606082015261369e60a083016134d9565b60808201526136af60c083016134d9565b60a082015260e0919091013560c08201528352602092830192016135e6565b5095945050505050565b600082601f8301126136e957600080fd5b81356136f76135ba826134e9565b8082825260208201915060208360051b86010192508583111561371957600080fd5b602085015b838110156136ce5761372f816133b9565b83526020928301920161371e565b60008083601f84011261374f57600080fd5b50813567ffffffffffffffff81111561376757600080fd5b60208301915083602082850101111561377f57600080fd5b9250929050565b60008060006040848603121561379b57600080fd5b833567ffffffffffffffff8111156137b257600080fd5b840161012081870312156137c557600080fd5b6137cd613455565b6137d6826134c8565b81526137e4602083016134d9565b6020820152604082013567ffffffffffffffff81111561380357600080fd5b61380f8882850161359b565b604083015250606082810135908201526080808301359082015260a082013567ffffffffffffffff81111561384357600080fd5b61384f8882850161350d565b60a08301525060c0828101359082015260e0808301359082015261010082013567ffffffffffffffff81111561388457600080fd5b613890888285016136d8565b61010083015250935050602084013567ffffffffffffffff8111156138b457600080fd5b6138c08682870161373d565b9497909650939450505050565b6000806000806000608086880312156138e557600080fd5b6138ee866133b9565b94506138fc602087016133b9565b935060408601359250606086013567ffffffffffffffff81111561391f57600080fd5b61392b8882890161373d565b969995985093965092949392505050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff8111156138b457600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461062257600080fd5b6000602082840312156139af57600080fd5b81356107898161396f565b600080600080604085870312156139d057600080fd5b843567ffffffffffffffff8111156139e757600080fd5b6139f38782880161373d565b909550935050602085013567ffffffffffffffff811115613a1357600080fd5b613a1f8782880161373d565b95989497509550505050565b600060208284031215613a3d57600080fd5b5035919050565b60008060208385031215613a5757600080fd5b823567ffffffffffffffff811115613a6e57600080fd5b613a7a8582860161373d565b90969095509350505050565b60008060008060608587031215613a9c57600080fd5b613aa5856133b9565b935060208501359250604085013567ffffffffffffffff811115613a1357600080fd5b60008060408385031215613adb57600080fd5b8235613ae68161396f565b9150613af4602084016133b9565b90509250929050565b60008083601f840112613b0f57600080fd5b50813567ffffffffffffffff811115613b2757600080fd5b6020830191508360208260051b850101111561377f57600080fd5b60008060008060008060008060a0898b031215613b5e57600080fd5b613b67896133b9565b9750613b7560208a016133b9565b9650604089013567ffffffffffffffff811115613b9157600080fd5b613b9d8b828c01613afd565b909750955050606089013567ffffffffffffffff811115613bbd57600080fd5b613bc98b828c01613afd565b909550935050608089013567ffffffffffffffff811115613be957600080fd5b613bf58b828c0161373d565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215613c2257600080fd5b613c2b876133b9565b9550613c39602088016133b9565b94506040870135935060608701359250608087013567ffffffffffffffff811115613c6357600080fd5b613c6f89828a0161373d565b979a9699509497509295939492505050565b600080600060608486031215613c9657600080fd5b83359250613ca6602085016133b9565b915060408401356bffffffffffffffffffffffff81168114613cc757600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105d3576105d3613cd2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811015613d5e578181015183820152602001613d46565b50506000910152565b60008151808452613d7f816020860160208601613d43565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b83811015613e81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852815173ffffffffffffffffffffffffffffffffffffffff815116845260208101516020850152604081015160e06040860152613e3d60e0860182613d67565b6060838101519087015260808084015115159087015260a08084015115159087015260c0928301519290950191909152506020978801979190910190600101613dcf565b50909695505050505050565b600081518084526020840193506020830160005b82811015613ed557815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101613ea1565b5093949350505050565b805160ff16825260006020820151613efb602085018215159052565b5060408201516101206040850152613f17610120850182613db1565b9050606083015160608501526080830151608085015260a083015184820360a0860152613f448282613d67565b91505060c083015160c085015260e083015160e0850152610100830151848203610100860152613f748282613e8d565b95945050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000613fd96040830186613edf565b8281036020840152613fec818587613f7d565b9695505050505050565b818103818111156105d3576105d3613cd2565b6000808585111561401957600080fd5b8386111561402657600080fd5b5050820193919092039150565b6060815260006140466060830186613edf565b60208301949094525060400152919050565b86815285602082015284604082015283606082015282608082015260c060a0820152600061408960c0830184613d67565b98975050505050505050565b838152826020820152606060408201526000613f746060830184613d67565b6060815260006140c76060830186613edf565b8460208401528281036040840152613fec8185613d67565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061410e6040830184613d67565b949350505050565b6000604082840312801561412957600080fd5b506040805190810167ffffffffffffffff8111828210171561414d5761414d6133fd565b604052825181526020928301519281019290925250919050565b8151600090829060208501835b828110156141a857815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101614174565b509195945050505050565b6060815260006141c7606083018688613f7d565b6020830194909452506040015292915050565b838152604060208201526000613f74604083018486613f7d565b60006020828403121561420657600080fd5b81516107898161396f565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000613fec606083018486613f7d565b60006020828403121561425957600080fd5b5051919050565b60008351614272818460208801613d43565b919091019182525060200191905056fea26469706673582212207478396388582c6d197eb43e1bb7658c82fc494983fa9e400c6e3dfe04350be964736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106101635760003560e01c80638943ec02116100c0578063ad55366b11610074578063bc197c8111610059578063bc197c81146104d7578063f23a6e611461051f578063f727ef1c146105655761016a565b8063ad55366b14610471578063b93ea7ad146104c45761016a565b806392dcb3fc116100a557806392dcb3fc146103fd578063975befdb14610449578063aaf10f421461045c5761016a565b80638943ec02146103bc5780638c3f5563146103dd5761016a565b80631f6a1eb9116101175780634fcf3eca116100fc5780634fcf3eca1461038157806351605d80146103945780636ea44577146103a95761016a565b80631f6a1eb91461034e57806329561426146103615761016a565b8063150b7a0211610148578063150b7a02146102735780631626ba7e146102e95780631a9b2337146103095761016a565b8063025b22bc1461022d57806313792a4a146102405761016a565b3661016a57005b6004361061022b5760006101866101813683613343565b610585565b905073ffffffffffffffffffffffffffffffffffffffff811615610229576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516101cf9291906133a9565b600060405180830381855af49150503d806000811461020a576040519150601f19603f3d011682016040523d82523d6000602084013e61020f565b606091505b50915091508161022157805160208201fd5b805160208201f35b505b005b61022b61023b3660046133e2565b6105d9565b34801561024c57600080fd5b5061026061025b366004613786565b610625565b6040519081526020015b60405180910390f35b34801561027f57600080fd5b506102b861028e3660046138cd565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161026a565b3480156102f557600080fd5b506102b861030436600461393c565b610790565b34801561031557600080fd5b5061032961032436600461399d565b610827565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026a565b61022b61035c3660046139ba565b610832565b34801561036d57600080fd5b5061022b61037c366004613a2b565b6108bb565b61022b61038f36600461399d565b6108ff565b3480156103a057600080fd5b506102606109c1565b61022b6103b7366004613a44565b6109f0565b3480156103c857600080fd5b5061022b6103d7366004613a86565b50505050565b3480156103e957600080fd5b506102606103f8366004613a2b565b610a5d565b34801561040957600080fd5b5061041d610418366004613a2b565b610a89565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260208301919091520161026a565b6102606104573660046139ba565b610a9e565b34801561046857600080fd5b50610329610b3c565b34801561047d57600080fd5b5061049161048c366004613786565b610b46565b604080519687526020870195909552921515938501939093526060840152608083019190915260a082015260c00161026a565b61022b6104d2366004613ac8565b610b80565b3480156104e357600080fd5b506102b86104f2366004613b42565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561052b57600080fd5b506102b861053a366004613c09565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b34801561057157600080fd5b5061022b610580366004613c81565b610c45565b60006105d37fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff000000000000000000000000000000000000000000000000000000008416610d00565b92915050565b333014610619576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b61062281610d5e565b50565b60008084610100015151600161063b9190613d01565b67ffffffffffffffff811115610653576106536133fd565b60405190808252806020026020018201604052801561067c578160200160208202803683370190505b50905060005b856101000151518110156106ee5785610100015181815181106106a7576106a7613d14565b60200260200101518282815181106106c1576106c1613d14565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610682565b503381866101000151518151811061070857610708613d14565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261010085018190526000610742868686610db3565b50905080610782578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161061093929190613fc6565b5060019150505b9392505050565b604080516101208101825260006020820181905260609282018390528282018190526080820181905260a0820183905260c082018190526101008201929092526003815260e0810185905260006107e8828686610db3565b509050806107fc5750600091506107899050565b507f20c13b0b0000000000000000000000000000000000000000000000000000000095945050505050565b60006105d382610585565b60005a905060006108438686610f9a565b9050610857816060015182608001516113b8565b600080610865838787610db3565b91509150816108a6578286866040517fa2b6d61b00000000000000000000000000000000000000000000000000000000815260040161061093929190613fc6565b6108b18482856114a0565b5050505050505050565b3330146108f6576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b610622816117ff565b33301461093a576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b600061094582610585565b73ffffffffffffffffffffffffffffffffffffffff16036109b6576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610610565b61062281600061188f565b60006109eb7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b333014610a2b576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b60005a90506000610a3c8484610f9a565b90506000610a498261194f565b9050610a568382846114a0565b5050505050565b60006105d37f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83610d00565b600080610a95836119ca565b91509150915091565b6000805a90506000610ab08787610f9a565b6060810151909150610aca90610ac581610a5d565b6113b8565b600080610ad8838888610db3565b9150915081610b19578287876040517fa2b6d61b00000000000000000000000000000000000000000000000000000000815260040161061093929190613fc6565b610b24848285611a16565b5a610b2f9085613ff6565b9998505050505050505050565b60006109eb305490565b600080600080600080610b5d898989600080611c5e565b939950919750945092509050610b7283611f83565b935093975093979195509350565b333014610bbb576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b6000610bc683610585565b73ffffffffffffffffffffffffffffffffffffffff1614610c37576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610610565b610c41828261188f565b5050565b333014610c80576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610610565b610c998383836bffffffffffffffffffffffff16611f97565b6040805184815273ffffffffffffffffffffffffffffffffffffffff841660208201526bffffffffffffffffffffffff83168183015290517febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19181900360600190a1505050565b6000808383604051602001610d1f929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b610d66813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b600080600084846000818110610dcb57610dcb613d14565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f80000000000000000000000000000000000000000000000000000000000000009081169003610f2057610e288661194f565b9150600080610e36846119ca565b91509150428111610e7d576040517ff95b6ab70000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610610565b73ffffffffffffffffffffffffffffffffffffffff821615801590610eb8575073ffffffffffffffffffffffffffffffffffffffff82163314155b15610f14576040517f8945c3130000000000000000000000000000000000000000000000000000000081526004810185905233602482015273ffffffffffffffffffffffffffffffffffffffff83166044820152606401610610565b60019450505050610f92565b6000806000610f33898989600080611c5e565b985092955090935091505082821015610f82576040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610610565b610f8b81611f83565b9550505050505b935093915050565b604080516101208101825260008082526020820181905260609282018390528282018190526080820181905260a0820183905260c0820181905260e0820152610100810191909152823560f81c60018082168103610ffe576000606084015261100f565b84810135606090811c908401526014015b6007600183901c1680156110625760016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0187840135610100929092039190911c166080850152908101905b600083601016601003611077575060016110a0565b836020166020036110935750600282019186013560f01c6110a0565b50600182019186013560f81c5b8067ffffffffffffffff8111156110b9576110b96133fd565b60405190808252806020026020018201604052801561114457816020015b6111316040518060e00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016060815260200160008152602001600015158152602001600015158152602001600081525090565b8152602001906001900390816110d75790505b50604086015260005b818110156113ad5760018085019489013560f81c9080821690036111ac57308760400151838151811061118257611182613d14565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff90911690526111f6565b8489013560601c60148601886040015184815181106111cd576111cd613d14565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff90921690915294505b600280821690036112345784890135602086018860400151848151811061121f5761121f613d14565b60200260200101516020018197508281525050505b600480821690036112cc57600385019489013560e81c89868a6112578483613d01565b9261126493929190614009565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408901518051859081106112af576112af613d14565b6020908102919091010151604001526112c88187613d01565b9550505b6008808216900361130a578489013560208601886040015184815181106112f5576112f5613d14565b60200260200101516060018197508281525050505b8060101660ff166010148760400151838151811061132a5761132a613d14565b602002602001015160800190151590811515815250508060201660ff166020148760400151838151811061136057611360613d14565b602090810291909101015190151560a090910152604087015180516003600684901c1691908490811061139557611395613d14565b602090810291909101015160c001525060010161114d565b505050505092915050565b60006113c383610a5d565b905081811461140f576040517f9b6514f4000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401610610565b604080517f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e60208083019190915281830186905282518083038401815260609092019092528051910120600183019081905560408051858152602081018390527f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881910160405180910390a150505050565b604081015151600090815b818110156117f7576000846040015182815181106114cb576114cb613d14565b602002602001015190508060a0015180156114e4575083155b156115285760408051878152602081018490527f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b910160405180910390a1506117ef565b606081015160009450801580159061153f5750805a105b1561157c5785835a6040517f2139527400000000000000000000000000000000000000000000000000000000815260040161061093929190614033565b600082608001511561165057825161164990831561159a578361159c565b5a5b634c4e814c60e01b8b8d898b8e606001518b604001516040516024016115c796959493929190614058565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612026565b9050611677565b8251602084015161167491908415611668578461166a565b5a5b866040015161203c565b90505b806117b25760c08301516116d357600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d88856116b4612054565b6040516116c393929190614095565b60405180910390a15050506117ef565b60c08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161173d578684611708612054565b6040517f7f6b0bb1000000000000000000000000000000000000000000000000000000008152600401610610939291906140b4565b60c08301517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016117b2577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b8885611793612054565b6040516117a293929190614095565b60405180910390a15050506117f7565b60408051898152602081018690527f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a910160405180910390a15050505b6001016114ab565b505050505050565b80611836576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61185f7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001610da8565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b600080611960836020015130612073565b9050600061196d84612140565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101849052604281018290529091506062015b6040516020818303038152906040528051906020012092505050919050565b600080806119f87fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8685610d00565b606081901c956bffffffffffffffffffffffff909116945092505050565b604081015151600090815b818110156117f757600084604001518281518110611a4157611a41613d14565b602002602001015190508060a001518015611a5a575083155b15611a9e5760408051878152602081018490527f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b910160405180910390a150611c56565b6060810151600094508015801590611ab55750805a105b15611af25785835a6040517f2139527400000000000000000000000000000000000000000000000000000000815260040161061093929190614033565b6000826080015115611b17578251611b1090831561159a578361159c565b9050611b32565b82516020840151611b2f91908415611668578461166a565b90505b80611c195760c0830151611b8e57600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d8885611b6f612054565b604051611b7e93929190614095565b60405180910390a1505050611c56565b60c08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611bc3578684611708612054565b60c08301517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c19577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b8885611793612054565b60408051898152602081018690527f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a910160405180910390a15050505b600101611a21565b6040805180820182526000808252602082018190529182918291829182918a3560f81c91600191808416148015611ca9575073ffffffffffffffffffffffffffffffffffffffff8916155b15611dc5578b82013560601c985060149091019089611dc55760038201918c013560e81c60008d848e611cdc8583613d01565b92611ce993929190614009565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517fccce3bc80000000000000000000000000000000000000000000000000000000081529293505073ffffffffffffffffffffffffffffffffffffffff8d169163ccce3bc89150611d7490309085906004016140df565b6040805180830381865afa158015611d90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611db49190614116565b9250611dc08285613d01565b935050505b82600116600103611dff57611ded8d8a838f8f87908092611de893929190614009565b6123ac565b97509750975097509750505050611f76565b6002838116811460208f015283901c60071660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e850135610100929092039190911c16838201909650925060009050611e6a6001600586901c811690613d01565b60016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018f860135610100929092039190911c1699509092019150611eb58d61194f565b9350611ed38d858e8e86908092611ece93929190614009565b6125f0565b600090815260208a815260408083208352888252808320835273ffffffffffffffffffffffffffffffffffffffff8d1690915290208251919850965015801590611f1e575080518614155b8015611f2e575080602001518511155b15611f72576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528151600482015260208201516024820152604401610610565b5050505b9550955095509550959050565b6000611f8e82612f82565b50600192915050565b6120217fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86847fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166bffffffffffffffffffffffff8516176040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b505050565b60008060008351602085018787f4949350505050565b6000806000835160208501878988f195945050505050565b60603d604051915060208201818101604052818352816000823e505090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856120e357466120e6565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c0015b60405160208183030381529060405280519060200120905092915050565b6000808261010001516040516020016121599190614167565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff166122025760006121aa8460400151612f8d565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c0016119ab565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016122925760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016123025760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001612274565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd016123725760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001612274565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610610565b600080600080600061240e604051806101200160405280600060ff168152602001600015158152602001606081526020016000815260200160008152602001606081526020016000801916815260200160008019168152602001606081525090565b6002815260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b888210156125985760038201916000908b013560e81c6124568482613d01565b9150600090508a821461246a57600061246c565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036124c4576124b38f8d8d879086926124ab93929190614009565b600185611c5e565b939d50919b509950975095506124e6565b6124da858d8d879086926124ab93929190614009565b50929c50909a50985096505b89891015612532576124fa82858d8f614009565b8b8b6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161061094939291906141b3565b819350878d60000151036125455760008d525b828710612588576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810188905260248101849052604401610610565b50505060c0820185905283612436565b8a51158015906125ac57508a602001518511155b15611f72576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528b51600482015260208c01516024820152604401610610565b60008060005b83811015612f7857600181019085013560f881901c9060fc1c8061271357600f8216600081900361262e5750600183019287013560f81c5b60408051600080825260208281018085528d9052601b8c89019182013560ff81811c928301908116868801529235606086018190527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166080870181905296909a0199959094919390929160019060a0015b6020604051602081039080840390855afa1580156126c3573d6000803e3d6000fd5b5050506020604051035190508660ff168c019b5060006126e6828960ff1661301e565b90508b6126f35780612702565b60008c81526020829052604090205b9b50505050505050505050506125f6565b6001810361277757600f821660008190036127355750600183019287013560f81c5b601484019388013560601c600061274f8260ff851661301e565b90508661275c578061276b565b60008781526020829052604090205b965050505050506125f6565b6002810361296c576003821660008190036127995750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168288018098508192505050600081880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261285793929190614009565b6040518463ffffffff1660e01b8152600401612875939291906141da565b602060405180830381865afa158015612892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b691906141f4565b7fffffffff000000000000000000000000000000000000000000000000000000001614612927578c848d8d8b9085926128f193929190614009565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016106109493929190614211565b8097508460ff168a0199506000612941858760ff1661301e565b90508961294e578061295d565b60008a81526020829052604090205b995050505050505050506125f6565b600381036129a0576020830192870135846129875780612996565b60008581526020829052604090205b94505050506125f6565b60048103612a4357600f8216600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018a870135610100929092039190911c16858301809650819250505060008186019050600080612a158e8e8e8e8c908892611ece93929190614009565b91509150829750818a019950612a35898260009182526020526040902090565b9850505050505050506125f6565b60068103612b0d576003600283901c166000819003612a695750600183019287013560f81c5b600383166000819003612a835750600284019388013560f01c5b6000858a013560e81c600387018162ffffff169150809750819250505060008187019050600080612ac18f8f8f8f8d908892611ece93929190614009565b91509150829850848210612ad457998501995b6000612ae1828789613085565b90508a612aee5780612afd565b60008b81526020829052604090205b9a505050505050505050506125f6565b60058103612b7a576020830192870135888103612b48577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b6000612b53826130e9565b905085612b605780612b6f565b60008681526020829052604090205b9550505050506125f6565b60078103612c8057600f82166000819003612b9c5750600183019287013560f81c5b600080858a0135602087019650915089860135602087016040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018e905290975090915060ff82901c907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690601b830190600090600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff851690820152606081018890526080810185905260a0016126a1565b60088103612cd45760208301928701356000612c9c8b8261313d565b9050808203612cc9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b600061274f826131b8565b60098103612e0c57600382166000819003612cf65750600183019287013560f81c5b60008489013560601c601486019550905060006003600286901c1660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168188018098508193505050506000818701905060008373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612d9093929190614009565b6040518463ffffffff1660e01b8152600401612dae93929190613fc6565b602060405180830381865afa158015612dcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612def9190614247565b90508197508460ff168a0199506000612941858760ff16846131f3565b600a8103612f4357600382166000819003612e2e5750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c1682880180985081925050506000818801905060008473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792612ec793929190614009565b6040518463ffffffff1660e01b8152600401612ee5939291906141da565b602060405180830381865afa158015612f02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f269190614247565b90508198508560ff168b019a506000612ae1868860ff16846131f3565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610610565b5094509492505050565b60006105d382613261565b6000606060005b835181101561300f576000612fc1858381518110612fb457612fb4613d14565b6020026020010151613294565b90508281604051602001612fd6929190614260565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052925050600101612f94565b50805160209091012092915050565b6040517f53657175656e6365207369676e65723a0a00000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b16603182015260458101829052600090606501612122565b6040517f53657175656e6365206e657374656420636f6e6669673a0a000000000000000060208201526038810184905260588101839052607881018290526000906098015b6040516020818303038152906040528051906020012090509392505050565b6040517f53657175656e636520737461746963206469676573743a0a00000000000000006020820152603881018290526000906058015b604051602081830303815290604052805190602001209050919050565b60008061314e846020015184612073565b9050600061315b85612140565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810184905260428101829052909150606201604051602081830303815290604052805190602001209250505092915050565b604080517f53657175656e636520616e792061646472657373207375626469676573743a0a6020820152908101829052600090606001613120565b6040517f53657175656e63652073617069656e7420636f6e6669673a0a0000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166039820152604d8101839052606d8101829052600090608d016130ca565b600081158015906105d35750507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8541490565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161312098979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156133a2577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b8183823760009101908152919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146133dd57600080fd5b919050565b6000602082840312156133f457600080fd5b610789826133b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561344f5761344f6133fd565b60405290565b604051610120810167ffffffffffffffff8111828210171561344f5761344f6133fd565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156134c0576134c06133fd565b604052919050565b803560ff811681146133dd57600080fd5b803580151581146133dd57600080fd5b600067ffffffffffffffff821115613503576135036133fd565b5060051b60200190565b600082601f83011261351e57600080fd5b813567ffffffffffffffff811115613538576135386133fd565b61356960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613479565b81815284602083860101111561357e57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126135ac57600080fd5b81356135bf6135ba826134e9565b613479565b8082825260208201915060208360051b8601019250858311156135e157600080fd5b602085015b838110156136ce57803567ffffffffffffffff81111561360557600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561363957600080fd5b61364161342c565b61364d602083016133b9565b815260408201356020820152606082013567ffffffffffffffff81111561367357600080fd5b6136828a60208386010161350d565b6040830152506080820135606082015261369e60a083016134d9565b60808201526136af60c083016134d9565b60a082015260e0919091013560c08201528352602092830192016135e6565b5095945050505050565b600082601f8301126136e957600080fd5b81356136f76135ba826134e9565b8082825260208201915060208360051b86010192508583111561371957600080fd5b602085015b838110156136ce5761372f816133b9565b83526020928301920161371e565b60008083601f84011261374f57600080fd5b50813567ffffffffffffffff81111561376757600080fd5b60208301915083602082850101111561377f57600080fd5b9250929050565b60008060006040848603121561379b57600080fd5b833567ffffffffffffffff8111156137b257600080fd5b840161012081870312156137c557600080fd5b6137cd613455565b6137d6826134c8565b81526137e4602083016134d9565b6020820152604082013567ffffffffffffffff81111561380357600080fd5b61380f8882850161359b565b604083015250606082810135908201526080808301359082015260a082013567ffffffffffffffff81111561384357600080fd5b61384f8882850161350d565b60a08301525060c0828101359082015260e0808301359082015261010082013567ffffffffffffffff81111561388457600080fd5b613890888285016136d8565b61010083015250935050602084013567ffffffffffffffff8111156138b457600080fd5b6138c08682870161373d565b9497909650939450505050565b6000806000806000608086880312156138e557600080fd5b6138ee866133b9565b94506138fc602087016133b9565b935060408601359250606086013567ffffffffffffffff81111561391f57600080fd5b61392b8882890161373d565b969995985093965092949392505050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff8111156138b457600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008116811461062257600080fd5b6000602082840312156139af57600080fd5b81356107898161396f565b600080600080604085870312156139d057600080fd5b843567ffffffffffffffff8111156139e757600080fd5b6139f38782880161373d565b909550935050602085013567ffffffffffffffff811115613a1357600080fd5b613a1f8782880161373d565b95989497509550505050565b600060208284031215613a3d57600080fd5b5035919050565b60008060208385031215613a5757600080fd5b823567ffffffffffffffff811115613a6e57600080fd5b613a7a8582860161373d565b90969095509350505050565b60008060008060608587031215613a9c57600080fd5b613aa5856133b9565b935060208501359250604085013567ffffffffffffffff811115613a1357600080fd5b60008060408385031215613adb57600080fd5b8235613ae68161396f565b9150613af4602084016133b9565b90509250929050565b60008083601f840112613b0f57600080fd5b50813567ffffffffffffffff811115613b2757600080fd5b6020830191508360208260051b850101111561377f57600080fd5b60008060008060008060008060a0898b031215613b5e57600080fd5b613b67896133b9565b9750613b7560208a016133b9565b9650604089013567ffffffffffffffff811115613b9157600080fd5b613b9d8b828c01613afd565b909750955050606089013567ffffffffffffffff811115613bbd57600080fd5b613bc98b828c01613afd565b909550935050608089013567ffffffffffffffff811115613be957600080fd5b613bf58b828c0161373d565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215613c2257600080fd5b613c2b876133b9565b9550613c39602088016133b9565b94506040870135935060608701359250608087013567ffffffffffffffff811115613c6357600080fd5b613c6f89828a0161373d565b979a9699509497509295939492505050565b600080600060608486031215613c9657600080fd5b83359250613ca6602085016133b9565b915060408401356bffffffffffffffffffffffff81168114613cc757600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105d3576105d3613cd2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811015613d5e578181015183820152602001613d46565b50506000910152565b60008151808452613d7f816020860160208601613d43565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b83811015613e81577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852815173ffffffffffffffffffffffffffffffffffffffff815116845260208101516020850152604081015160e06040860152613e3d60e0860182613d67565b6060838101519087015260808084015115159087015260a08084015115159087015260c0928301519290950191909152506020978801979190910190600101613dcf565b50909695505050505050565b600081518084526020840193506020830160005b82811015613ed557815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101613ea1565b5093949350505050565b805160ff16825260006020820151613efb602085018215159052565b5060408201516101206040850152613f17610120850182613db1565b9050606083015160608501526080830151608085015260a083015184820360a0860152613f448282613d67565b91505060c083015160c085015260e083015160e0850152610100830151848203610100860152613f748282613e8d565b95945050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000613fd96040830186613edf565b8281036020840152613fec818587613f7d565b9695505050505050565b818103818111156105d3576105d3613cd2565b6000808585111561401957600080fd5b8386111561402657600080fd5b5050820193919092039150565b6060815260006140466060830186613edf565b60208301949094525060400152919050565b86815285602082015284604082015283606082015282608082015260c060a0820152600061408960c0830184613d67565b98975050505050505050565b838152826020820152606060408201526000613f746060830184613d67565b6060815260006140c76060830186613edf565b8460208401528281036040840152613fec8185613d67565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600061410e6040830184613d67565b949350505050565b6000604082840312801561412957600080fd5b506040805190810167ffffffffffffffff8111828210171561414d5761414d6133fd565b604052825181526020928301519281019290925250919050565b8151600090829060208501835b828110156141a857815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101614174565b509195945050505050565b6060815260006141c7606083018688613f7d565b6020830194909452506040015292915050565b838152604060208201526000613f74604083018486613f7d565b60006020828403121561420657600080fd5b81516107898161396f565b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000613fec606083018486613f7d565b60006020828403121561425957600080fd5b5051919050565b60008351614272818460208801613d43565b919091019182525060200191905056fea26469706673582212207478396388582c6d197eb43e1bb7658c82fc494983fa9e400c6e3dfe04350be964736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/Factory.sol/Factory.json b/testchain/artifacts/wallet-contracts-v3/Factory.sol/Factory.json new file mode 100644 index 000000000..46acc8953 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Factory.sol/Factory.json @@ -0,0 +1,51 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Factory", + "sourceName": "src/Factory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_mainModule", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "DeployFailed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_mainModule", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "_contract", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600e575f5ffd5b5061035a8061001c5f395ff3fe60806040526004361061001d575f3560e01c806332c02a1414610021575b5f5ffd5b61003b600480360381019061003691906101ba565b610051565b6040516100489190610207565b60405180910390f35b5f5f6040518060600160405280602c81526020016102f9602c91398473ffffffffffffffffffffffffffffffffffffffff1660405160200161009492919061029b565b60405160208183030381529060405290508281516020830134f591505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101225783836040517f8caac8050000000000000000000000000000000000000000000000000000000081526004016101199291906102d1565b60405180910390fd5b5092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101568261012d565b9050919050565b6101668161014c565b8114610170575f5ffd5b50565b5f813590506101818161015d565b92915050565b5f819050919050565b61019981610187565b81146101a3575f5ffd5b50565b5f813590506101b481610190565b92915050565b5f5f604083850312156101d0576101cf610129565b5b5f6101dd85828601610173565b92505060206101ee858286016101a6565b9150509250929050565b6102018161014c565b82525050565b5f60208201905061021a5f8301846101f8565b92915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61024c82610220565b610256818561022a565b9350610266818560208601610234565b80840191505092915050565b5f819050919050565b5f819050919050565b61029561029082610272565b61027b565b82525050565b5f6102a68285610242565b91506102b28284610284565b6020820191508190509392505050565b6102cb81610187565b82525050565b5f6040820190506102e45f8301856101f8565b6102f160208301846102c2565b939250505056fe603e600e3d39601e805130553df33d3d34601c57363d3d373d363d30545af43d82803e903d91601c57fd5bf3a264697066735822122009e132ab9d1c11bdbac018e6131534eb4d4460c20d453928a5a0b89cf4ecf4fc64736f6c634300081c0033", + "deployedBytecode": "0x60806040526004361061001d575f3560e01c806332c02a1414610021575b5f5ffd5b61003b600480360381019061003691906101ba565b610051565b6040516100489190610207565b60405180910390f35b5f5f6040518060600160405280602c81526020016102f9602c91398473ffffffffffffffffffffffffffffffffffffffff1660405160200161009492919061029b565b60405160208183030381529060405290508281516020830134f591505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036101225783836040517f8caac8050000000000000000000000000000000000000000000000000000000081526004016101199291906102d1565b60405180910390fd5b5092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101568261012d565b9050919050565b6101668161014c565b8114610170575f5ffd5b50565b5f813590506101818161015d565b92915050565b5f819050919050565b61019981610187565b81146101a3575f5ffd5b50565b5f813590506101b481610190565b92915050565b5f5f604083850312156101d0576101cf610129565b5b5f6101dd85828601610173565b92505060206101ee858286016101a6565b9150509250929050565b6102018161014c565b82525050565b5f60208201905061021a5f8301846101f8565b92915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f61024c82610220565b610256818561022a565b9350610266818560208601610234565b80840191505092915050565b5f819050919050565b5f819050919050565b61029561029082610272565b61027b565b82525050565b5f6102a68285610242565b91506102b28284610284565b6020820191508190509392505050565b6102cb81610187565b82525050565b5f6040820190506102e45f8301856101f8565b6102f160208301846102c2565b939250505056fe603e600e3d39601e805130553df33d3d34601c57363d3d373d363d30545af43d82803e903d91601c57fd5bf3a264697066735822122009e132ab9d1c11bdbac018e6131534eb4d4460c20d453928a5a0b89cf4ecf4fc64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/Guest.sol/Guest.json b/testchain/artifacts/wallet-contracts-v3/Guest.sol/Guest.json new file mode 100644 index 000000000..022b7f05d --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Guest.sol/Guest.json @@ -0,0 +1,335 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Guest", + "sourceName": "src/Guest.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "DelegateCallNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLeft", + "type": "uint256" + } + ], + "name": "NotEnoughGas", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "Reverted", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallAborted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSucceeded", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + } + ], + "bytecode": "0x6080604052348015600e575f5ffd5b506117588061001c5f395ff3fe608060405234801561000f575f5ffd5b505f61001b5f36610035565b90505f610027826104d7565b90506100338282610527565b005b61003d610d03565b5f815f019060ff16908160ff16815250505f5f61005a85856107e8565b915060ff16915060018083160361007a575f8360600181815250506100b6565b61008f8186866107fe9290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f8111156100f3576100e58282888861082f9190939291909392919063ffffffff16565b856080018194508281525050505b5f601080851603610107576001905061015f565b60208085160361013a5761012683888861085c9290919263ffffffff16565b8161ffff169150809450819250505061015e565b61014f83888861087b9290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561017957610178610d9f565b5b6040519080825280602002602001820160405280156101b257816020015b61019f610d4e565b8152602001906001900390816101975790505b5085604001819052505f5f90505b818110156104cc575f6101de858a8a61087b9290919263ffffffff16565b8096508192505050600180821660ff160361024d57308760400151838151811061020b5761020a610dcc565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102b9565b610262858a8a6108969290919263ffffffff16565b8860400151848151811061027957610278610dcc565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff1603610307576102db858a8a6108c79290919263ffffffff16565b886040015184815181106102f2576102f1610dcc565b5b60200260200101516020018197508281525050505b600480821660ff16036103cf575f61032a868b8b6108dd9290919263ffffffff16565b8162ffffff169150809750819250505089898790838961034a9190610e2f565b9261035793929190610e6a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050886040015184815181106103b0576103af610dcc565b5b60200260200101516040018190525080866103cb9190610e2f565b9550505b600880821660ff160361041d576103f1858a8a6108c79290919263ffffffff16565b8860400151848151811061040857610407610dcc565b5b60200260200101516060018197508281525050505b601080821660ff16148760400151838151811061043d5761043c610dcc565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061047357610472610dcc565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff16876040015183815181106104ae576104ad610dcc565b5b602002602001015160c00181815250505080806001019150506101c0565b505050505092915050565b5f5f6104e78360200151306108fd565b90505f6104f3846109a1565b90508181604051602001610508929190610f21565b6040516020818303038152906040528051906020012092505050919050565b5f5f90505f83604001515190505f5f90505b818110156107e1575f8560400151828151811061055957610558610dcc565b5b602002602001015190508060a001518015610572575083155b156105b6577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b85836040516105a8929190610f75565b60405180910390a1506107d4565b5f93505f816060015190505f81141580156105d05750805a105b156106165786835a6040517f2139527400000000000000000000000000000000000000000000000000000000815260040161060d9392919061136a565b60405180910390fd5b81608001511561065d57826040517f230d1ccc00000000000000000000000000000000000000000000000000000000815260040161065491906113a6565b60405180910390fd5b5f610683835f015184602001515f85146106775784610679565b5a5b8660400151610bd5565b905080610797575f60ff168360c00151036106e657600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d87856106c7610bec565b6040516106d693929190611407565b60405180910390a15050506107d4565b600160ff168360c001510361073d5787846106ff610bec565b6040517f7f6b0bb100000000000000000000000000000000000000000000000000000000815260040161073493929190611443565b60405180910390fd5b600260ff168360c0015103610796577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b8785610777610bec565b60405161078693929190611407565b60405180910390a15050506107e1565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a87856040516107c8929190610f75565b60405180910390a15050505b8080600101915050610539565b5050505050565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de8561096c574661096e565b5f5b85604051602001610983959493929190611495565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016109b99190611572565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff1603610a51575f6109ef8460400151610c0a565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2818560600151866080015185604051602001610a32959493929190611588565b6040516020818303038152906040528051906020012092505050610bd0565b600160ff16835f015160ff1603610ac0577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a001518051906020012082604051602001610aa2939291906115d9565b60405160208183030381529060405280519060200120915050610bd0565b600260ff16835f015160ff1603610b28577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c0015182604051602001610b0a939291906115d9565b60405160208183030381529060405280519060200120915050610bd0565b600360ff16835f015160ff1603610b90577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e0015182604051602001610b72939291906115d9565b60405160208183030381529060405280519060200120915050610bd0565b825f01516040517f04818320000000000000000000000000000000000000000000000000000000008152600401610bc7919061161d565b60405180910390fd5b919050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b5f60605f5f90505b8351811015610c73575f610c3f858381518110610c3257610c31610dcc565b5b6020026020010151610c84565b90508281604051602001610c54929190611670565b6040516020818303038152906040529250508080600101915050610c12565b508080519060200120915050919050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c00151604051602001610ce69897969594939291906116a6565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e3982610df9565b9150610e4483610df9565b9250828201905080821115610e5c57610e5b610e02565b5b92915050565b5f5ffd5b5f5ffd5b5f5f85851115610e7d57610e7c610e62565b5b83861115610e8e57610e8d610e66565b5b6001850283019150848603905094509492505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f610ee2600283610ea4565b9150610eed82610eae565b600282019050919050565b5f819050919050565b5f819050919050565b610f1b610f1682610ef8565b610f01565b82525050565b5f610f2b82610ed6565b9150610f378285610f0a565b602082019150610f478284610f0a565b6020820191508190509392505050565b610f6081610ef8565b82525050565b610f6f81610df9565b82525050565b5f604082019050610f885f830185610f57565b610f956020830184610f66565b9392505050565b5f60ff82169050919050565b610fb181610f9c565b82525050565b5f8115159050919050565b610fcb81610fb7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61102382610ffa565b9050919050565b61103381611019565b82525050565b61104281610df9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61108a82611048565b6110948185611052565b93506110a4818560208601611062565b6110ad81611070565b840191505092915050565b5f60e083015f8301516110cd5f86018261102a565b5060208301516110e06020860182611039565b50604083015184820360408601526110f88282611080565b915050606083015161110d6060860182611039565b5060808301516111206080860182610fc2565b5060a083015161113360a0860182610fc2565b5060c083015161114660c0860182611039565b508091505092915050565b5f61115c83836110b8565b905092915050565b5f602082019050919050565b5f61117a82610fd1565b6111848185610fdb565b93508360208202850161119685610feb565b805f5b858110156111d157848403895281516111b28582611151565b94506111bd83611164565b925060208a01995050600181019050611199565b50829750879550505050505092915050565b6111ec81610ef8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f611226838361102a565b60208301905092915050565b5f602082019050919050565b5f611248826111f2565b61125281856111fc565b935061125d8361120c565b805f5b8381101561128d578151611274888261121b565b975061127f83611232565b925050600181019050611260565b5085935050505092915050565b5f61012083015f8301516112b05f860182610fa8565b5060208301516112c36020860182610fc2565b50604083015184820360408601526112db8282611170565b91505060608301516112f06060860182611039565b5060808301516113036080860182611039565b5060a083015184820360a086015261131b8282611080565b91505060c083015161133060c08601826111e3565b5060e083015161134360e08601826111e3565b5061010083015184820361010086015261135d828261123e565b9150508091505092915050565b5f6060820190508181035f830152611382818661129a565b90506113916020830185610f66565b61139e6040830184610f66565b949350505050565b5f6020820190506113b95f830184610f66565b92915050565b5f82825260208201905092915050565b5f6113d982611048565b6113e381856113bf565b93506113f3818560208601611062565b6113fc81611070565b840191505092915050565b5f60608201905061141a5f830186610f57565b6114276020830185610f66565b818103604083015261143981846113cf565b9050949350505050565b5f6060820190508181035f83015261145b818661129a565b905061146a6020830185610f66565b818103604083015261147c81846113cf565b9050949350505050565b61148f81611019565b82525050565b5f60a0820190506114a85f830188610f57565b6114b56020830187610f57565b6114c26040830186610f57565b6114cf6060830185610f66565b6114dc6080830184611486565b9695505050505050565b5f81905092915050565b6114f981611019565b82525050565b5f61150a83836114f0565b60208301905092915050565b5f611520826111f2565b61152a81856114e6565b93506115358361120c565b805f5b8381101561156557815161154c88826114ff565b975061155783611232565b925050600181019050611538565b5085935050505092915050565b5f61157d8284611516565b915081905092915050565b5f60a08201905061159b5f830188610f57565b6115a86020830187610f57565b6115b56040830186610f66565b6115c26060830185610f66565b6115cf6080830184610f57565b9695505050505050565b5f6060820190506115ec5f830186610f57565b6115f96020830185610f57565b6116066040830184610f57565b949350505050565b61161781610f9c565b82525050565b5f6020820190506116305f83018461160e565b92915050565b5f81905092915050565b5f61164a82611048565b6116548185611636565b9350611664818560208601611062565b80840191505092915050565b5f61167b8285611640565b91506116878284610f0a565b6020820191508190509392505050565b6116a081610fb7565b82525050565b5f610100820190506116ba5f83018b610f57565b6116c7602083018a611486565b6116d46040830189610f66565b6116e16060830188610f57565b6116ee6080830187610f66565b6116fb60a0830186611697565b61170860c0830185611697565b61171560e0830184610f66565b999850505050505050505056fea2646970667358221220405f34bddc0ba9d44e3f985d8aad5d56facfea4a265ddc093628987cbf971bba64736f6c634300081c0033", + "deployedBytecode": "0x608060405234801561000f575f5ffd5b505f61001b5f36610035565b90505f610027826104d7565b90506100338282610527565b005b61003d610d03565b5f815f019060ff16908160ff16815250505f5f61005a85856107e8565b915060ff16915060018083160361007a575f8360600181815250506100b6565b61008f8186866107fe9290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f8111156100f3576100e58282888861082f9190939291909392919063ffffffff16565b856080018194508281525050505b5f601080851603610107576001905061015f565b60208085160361013a5761012683888861085c9290919263ffffffff16565b8161ffff169150809450819250505061015e565b61014f83888861087b9290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561017957610178610d9f565b5b6040519080825280602002602001820160405280156101b257816020015b61019f610d4e565b8152602001906001900390816101975790505b5085604001819052505f5f90505b818110156104cc575f6101de858a8a61087b9290919263ffffffff16565b8096508192505050600180821660ff160361024d57308760400151838151811061020b5761020a610dcc565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506102b9565b610262858a8a6108969290919263ffffffff16565b8860400151848151811061027957610278610dcc565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff1603610307576102db858a8a6108c79290919263ffffffff16565b886040015184815181106102f2576102f1610dcc565b5b60200260200101516020018197508281525050505b600480821660ff16036103cf575f61032a868b8b6108dd9290919263ffffffff16565b8162ffffff169150809750819250505089898790838961034a9190610e2f565b9261035793929190610e6a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050886040015184815181106103b0576103af610dcc565b5b60200260200101516040018190525080866103cb9190610e2f565b9550505b600880821660ff160361041d576103f1858a8a6108c79290919263ffffffff16565b8860400151848151811061040857610407610dcc565b5b60200260200101516060018197508281525050505b601080821660ff16148760400151838151811061043d5761043c610dcc565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061047357610472610dcc565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff16876040015183815181106104ae576104ad610dcc565b5b602002602001015160c00181815250505080806001019150506101c0565b505050505092915050565b5f5f6104e78360200151306108fd565b90505f6104f3846109a1565b90508181604051602001610508929190610f21565b6040516020818303038152906040528051906020012092505050919050565b5f5f90505f83604001515190505f5f90505b818110156107e1575f8560400151828151811061055957610558610dcc565b5b602002602001015190508060a001518015610572575083155b156105b6577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b85836040516105a8929190610f75565b60405180910390a1506107d4565b5f93505f816060015190505f81141580156105d05750805a105b156106165786835a6040517f2139527400000000000000000000000000000000000000000000000000000000815260040161060d9392919061136a565b60405180910390fd5b81608001511561065d57826040517f230d1ccc00000000000000000000000000000000000000000000000000000000815260040161065491906113a6565b60405180910390fd5b5f610683835f015184602001515f85146106775784610679565b5a5b8660400151610bd5565b905080610797575f60ff168360c00151036106e657600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d87856106c7610bec565b6040516106d693929190611407565b60405180910390a15050506107d4565b600160ff168360c001510361073d5787846106ff610bec565b6040517f7f6b0bb100000000000000000000000000000000000000000000000000000000815260040161073493929190611443565b60405180910390fd5b600260ff168360c0015103610796577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b8785610777610bec565b60405161078693929190611407565b60405180910390a15050506107e1565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a87856040516107c8929190610f75565b60405180910390a15050505b8080600101915050610539565b5050505050565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de8561096c574661096e565b5f5b85604051602001610983959493929190611495565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016109b99190611572565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff1603610a51575f6109ef8460400151610c0a565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2818560600151866080015185604051602001610a32959493929190611588565b6040516020818303038152906040528051906020012092505050610bd0565b600160ff16835f015160ff1603610ac0577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a001518051906020012082604051602001610aa2939291906115d9565b60405160208183030381529060405280519060200120915050610bd0565b600260ff16835f015160ff1603610b28577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c0015182604051602001610b0a939291906115d9565b60405160208183030381529060405280519060200120915050610bd0565b600360ff16835f015160ff1603610b90577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e0015182604051602001610b72939291906115d9565b60405160208183030381529060405280519060200120915050610bd0565b825f01516040517f04818320000000000000000000000000000000000000000000000000000000008152600401610bc7919061161d565b60405180910390fd5b919050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b5f60605f5f90505b8351811015610c73575f610c3f858381518110610c3257610c31610dcc565b5b6020026020010151610c84565b90508281604051602001610c54929190611670565b6040516020818303038152906040529250508080600101915050610c12565b508080519060200120915050919050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c00151604051602001610ce69897969594939291906116a6565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610e3982610df9565b9150610e4483610df9565b9250828201905080821115610e5c57610e5b610e02565b5b92915050565b5f5ffd5b5f5ffd5b5f5f85851115610e7d57610e7c610e62565b5b83861115610e8e57610e8d610e66565b5b6001850283019150848603905094509492505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f610ee2600283610ea4565b9150610eed82610eae565b600282019050919050565b5f819050919050565b5f819050919050565b610f1b610f1682610ef8565b610f01565b82525050565b5f610f2b82610ed6565b9150610f378285610f0a565b602082019150610f478284610f0a565b6020820191508190509392505050565b610f6081610ef8565b82525050565b610f6f81610df9565b82525050565b5f604082019050610f885f830185610f57565b610f956020830184610f66565b9392505050565b5f60ff82169050919050565b610fb181610f9c565b82525050565b5f8115159050919050565b610fcb81610fb7565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61102382610ffa565b9050919050565b61103381611019565b82525050565b61104281610df9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61108a82611048565b6110948185611052565b93506110a4818560208601611062565b6110ad81611070565b840191505092915050565b5f60e083015f8301516110cd5f86018261102a565b5060208301516110e06020860182611039565b50604083015184820360408601526110f88282611080565b915050606083015161110d6060860182611039565b5060808301516111206080860182610fc2565b5060a083015161113360a0860182610fc2565b5060c083015161114660c0860182611039565b508091505092915050565b5f61115c83836110b8565b905092915050565b5f602082019050919050565b5f61117a82610fd1565b6111848185610fdb565b93508360208202850161119685610feb565b805f5b858110156111d157848403895281516111b28582611151565b94506111bd83611164565b925060208a01995050600181019050611199565b50829750879550505050505092915050565b6111ec81610ef8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f611226838361102a565b60208301905092915050565b5f602082019050919050565b5f611248826111f2565b61125281856111fc565b935061125d8361120c565b805f5b8381101561128d578151611274888261121b565b975061127f83611232565b925050600181019050611260565b5085935050505092915050565b5f61012083015f8301516112b05f860182610fa8565b5060208301516112c36020860182610fc2565b50604083015184820360408601526112db8282611170565b91505060608301516112f06060860182611039565b5060808301516113036080860182611039565b5060a083015184820360a086015261131b8282611080565b91505060c083015161133060c08601826111e3565b5060e083015161134360e08601826111e3565b5061010083015184820361010086015261135d828261123e565b9150508091505092915050565b5f6060820190508181035f830152611382818661129a565b90506113916020830185610f66565b61139e6040830184610f66565b949350505050565b5f6020820190506113b95f830184610f66565b92915050565b5f82825260208201905092915050565b5f6113d982611048565b6113e381856113bf565b93506113f3818560208601611062565b6113fc81611070565b840191505092915050565b5f60608201905061141a5f830186610f57565b6114276020830185610f66565b818103604083015261143981846113cf565b9050949350505050565b5f6060820190508181035f83015261145b818661129a565b905061146a6020830185610f66565b818103604083015261147c81846113cf565b9050949350505050565b61148f81611019565b82525050565b5f60a0820190506114a85f830188610f57565b6114b56020830187610f57565b6114c26040830186610f57565b6114cf6060830185610f66565b6114dc6080830184611486565b9695505050505050565b5f81905092915050565b6114f981611019565b82525050565b5f61150a83836114f0565b60208301905092915050565b5f611520826111f2565b61152a81856114e6565b93506115358361120c565b805f5b8381101561156557815161154c88826114ff565b975061155783611232565b925050600181019050611538565b5085935050505092915050565b5f61157d8284611516565b915081905092915050565b5f60a08201905061159b5f830188610f57565b6115a86020830187610f57565b6115b56040830186610f66565b6115c26060830185610f66565b6115cf6080830184610f57565b9695505050505050565b5f6060820190506115ec5f830186610f57565b6115f96020830185610f57565b6116066040830184610f57565b949350505050565b61161781610f9c565b82525050565b5f6020820190506116305f83018461160e565b92915050565b5f81905092915050565b5f61164a82611048565b6116548185611636565b9350611664818560208601611062565b80840191505092915050565b5f61167b8285611640565b91506116878284610f0a565b6020820191508190509392505050565b6116a081610fb7565b82525050565b5f610100820190506116ba5f83018b610f57565b6116c7602083018a611486565b6116d46040830189610f66565b6116e16060830188610f57565b6116ee6080830187610f66565b6116fb60a0830186611697565b61170860c0830185611697565b61171560e0830184610f66565b999850505050505050505056fea2646970667358221220405f34bddc0ba9d44e3f985d8aad5d56facfea4a265ddc093628987cbf971bba64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json b/testchain/artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json new file mode 100644 index 000000000..5ff39d542 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Simulator.sol/Simulator.json @@ -0,0 +1,84 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Simulator", + "sourceName": "src/Simulator.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "_calls", + "type": "tuple[]" + } + ], + "name": "simulate", + "outputs": [ + { + "components": [ + { + "internalType": "enum Simulator.Status", + "name": "status", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "result", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasUsed", + "type": "uint256" + } + ], + "internalType": "struct Simulator.Result[]", + "name": "results", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b50610ac28061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a27c392214610030575b600080fd5b61004361003e3660046105e4565b610059565b60405161005091906106ee565b60405180910390f35b606060005a90506000838067ffffffffffffffff81111561007c5761007c6107cc565b6040519080825280602002602001820160405280156100d257816020015b6100bf6040805160608101909152806000815260200160608152602001600081525090565b81526020019060019003908161009a5790505b50935060005b8181101561058c5760008787838181106100f4576100f46107fb565b9050602002810190610106919061082a565b61010f90610977565b90508060a001518015610120575083155b1561012b5750610584565b60608101516000945080158015906101425750805a105b156101dc57600587848151811061015b5761015b6107fb565b60200260200101516000019060058111156101785761017861065b565b9081600581111561018b5761018b61065b565b9052505a6040516020016101a191815260200190565b6040516020818303038152906040528784815181106101c2576101c26107fb565b602002602001015160200181905250505050505050610591565b60008260800151156102e25760005a84519091506102ad9084156102005784610202565b5a5b634c4e814c60e01b60008c8a8c60008c6040015160405160240161022b96959493929190610a0f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610597565b91505a6102ba9082610a52565b8986815181106102cc576102cc6107fb565b602002602001015160400181815250505061033c565b60005a8451602086015191925061030b9185156102ff5785610301565b5a5b87604001516105ad565b91505a6103189082610a52565b89868151811061032a5761032a6107fb565b60200260200101516040018181525050505b806105105760c08301516103c657600195506002888581518110610362576103626107fb565b602002602001015160000190600581111561037f5761037f61065b565b908160058111156103925761039261065b565b90525061039d6105c5565b8885815181106103af576103af6107fb565b602002602001015160200181905250505050610584565b60c08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161046d576004888581518110610405576104056107fb565b60200260200101516000019060058111156104225761042261065b565b908160058111156104355761043561065b565b9052506104406105c5565b888581518110610452576104526107fb565b60200260200101516020018190525050505050505050610591565b60c08301517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016105105760038885815181106104ac576104ac6107fb565b60200260200101516000019060058111156104c9576104c961065b565b908160058111156104dc576104dc61065b565b9052506104e76105c5565b8885815181106104f9576104f96107fb565b60200260200101516020018190525050505061058c565b6001888581518110610524576105246107fb565b60200260200101516000019060058111156105415761054161065b565b908160058111156105545761055461065b565b90525061055f6105c5565b888581518110610571576105716107fb565b6020026020010151602001819052505050505b6001016100d8565b505050505b92915050565b60008060008351602085018787f4949350505050565b6000806000835160208501878988f195945050505050565b60603d604051915060208201818101604052818352816000823e505090565b600080602083850312156105f757600080fd5b823567ffffffffffffffff81111561060e57600080fd5b8301601f8101851361061f57600080fd5b803567ffffffffffffffff81111561063657600080fd5b8560208260051b840101111561064b57600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815180845260005b818110156106b057602081850181015186830182015201610694565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156107c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160068110610780577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8087525060208101516060602088015261079d606088018261068a565b604092830151979092019690965294506020938401939190910190600101610716565b50929695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2183360301811261085e57600080fd5b9190910192915050565b60405160e0810167ffffffffffffffff8111828210171561088b5761088b6107cc565b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b557600080fd5b919050565b600082601f8301126108cb57600080fd5b813567ffffffffffffffff8111156108e5576108e56107cc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610932576109326107cc565b60405281815283820160200185101561094a57600080fd5b816020850160208301376000918101602001919091529392505050565b803580151581146108b557600080fd5b600060e0823603121561098957600080fd5b610991610868565b61099a83610891565b815260208381013590820152604083013567ffffffffffffffff8111156109c057600080fd5b6109cc368286016108ba565b604083015250606083810135908201526109e860808401610967565b60808201526109f960a08401610967565b60a082015260c092830135928101929092525090565b60ff8716815285602082015284604082015283606082015260ff8316608082015260c060a08201526000610a4660c083018461068a565b98975050505050505050565b81810381811115610591577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220d11a1ece8fb20fac672ee0d608fef08ee9a0091cd1c29a5a56eadbe79560f7a864736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063a27c392214610030575b600080fd5b61004361003e3660046105e4565b610059565b60405161005091906106ee565b60405180910390f35b606060005a90506000838067ffffffffffffffff81111561007c5761007c6107cc565b6040519080825280602002602001820160405280156100d257816020015b6100bf6040805160608101909152806000815260200160608152602001600081525090565b81526020019060019003908161009a5790505b50935060005b8181101561058c5760008787838181106100f4576100f46107fb565b9050602002810190610106919061082a565b61010f90610977565b90508060a001518015610120575083155b1561012b5750610584565b60608101516000945080158015906101425750805a105b156101dc57600587848151811061015b5761015b6107fb565b60200260200101516000019060058111156101785761017861065b565b9081600581111561018b5761018b61065b565b9052505a6040516020016101a191815260200190565b6040516020818303038152906040528784815181106101c2576101c26107fb565b602002602001015160200181905250505050505050610591565b60008260800151156102e25760005a84519091506102ad9084156102005784610202565b5a5b634c4e814c60e01b60008c8a8c60008c6040015160405160240161022b96959493929190610a0f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152610597565b91505a6102ba9082610a52565b8986815181106102cc576102cc6107fb565b602002602001015160400181815250505061033c565b60005a8451602086015191925061030b9185156102ff5785610301565b5a5b87604001516105ad565b91505a6103189082610a52565b89868151811061032a5761032a6107fb565b60200260200101516040018181525050505b806105105760c08301516103c657600195506002888581518110610362576103626107fb565b602002602001015160000190600581111561037f5761037f61065b565b908160058111156103925761039261065b565b90525061039d6105c5565b8885815181106103af576103af6107fb565b602002602001015160200181905250505050610584565b60c08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0161046d576004888581518110610405576104056107fb565b60200260200101516000019060058111156104225761042261065b565b908160058111156104355761043561065b565b9052506104406105c5565b888581518110610452576104526107fb565b60200260200101516020018190525050505050505050610591565b60c08301517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016105105760038885815181106104ac576104ac6107fb565b60200260200101516000019060058111156104c9576104c961065b565b908160058111156104dc576104dc61065b565b9052506104e76105c5565b8885815181106104f9576104f96107fb565b60200260200101516020018190525050505061058c565b6001888581518110610524576105246107fb565b60200260200101516000019060058111156105415761054161065b565b908160058111156105545761055461065b565b90525061055f6105c5565b888581518110610571576105716107fb565b6020026020010151602001819052505050505b6001016100d8565b505050505b92915050565b60008060008351602085018787f4949350505050565b6000806000835160208501878988f195945050505050565b60603d604051915060208201818101604052818352816000823e505090565b600080602083850312156105f757600080fd5b823567ffffffffffffffff81111561060e57600080fd5b8301601f8101851361061f57600080fd5b803567ffffffffffffffff81111561063657600080fd5b8560208260051b840101111561064b57600080fd5b6020919091019590945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000815180845260005b818110156106b057602081850181015186830182015201610694565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156107c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08786030184528151805160068110610780577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8087525060208101516060602088015261079d606088018261068a565b604092830151979092019690965294506020938401939190910190600101610716565b50929695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2183360301811261085e57600080fd5b9190910192915050565b60405160e0810167ffffffffffffffff8111828210171561088b5761088b6107cc565b60405290565b803573ffffffffffffffffffffffffffffffffffffffff811681146108b557600080fd5b919050565b600082601f8301126108cb57600080fd5b813567ffffffffffffffff8111156108e5576108e56107cc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff81118282101715610932576109326107cc565b60405281815283820160200185101561094a57600080fd5b816020850160208301376000918101602001919091529392505050565b803580151581146108b557600080fd5b600060e0823603121561098957600080fd5b610991610868565b61099a83610891565b815260208381013590820152604083013567ffffffffffffffff8111156109c057600080fd5b6109cc368286016108ba565b604083015250606083810135908201526109e860808401610967565b60808201526109f960a08401610967565b60a082015260c092830135928101929092525090565b60ff8716815285602082015284604082015283606082015260ff8316608082015260c060a08201526000610a4660c083018461068a565b98975050505050505050565b81810381811115610591577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea2646970667358221220d11a1ece8fb20fac672ee0d608fef08ee9a0091cd1c29a5a56eadbe79560f7a864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json b/testchain/artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json new file mode 100644 index 000000000..abb5ae4aa --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Stage1Module.sol/Stage1Module.json @@ -0,0 +1,1468 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Stage1Module", + "sourceName": "src/Stage1Module.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_current", + "type": "uint256" + } + ], + "name": "BadNonce", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "ImageHashIsZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes1", + "name": "_type", + "type": "bytes1" + } + ], + "name": "InvalidSignatureType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLeft", + "type": "uint256" + } + ], + "name": "NotEnoughGas", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "Reverted", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallAborted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSucceeded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "DefinedHook", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "newImageHash", + "type": "bytes32" + } + ], + "name": "ImageHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_newNonce", + "type": "uint256" + } + ], + "name": "NonceChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "FACTORY", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INIT_CODE_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STAGE_2_IMPLEMENTATION", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "addHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "readHook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + } + ], + "name": "readNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "removeHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + } + ], + "name": "selfExecute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "tokenReceived", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60e060405234801561000f575f5ffd5b5060405161ab9738038061ab9783398181016040528101906100319190610196565b8060405161003e9061012b565b604051809103905ff080158015610057573d5f5f3e3d5ffd5b505f6040518060600160405280602c815260200161ab6b602c91393073ffffffffffffffffffffffffffffffffffffffff1660405160200161009a92919061023c565b60405160208183030381529060405280519060200120905080608081815250508273ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508173ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff168152505050505050610263565b615398806157d383390190565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6101658261013c565b9050919050565b6101758161015b565b811461017f575f5ffd5b50565b5f815190506101908161016c565b92915050565b5f602082840312156101ab576101aa610138565b5b5f6101b884828501610182565b91505092915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6101ed826101c1565b6101f781856101cb565b93506102078185602086016101d5565b80840191505092915050565b5f819050919050565b5f819050919050565b61023661023182610213565b61021c565b82525050565b5f61024782856101e3565b91506102538284610225565b6020820191508190509392505050565b60805160a05160c0516155316102a25f395f8181610bfe0152611a0401525f81816109f401526131d301525f818161095401526131f501526155315ff3fe60806040526004361061012d575f3560e01c80636ea44577116100aa578063aaf10f421161006e578063aaf10f42146104b5578063ad55366b146104df578063b93ea7ad14610520578063bc197c811461053c578063f23a6e6114610578578063f727ef1c146105b457610134565b80636ea44577146103ce5780638943ec02146103ea5780638c3f55631461041257806392dcb3fc1461044e5780639f69ef541461048b57610134565b80631f6a1eb9116100f15780631f6a1eb91461031a578063257671f51461033657806329561426146103605780632dd31000146103885780634fcf3eca146103b257610134565b8063025b22bc1461020e57806313792a4a1461022a578063150b7a02146102665780631626ba7e146102a25780631a9b2337146102de57610134565b3661013457005b60045f3690501061020c575f6101555f369061015091906135ab565b6105dc565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461020a575f5f8273ffffffffffffffffffffffffffffffffffffffff165f366040516101b3929190613645565b5f60405180830381855af49150503d805f81146101eb576040519150601f19603f3d011682016040523d82523d5f602084013e6101f0565b606091505b50915091508161020257805160208201fd5b805160208201f35b505b005b610228600480360381019061022391906136c8565b610631565b005b348015610235575f5ffd5b50610250600480360381019061024b9190613cf3565b6106ad565b60405161025d9190613d7b565b60405180910390f35b348015610271575f5ffd5b5061028c60048036038101906102879190613d94565b61085c565b6040516102999190613e27565b60405180910390f35b3480156102ad575f5ffd5b506102c860048036038101906102c39190613e40565b610870565b6040516102d59190613e27565b60405180910390f35b3480156102e9575f5ffd5b5061030460048036038101906102ff9190613ec7565b6108b2565b6040516103119190613f01565b60405180910390f35b610334600480360381019061032f9190613f1a565b6108c3565b005b348015610341575f5ffd5b5061034a610952565b6040516103579190613d7b565b60405180910390f35b34801561036b575f5ffd5b5061038660048036038101906103819190613f98565b610976565b005b348015610393575f5ffd5b5061039c6109f2565b6040516103a99190613f01565b60405180910390f35b6103cc60048036038101906103c79190613ec7565b610a16565b005b6103e860048036038101906103e39190613fc3565b610b0b565b005b3480156103f5575f5ffd5b50610410600480360381019061040b919061400e565b610baa565b005b34801561041d575f5ffd5b506104386004803603810190610433919061407f565b610bb0565b60405161044591906140b9565b60405180910390f35b348015610459575f5ffd5b50610474600480360381019061046f9190613f98565b610be8565b6040516104829291906140d2565b60405180910390f35b348015610496575f5ffd5b5061049f610bfc565b6040516104ac9190613f01565b60405180910390f35b3480156104c0575f5ffd5b506104c9610c20565b6040516104d69190613f01565b60405180910390f35b3480156104ea575f5ffd5b5061050560048036038101906105009190613cf3565b610c2e565b60405161051796959493929190614108565b60405180910390f35b61053a60048036038101906105359190614167565b610c6c565b005b348015610547575f5ffd5b50610562600480360381019061055d91906141fa565b610d62565b60405161056f9190613e27565b60405180910390f35b348015610583575f5ffd5b5061059e600480360381019061059991906142d1565b610d79565b6040516105ab9190613e27565b60405180910390f35b3480156105bf575f5ffd5b506105da60048036038101906105d591906143a8565b610d8e565b005b5f6106287fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916610e57565b5f1c9050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a157336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016106989190613f01565b60405180910390fd5b6106aa81610e8f565b50565b5f5f6001856101000151516106c29190614425565b67ffffffffffffffff8111156106db576106da613707565b5b6040519080825280602002602001820160405280156107095781602001602082028036833780820191505090505b5090505f5f90505b8561010001515181101561079957856101000151818151811061073757610736614458565b5b602002602001015182828151811061075257610751614458565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610711565b50338186610100015151815181106107b4576107b3614458565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561010001819052505f610804868686610ed2565b5090508061084d578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161084493929190614838565b60405180910390fd5b60015f1b925050509392505050565b5f63150b7a0260e01b905095945050505050565b5f5f61087b856110c2565b90505f610889828686610ed2565b5090508061089e575f60e01b925050506108ab565b6320c13b0b60e01b925050505b9392505050565b5f6108bc826105dc565b9050919050565b5f5a90505f6108d286866110eb565b90506108e68160600151826080015161158d565b5f5f6108f3838787610ed2565b915091508161093d578286866040517fa2b6d61b00000000000000000000000000000000000000000000000000000000815260040161093493929190614838565b60405180910390fd5b610948848285611631565b5050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e657336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016109dd9190613f01565b60405180910390fd5b6109ef81611961565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8657336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610a7d9190613f01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610aa6826105dc565b73ffffffffffffffffffffffffffffffffffffffff1603610afe57806040517f1c3812cc000000000000000000000000000000000000000000000000000000008152600401610af59190613e27565b60405180910390fd5b610b08815f611a2b565b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b7b57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610b729190613f01565b60405180910390fd5b5f5a90505f610b8a84846110eb565b90505f610b9682611acc565b9050610ba3838284611631565b5050505050565b50505050565b5f610bdf7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b610e57565b5f1c9050919050565b5f5f610bf383611b1c565b91509150915091565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f610c29611b6d565b905090565b5f5f5f5f5f5f610c418989895f5f611b75565b809550819650829750839950849a505050505050610c5e83611eb2565b935093975093979195509350565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cdc57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610cd39190613f01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610cfc836105dc565b73ffffffffffffffffffffffffffffffffffffffff1614610d5457816040517f5b4d6d6a000000000000000000000000000000000000000000000000000000008152600401610d4b9190613e27565b60405180910390fd5b610d5e8282611a2b565b5050565b5f63bc197c8160e01b905098975050505050505050565b5f63f23a6e6160e01b90509695505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dfe57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610df59190613f01565b60405180910390fd5b610e178383836bffffffffffffffffffffffff16611ec3565b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1838383604051610e4a9392919061487e565b60405180910390a1505050565b5f5f8383604051602001610e6c9291906148b3565b604051602081830303815290604052805190602001209050805491505092915050565b610e9881611f21565b7f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0381604051610ec79190613f01565b60405180910390a150565b5f5f5f84845f818110610ee857610ee7614458565b5b9050013560f81c60f81b9050608060f81b608060f81b82167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361104157610f3086611acc565b91505f5f610f3d84611b1c565b91509150428111610f875783816040517ff95b6ab7000000000000000000000000000000000000000000000000000000008152600401610f7e9291906148da565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fef57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611035578333836040517f8945c31300000000000000000000000000000000000000000000000000000000815260040161102c93929190614901565b60405180910390fd5b600194505050506110ba565b5f5f5f6110518989895f5f611b75565b905080985081945082955083965050505050828210156110aa5782826040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004016110a1929190614936565b60405180910390fd5b6110b381611eb2565b9550505050505b935093915050565b6110ca6134b6565b6003815f019060ff16908160ff1681525050818160e0018181525050919050565b6110f36134b6565b5f815f019060ff16908160ff16815250505f5f6111108585611f27565b915060ff169150600180831603611130575f83606001818152505061116c565b611145818686611f3d9290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f8111156111a95761119b82828888611f6e9190939291909392919063ffffffff16565b856080018194508281525050505b5f6010808516036111bd5760019050611215565b6020808516036111f0576111dc838888611f9b9290919263ffffffff16565b8161ffff1691508094508192505050611214565b611205838888611fba9290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561122f5761122e613707565b5b60405190808252806020026020018201604052801561126857816020015b611255613501565b81526020019060019003908161124d5790505b5085604001819052505f5f90505b81811015611582575f611294858a8a611fba9290919263ffffffff16565b8096508192505050600180821660ff16036113035730876040015183815181106112c1576112c0614458565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061136f565b611318858a8a611fd59290919263ffffffff16565b8860400151848151811061132f5761132e614458565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff16036113bd57611391858a8a6120069290919263ffffffff16565b886040015184815181106113a8576113a7614458565b5b60200260200101516020018197508281525050505b600480821660ff1603611485575f6113e0868b8b61201c9290919263ffffffff16565b8162ffffff16915080975081925050508989879083896114009190614425565b9261140d93929190614965565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508860400151848151811061146657611465614458565b5b60200260200101516040018190525080866114819190614425565b9550505b600880821660ff16036114d3576114a7858a8a6120069290919263ffffffff16565b886040015184815181106114be576114bd614458565b5b60200260200101516060018197508281525050505b601080821660ff1614876040015183815181106114f3576114f2614458565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061152957611528614458565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff168760400151838151811061156457611563614458565b5b602002602001015160c0018181525050508080600101915050611276565b505050505092915050565b5f61159783610bb0565b90508181146115e1578282826040517f9b6514f40000000000000000000000000000000000000000000000000000000081526004016115d89392919061499f565b60405180910390fd5b5f6001830190506115f2848261203c565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8818482604051611623929190614936565b60405180910390a150505050565b5f5f90505f82604001515190505f5f90505b81811015611959575f8460400151828151811061166357611662614458565b5b602002602001015190508060a00151801561167c575083155b156116c0577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b86836040516116b29291906148da565b60405180910390a15061194c565b5f93505f816060015190505f81141580156116da5750805a105b156117205785835a6040517f21395274000000000000000000000000000000000000000000000000000000008152600401611717939291906149d4565b60405180910390fd5b5f8260800151156117d5576117ce835f01515f841461173f5783611741565b5a5b634c4e814c60e01b8b8d898b8e606001518b6040015160405160240161176c96959493929190614a48565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612071565b90506117fd565b6117fa835f015184602001515f85146117ee57846117f0565b5a5b8660400151612086565b90505b8061190f575f60ff168360c001510361185e57600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d888561183f61209d565b60405161184e93929190614aae565b60405180910390a150505061194c565b600160ff168360c00151036118b557868461187761209d565b6040517f7f6b0bb10000000000000000000000000000000000000000000000000000000081526004016118ac93929190614aea565b60405180910390fd5b600260ff168360c001510361190e577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b88856118ef61209d565b6040516118fe93929190614aae565b60405180910390a1505050611959565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a88856040516119409291906148da565b60405180910390a15050505b8080600101915050611643565b505050505050565b5f5f1b810361199c576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119c87fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b826120bb565b7f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa816040516119f79190613d7b565b60405180910390a1611a287f0000000000000000000000000000000000000000000000000000000000000000610e8f565b50565b611a8f7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff165f1b6120c2565b7f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed18282604051611ac0929190614b2d565b60405180910390a15050565b5f5f611adc8360200151306120f7565b90505f611ae88461219b565b90508181604051602001611afd929190614bc8565b6040516020818303038152906040528051906020012092505050919050565b5f5f5f611b4b7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b85610e57565b5f1c9050606081901c816bffffffffffffffffffffffff169250925050915091565b5f3054905090565b5f5f5f5f5f5f5f611b868b8b611f27565b915060ff169150611b95613552565b6040808416148015611bd257505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611d0e57611bec828d8d611fd59290919263ffffffff16565b809350819a50505089611d0d575f611c0f838e8e61201c9290919263ffffffff16565b8162ffffff16915080945081925050505f8d8d85908487611c309190614425565b92611c3d93929190614965565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090508a73ffffffffffffffffffffffffffffffffffffffff1663ccce3bc830836040518363ffffffff1660e01b8152600401611cbc929190614bfe565b6040805180830381865afa158015611cd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfa9190614ca1565b92508184611d089190614425565b935050505b5b600180841603611d4757611d358d8a838f8f87908092611d3093929190614965565b6123cf565b97509750975097509750505050611ea5565b6002808416148d60200190151590811515815250505f6002601c8516901c9050611d8383828f8f611f6e9190939291909392919063ffffffff16565b8094508197505050505f6001600560208616901c611da19190614425565b9050611dbf83828f8f611f6e9190939291909392919063ffffffff16565b809450819a50505050611dd18d611acc565b9350611def8d858e8e86908092611dea93929190614965565b612631565b8097508198505050611e0386895f1b6131a5565b9550611e1186865f1b6131a5565b9550611e35868a73ffffffffffffffffffffffffffffffffffffffff165f1b6131a5565b95505f5f1b815f015114158015611e4f575085815f015114155b8015611e5f575080602001518511155b15611ea157806040517fccbb534f000000000000000000000000000000000000000000000000000000008152600401611e989190614cf9565b60405180910390fd5b5050505b9550955095509550959050565b5f611ebc826131b9565b9050919050565b611f1c7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b846bffffffffffffffffffffffff841660608673ffffffffffffffffffffffffffffffffffffffff16901b175f1b6120c2565b505050565b80305550565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b61206d7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b835f1b6120c2565b5050565b5f5f5f8351602085018787f490509392505050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b8082555050565b5f83836040516020016120d69291906148b3565b60405160208183030381529060405280519060200120905081815550505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856121665746612168565b5f5b8560405160200161217d959493929190614d12565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016121b39190614def565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff160361224b575f6121e9846040015161325c565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a281856060015186608001518560405160200161222c959493929190614e05565b60405160208183030381529060405280519060200120925050506123ca565b600160ff16835f015160ff16036122ba577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a00151805190602001208260405160200161229c93929190614e56565b604051602081830303815290604052805190602001209150506123ca565b600260ff16835f015160ff1603612322577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c001518260405160200161230493929190614e56565b604051602081830303815290604052805190602001209150506123ca565b600360ff16835f015160ff160361238a577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e001518260405160200161236c93929190614e56565b604051602081830303815290604052805190602001209150506123ca565b825f01516040517f048183200000000000000000000000000000000000000000000000000000000081526004016123c19190614e9a565b60405180910390fd5b919050565b5f5f5f5f5f6123dc6134b6565b6002815f019060ff16908160ff16815250505f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b898990508210156125c6575f5f612436848d8d61201c9290919263ffffffff16565b8162ffffff169150809550819250505083816124529190614425565b9150505f8b8b90508214612466575f612468565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036124c8576124af8f8d8d879086926124a793929190614965565b600185611b75565b809a50819b50829c50839d50849e5050505050506124f8565b6124e6858d8d879086926124de93929190614965565b600185611b75565b50809a50819b50829c50839d50505050505b89891015612553578b8b8590849261251293929190614965565b8b8b6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161254a9493929190614eb3565b60405180910390fd5b819350878d5f01510361256c575f5f1b8d5f0181815250505b8287106125b25786836040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004016125a9929190614936565b60405180910390fd5b878560c00181815250508692505050612414565b5f5f1b8b5f0151141580156125df57508a602001518511155b15612621578a6040517fccbb534f0000000000000000000000000000000000000000000000000000000081526004016126189190614cf9565b60405180910390fd5b5050509550955095509550959050565b5f5f5f5b8484905081101561319b575f612656828787611fba9290919263ffffffff16565b8160ff16915080935081925050505f600460f08316901c90505f81036127ae575f600f831690505f8160ff16036126a55761269c848989611fba9290919263ffffffff16565b80955081925050505b5f5f6126bc868b8b6132d69290919263ffffffff16565b80975081935050506126d9868b8b6132d69290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f8388866040515f815260200160405260405161273f9493929190614ef1565b6020604051602081039080840390855afa15801561275f573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612781828960ff166132ec565b90505f5f1b8c03612792578061279d565b61279c8c826131a5565b5b9b5050505050505050505050612635565b60018103612839575f600f831690505f8160ff16036127e5576127dc848989611fba9290919263ffffffff16565b80955081925050505b5f6127fb858a8a611fd59290919263ffffffff16565b80965081925050505f612811828460ff166132ec565b90505f5f1b8703612822578061282d565b61282c87826131a5565b5b96505050505050612635565b60028103612a38575f6003831690505f8160ff160361287057612867848989611fba9290919263ffffffff16565b80955081925050505b5f612886858a8a611fd59290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f6128bc87838d8d611f6e9190939291909392919063ffffffff16565b80985081925050505f81880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261292093929190614965565b6040518463ffffffff1660e01b815260040161293e93929190614f34565b602060405180830381865afa158015612959573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297d9190614f78565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129f4578c848d8d8b9085926129b593929190614965565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016129eb9493929190614fa3565b60405180910390fd5b8097508460ff168a0199505f612a0d858760ff166132ec565b90505f5f1b8a03612a1e5780612a29565b612a288a826131a5565b5b99505050505050505050612635565b60038103612a82575f612a568489896132d69290919263ffffffff16565b80955081925050505f5f1b8503612a6d5780612a78565b612a7785826131a5565b5b9450505050612635565b60048103612b01575f600f831660ff1690505f612ab185838b8b611f6e9190939291909392919063ffffffff16565b80965081925050505f81860190505f5f612add8e8e8e8e8c908892612ad893929190614965565b612631565b91509150829750818a019950612af389826131a5565b985050505050505050612635565b60068103612c11575f6002600c841660ff16901c60ff1690505f8103612b4557612b36848989611fba9290919263ffffffff16565b8160ff16915080955081925050505b5f6003841660ff1690505f8103612b7b57612b6b858a8a611f9b9290919263ffffffff16565b8161ffff16915080965081925050505b5f612b91868b8b61201c9290919263ffffffff16565b8162ffffff16915080975081925050505f81870190505f5f612bc58f8f8f8f8d908892612bc093929190614965565b612631565b91509150829850848210612bd957858b019a505b5f612be582878961331e565b90505f5f1b8b03612bf65780612c01565b612c008b826131a5565b5b9a50505050505050505050612635565b60058103612c93575f612c2f8489896132d69290919263ffffffff16565b8095508192505050888103612c62577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b5f612c6c82613353565b90505f5f1b8603612c7d5780612c88565b612c8786826131a5565b5b955050505050612635565b60078103612df9575f600f831690505f8160ff1603612cca57612cc1848989611fba9290919263ffffffff16565b80955081925050505b5f5f612ce1868b8b6132d69290919263ffffffff16565b8097508193505050612cfe868b8b6132d69290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f604051602001612d55919061502b565b604051602081830303815290604052805190602001208388866040515f8152602001604052604051612d8a9493929190614ef1565b6020604051602081039080840390855afa158015612daa573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612dcc828960ff166132ec565b90505f5f1b8c03612ddd5780612de8565b612de78c826131a5565b5b9b5050505050505050505050612635565b60088103612e92575f612e178489896132d69290919263ffffffff16565b80955081925050505f612e335f8c61338290919063ffffffff16565b9050808203612e60577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b5f612e6a836133d3565b90505f5f1b8703612e7b5780612e86565b612e8587826131a5565b5b96505050505050612635565b60098103612ff8575f6003831690505f8160ff1603612ec957612ec0848989611fba9290919263ffffffff16565b80955081925050505b5f612edf858a8a611fd59290919263ffffffff16565b80965081925050505f5f6002600c871660ff16901c60ff169050612f1587828d8d611f6e9190939291909392919063ffffffff16565b8098508193505050505f81870190505f8373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612f5493929190614965565b6040518463ffffffff1660e01b8152600401612f7293929190615050565b602060405180830381865afa158015612f8d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb19190615087565b90508197508460ff168a0199505f612fcd858760ff1684613402565b90505f5f1b8a03612fde5780612fe9565b612fe88a826131a5565b5b99505050505050505050612635565b600a810361315e575f6003831690505f8160ff160361302f57613026848989611fba9290919263ffffffff16565b80955081925050505b5f613045858a8a611fd59290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f61307b87838d8d611f6e9190939291909392919063ffffffff16565b80985081925050505f81880190505f8473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d9087926130b993929190614965565b6040518463ffffffff1660e01b81526004016130d793929190614f34565b602060405180830381865afa1580156130f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131169190615087565b90508198508560ff168b019a505f613132868860ff1684613402565b90505f5f1b8b03613143578061314e565b61314d8b826131a5565b5b9a50505050505050505050612635565b806040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260040161319291906140b9565b60405180910390fd5b5094509492505050565b5f825f528160205260405f20905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000837f000000000000000000000000000000000000000000000000000000000000000060405160200161322693929190615141565b604051602081830303815290604052805190602001205f1c73ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60605f5f90505b83518110156132c5575f61329185838151811061328457613283614458565b5b6020026020010151613437565b905082816040516020016132a69291906151b8565b6040516020818303038152906040529250508080600101915050613264565b508080519060200120915050919050565b5f5f848301359150602083019050935093915050565b5f8282604051602001613300929190615249565b60405160208183030381529060405280519060200120905092915050565b5f838383604051602001613334939291906152c9565b6040516020818303038152906040528051906020012090509392505050565b5f81604051602001613365919061535a565b604051602081830303815290604052805190602001209050919050565b5f5f6133928460200151846120f7565b90505f61339e8561219b565b905081816040516020016133b3929190614bc8565b604051602081830303815290604052805190602001209250505092915050565b5f816040516020016133e591906153c9565b604051602081830303815290604052805190602001209050919050565b5f83838360405160200161341893929190615438565b6040516020818303038152906040528051906020012090509392505050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161349998979695949392919061547f565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b60405180604001604052805f81526020015f81525090565b5f82905092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f82821b905092915050565b5f6135b6838361356a565b826135c18135613574565b92506004821015613601576135fc7fffffffff000000000000000000000000000000000000000000000000000000008360040360080261359f565b831692505b505092915050565b5f81905092915050565b828183375f83830152505050565b5f61362c8385613609565b9350613639838584613613565b82840190509392505050565b5f613651828486613621565b91508190509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136978261366e565b9050919050565b6136a78161368d565b81146136b1575f5ffd5b50565b5f813590506136c28161369e565b92915050565b5f602082840312156136dd576136dc613666565b5b5f6136ea848285016136b4565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61373d826136f7565b810181811067ffffffffffffffff8211171561375c5761375b613707565b5b80604052505050565b5f61376e61365d565b905061377a8282613734565b919050565b5f5ffd5b5f60ff82169050919050565b61379881613783565b81146137a2575f5ffd5b50565b5f813590506137b38161378f565b92915050565b5f8115159050919050565b6137cd816137b9565b81146137d7575f5ffd5b50565b5f813590506137e8816137c4565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561380c5761380b613707565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61383381613821565b811461383d575f5ffd5b50565b5f8135905061384e8161382a565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561387257613871613707565b5b61387b826136f7565b9050602081019050919050565b5f61389a61389584613858565b613765565b9050828152602081018484840111156138b6576138b5613854565b5b6138c1848285613613565b509392505050565b5f82601f8301126138dd576138dc6137ee565b5b81356138ed848260208601613888565b91505092915050565b5f60e0828403121561390b5761390a6136f3565b5b61391560e0613765565b90505f613924848285016136b4565b5f83015250602061393784828501613840565b602083015250604082013567ffffffffffffffff81111561395b5761395a61377f565b5b613967848285016138c9565b604083015250606061397b84828501613840565b606083015250608061398f848285016137da565b60808301525060a06139a3848285016137da565b60a08301525060c06139b784828501613840565b60c08301525092915050565b5f6139d56139d0846137f2565b613765565b905080838252602082019050602084028301858111156139f8576139f761381d565b5b835b81811015613a3f57803567ffffffffffffffff811115613a1d57613a1c6137ee565b5b808601613a2a89826138f6565b855260208501945050506020810190506139fa565b5050509392505050565b5f82601f830112613a5d57613a5c6137ee565b5b8135613a6d8482602086016139c3565b91505092915050565b5f819050919050565b613a8881613a76565b8114613a92575f5ffd5b50565b5f81359050613aa381613a7f565b92915050565b5f67ffffffffffffffff821115613ac357613ac2613707565b5b602082029050602081019050919050565b5f613ae6613ae184613aa9565b613765565b90508083825260208201905060208402830185811115613b0957613b0861381d565b5b835b81811015613b325780613b1e88826136b4565b845260208401935050602081019050613b0b565b5050509392505050565b5f82601f830112613b5057613b4f6137ee565b5b8135613b60848260208601613ad4565b91505092915050565b5f6101208284031215613b7f57613b7e6136f3565b5b613b8a610120613765565b90505f613b99848285016137a5565b5f830152506020613bac848285016137da565b602083015250604082013567ffffffffffffffff811115613bd057613bcf61377f565b5b613bdc84828501613a49565b6040830152506060613bf084828501613840565b6060830152506080613c0484828501613840565b60808301525060a082013567ffffffffffffffff811115613c2857613c2761377f565b5b613c34848285016138c9565b60a08301525060c0613c4884828501613a95565b60c08301525060e0613c5c84828501613a95565b60e08301525061010082013567ffffffffffffffff811115613c8157613c8061377f565b5b613c8d84828501613b3c565b6101008301525092915050565b5f5ffd5b5f5f83601f840112613cb357613cb26137ee565b5b8235905067ffffffffffffffff811115613cd057613ccf613c9a565b5b602083019150836001820283011115613cec57613ceb61381d565b5b9250929050565b5f5f5f60408486031215613d0a57613d09613666565b5b5f84013567ffffffffffffffff811115613d2757613d2661366a565b5b613d3386828701613b69565b935050602084013567ffffffffffffffff811115613d5457613d5361366a565b5b613d6086828701613c9e565b92509250509250925092565b613d7581613a76565b82525050565b5f602082019050613d8e5f830184613d6c565b92915050565b5f5f5f5f5f60808688031215613dad57613dac613666565b5b5f613dba888289016136b4565b9550506020613dcb888289016136b4565b9450506040613ddc88828901613840565b935050606086013567ffffffffffffffff811115613dfd57613dfc61366a565b5b613e0988828901613c9e565b92509250509295509295909350565b613e2181613574565b82525050565b5f602082019050613e3a5f830184613e18565b92915050565b5f5f5f60408486031215613e5757613e56613666565b5b5f613e6486828701613a95565b935050602084013567ffffffffffffffff811115613e8557613e8461366a565b5b613e9186828701613c9e565b92509250509250925092565b613ea681613574565b8114613eb0575f5ffd5b50565b5f81359050613ec181613e9d565b92915050565b5f60208284031215613edc57613edb613666565b5b5f613ee984828501613eb3565b91505092915050565b613efb8161368d565b82525050565b5f602082019050613f145f830184613ef2565b92915050565b5f5f5f5f60408587031215613f3257613f31613666565b5b5f85013567ffffffffffffffff811115613f4f57613f4e61366a565b5b613f5b87828801613c9e565b9450945050602085013567ffffffffffffffff811115613f7e57613f7d61366a565b5b613f8a87828801613c9e565b925092505092959194509250565b5f60208284031215613fad57613fac613666565b5b5f613fba84828501613a95565b91505092915050565b5f5f60208385031215613fd957613fd8613666565b5b5f83013567ffffffffffffffff811115613ff657613ff561366a565b5b61400285828601613c9e565b92509250509250929050565b5f5f5f5f6060858703121561402657614025613666565b5b5f614033878288016136b4565b945050602061404487828801613840565b935050604085013567ffffffffffffffff8111156140655761406461366a565b5b61407187828801613c9e565b925092505092959194509250565b5f6020828403121561409457614093613666565b5b5f6140a184828501613840565b91505092915050565b6140b381613821565b82525050565b5f6020820190506140cc5f8301846140aa565b92915050565b5f6040820190506140e55f830185613ef2565b6140f260208301846140aa565b9392505050565b614102816137b9565b82525050565b5f60c08201905061411b5f8301896140aa565b61412860208301886140aa565b61413560408301876140f9565b6141426060830186613d6c565b61414f60808301856140aa565b61415c60a0830184613d6c565b979650505050505050565b5f5f6040838503121561417d5761417c613666565b5b5f61418a85828601613eb3565b925050602061419b858286016136b4565b9150509250929050565b5f5f83601f8401126141ba576141b96137ee565b5b8235905067ffffffffffffffff8111156141d7576141d6613c9a565b5b6020830191508360208202830111156141f3576141f261381d565b5b9250929050565b5f5f5f5f5f5f5f5f60a0898b03121561421657614215613666565b5b5f6142238b828c016136b4565b98505060206142348b828c016136b4565b975050604089013567ffffffffffffffff8111156142555761425461366a565b5b6142618b828c016141a5565b9650965050606089013567ffffffffffffffff8111156142845761428361366a565b5b6142908b828c016141a5565b9450945050608089013567ffffffffffffffff8111156142b3576142b261366a565b5b6142bf8b828c01613c9e565b92509250509295985092959890939650565b5f5f5f5f5f5f60a087890312156142eb576142ea613666565b5b5f6142f889828a016136b4565b965050602061430989828a016136b4565b955050604061431a89828a01613840565b945050606061432b89828a01613840565b935050608087013567ffffffffffffffff81111561434c5761434b61366a565b5b61435889828a01613c9e565b92509250509295509295509295565b5f6bffffffffffffffffffffffff82169050919050565b61438781614367565b8114614391575f5ffd5b50565b5f813590506143a28161437e565b92915050565b5f5f5f606084860312156143bf576143be613666565b5b5f6143cc86828701613a95565b93505060206143dd868287016136b4565b92505060406143ee86828701614394565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61442f82613821565b915061443a83613821565b9250828201905080821115614452576144516143f8565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61448e81613783565b82525050565b61449d816137b9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144d58161368d565b82525050565b6144e481613821565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61451c826144ea565b61452681856144f4565b9350614536818560208601614504565b61453f816136f7565b840191505092915050565b5f60e083015f83015161455f5f8601826144cc565b50602083015161457260208601826144db565b506040830151848203604086015261458a8282614512565b915050606083015161459f60608601826144db565b5060808301516145b26080860182614494565b5060a08301516145c560a0860182614494565b5060c08301516145d860c08601826144db565b508091505092915050565b5f6145ee838361454a565b905092915050565b5f602082019050919050565b5f61460c826144a3565b61461681856144ad565b935083602082028501614628856144bd565b805f5b85811015614663578484038952815161464485826145e3565b945061464f836145f6565b925060208a0199505060018101905061462b565b50829750879550505050505092915050565b61467e81613a76565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6146b883836144cc565b60208301905092915050565b5f602082019050919050565b5f6146da82614684565b6146e4818561468e565b93506146ef8361469e565b805f5b8381101561471f57815161470688826146ad565b9750614711836146c4565b9250506001810190506146f2565b5085935050505092915050565b5f61012083015f8301516147425f860182614485565b5060208301516147556020860182614494565b506040830151848203604086015261476d8282614602565b915050606083015161478260608601826144db565b50608083015161479560808601826144db565b5060a083015184820360a08601526147ad8282614512565b91505060c08301516147c260c0860182614675565b5060e08301516147d560e0860182614675565b506101008301518482036101008601526147ef82826146d0565b9150508091505092915050565b5f82825260208201905092915050565b5f61481783856147fc565b9350614824838584613613565b61482d836136f7565b840190509392505050565b5f6040820190508181035f830152614850818661472c565b9050818103602083015261486581848661480c565b9050949350505050565b61487881614367565b82525050565b5f6060820190506148915f830186613d6c565b61489e6020830185613ef2565b6148ab604083018461486f565b949350505050565b5f6040820190506148c65f830185613d6c565b6148d36020830184613d6c565b9392505050565b5f6040820190506148ed5f830185613d6c565b6148fa60208301846140aa565b9392505050565b5f6060820190506149145f830186613d6c565b6149216020830185613ef2565b61492e6040830184613ef2565b949350505050565b5f6040820190506149495f8301856140aa565b61495660208301846140aa565b9392505050565b5f5ffd5b5f5ffd5b5f5f858511156149785761497761495d565b5b8386111561498957614988614961565b5b6001850283019150848603905094509492505050565b5f6060820190506149b25f8301866140aa565b6149bf60208301856140aa565b6149cc60408301846140aa565b949350505050565b5f6060820190508181035f8301526149ec818661472c565b90506149fb60208301856140aa565b614a0860408301846140aa565b949350505050565b5f614a1a826144ea565b614a2481856147fc565b9350614a34818560208601614504565b614a3d816136f7565b840191505092915050565b5f60c082019050614a5b5f830189613d6c565b614a6860208301886140aa565b614a7560408301876140aa565b614a8260608301866140aa565b614a8f60808301856140aa565b81810360a0830152614aa18184614a10565b9050979650505050505050565b5f606082019050614ac15f830186613d6c565b614ace60208301856140aa565b8181036040830152614ae08184614a10565b9050949350505050565b5f6060820190508181035f830152614b02818661472c565b9050614b1160208301856140aa565b8181036040830152614b238184614a10565b9050949350505050565b5f604082019050614b405f830185613e18565b614b4d6020830184613ef2565b9392505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b92600283614b54565b9150614b9d82614b5e565b600282019050919050565b5f819050919050565b614bc2614bbd82613a76565b614ba8565b82525050565b5f614bd282614b86565b9150614bde8285614bb1565b602082019150614bee8284614bb1565b6020820191508190509392505050565b5f604082019050614c115f830185613ef2565b8181036020830152614c238184614a10565b90509392505050565b5f81519050614c3a81613a7f565b92915050565b5f81519050614c4e8161382a565b92915050565b5f60408284031215614c6957614c686136f3565b5b614c736040613765565b90505f614c8284828501614c2c565b5f830152506020614c9584828501614c40565b60208301525092915050565b5f60408284031215614cb657614cb5613666565b5b5f614cc384828501614c54565b91505092915050565b604082015f820151614ce05f850182614675565b506020820151614cf360208501826144db565b50505050565b5f604082019050614d0c5f830184614ccc565b92915050565b5f60a082019050614d255f830188613d6c565b614d326020830187613d6c565b614d3f6040830186613d6c565b614d4c60608301856140aa565b614d596080830184613ef2565b9695505050505050565b5f81905092915050565b614d768161368d565b82525050565b5f614d878383614d6d565b60208301905092915050565b5f614d9d82614684565b614da78185614d63565b9350614db28361469e565b805f5b83811015614de2578151614dc98882614d7c565b9750614dd4836146c4565b925050600181019050614db5565b5085935050505092915050565b5f614dfa8284614d93565b915081905092915050565b5f60a082019050614e185f830188613d6c565b614e256020830187613d6c565b614e3260408301866140aa565b614e3f60608301856140aa565b614e4c6080830184613d6c565b9695505050505050565b5f606082019050614e695f830186613d6c565b614e766020830185613d6c565b614e836040830184613d6c565b949350505050565b614e9481613783565b82525050565b5f602082019050614ead5f830184614e8b565b92915050565b5f6060820190508181035f830152614ecc81868861480c565b9050614edb60208301856140aa565b614ee860408301846140aa565b95945050505050565b5f608082019050614f045f830187613d6c565b614f116020830186614e8b565b614f1e6040830185613d6c565b614f2b6060830184613d6c565b95945050505050565b5f604082019050614f475f830186613d6c565b8181036020830152614f5a81848661480c565b9050949350505050565b5f81519050614f7281613e9d565b92915050565b5f60208284031215614f8d57614f8c613666565b5b5f614f9a84828501614f64565b91505092915050565b5f606082019050614fb65f830187613d6c565b614fc36020830186613ef2565b8181036040830152614fd681848661480c565b905095945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f615015601c83614b54565b915061502082614fe1565b601c82019050919050565b5f61503582615009565b91506150418284614bb1565b60208201915081905092915050565b5f6040820190508181035f830152615068818661472c565b9050818103602083015261507d81848661480c565b9050949350505050565b5f6020828403121561509c5761509b613666565b5b5f6150a984828501614c2c565b91505092915050565b7fff000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6150e6600183614b54565b91506150f1826150b2565b600182019050919050565b5f8160601b9050919050565b5f615112826150fc565b9050919050565b5f61512382615108565b9050919050565b61513b6151368261368d565b615119565b82525050565b5f61514b826150da565b9150615157828661512a565b6014820191506151678285614bb1565b6020820191506151778284614bb1565b602082019150819050949350505050565b5f615192826144ea565b61519c8185613609565b93506151ac818560208601614504565b80840191505092915050565b5f6151c38285615188565b91506151cf8284614bb1565b6020820191508190509392505050565b7f53657175656e6365207369676e65723a0a0000000000000000000000000000005f82015250565b5f615213601183614b54565b915061521e826151df565b601182019050919050565b5f819050919050565b61524361523e82613821565b615229565b82525050565b5f61525382615207565b915061525f828561512a565b60148201915061526f8284615232565b6020820191508190509392505050565b7f53657175656e6365206e657374656420636f6e6669673a0a00000000000000005f82015250565b5f6152b3601883614b54565b91506152be8261527f565b601882019050919050565b5f6152d3826152a7565b91506152df8286614bb1565b6020820191506152ef8285615232565b6020820191506152ff8284615232565b602082019150819050949350505050565b7f53657175656e636520737461746963206469676573743a0a00000000000000005f82015250565b5f615344601883614b54565b915061534f82615310565b601882019050919050565b5f61536482615338565b91506153708284614bb1565b60208201915081905092915050565b7f53657175656e636520616e792061646472657373207375626469676573743a0a5f82015250565b5f6153b3602083614b54565b91506153be8261537f565b602082019050919050565b5f6153d3826153a7565b91506153df8284614bb1565b60208201915081905092915050565b7f53657175656e63652073617069656e7420636f6e6669673a0a000000000000005f82015250565b5f615422601983614b54565b915061542d826153ee565b601982019050919050565b5f61544282615416565b915061544e828661512a565b60148201915061545e8285615232565b60208201915061546e8284614bb1565b602082019150819050949350505050565b5f610100820190506154935f83018b613d6c565b6154a0602083018a613ef2565b6154ad60408301896140aa565b6154ba6060830188613d6c565b6154c760808301876140aa565b6154d460a08301866140f9565b6154e160c08301856140f9565b6154ee60e08301846140aa565b999850505050505050505056fea26469706673582212203719e46a9a86dab24a35db4a3d94c62713d15f05ffd1a322e60a2ef3b78ffbf964736f6c634300081c00336080604052348015600e575f5ffd5b5061537c8061001c5f395ff3fe608060405260043610610117575f3560e01c80636ea445771161009f578063ad55366b11610063578063ad55366b14610475578063b93ea7ad146104b6578063bc197c81146104d2578063f23a6e611461050e578063f727ef1c1461054a5761011e565b80636ea445771461038e5780638943ec02146103aa5780638c3f5563146103d257806392dcb3fc1461040e578063aaf10f421461044b5761011e565b80631a9b2337116100e65780631a9b2337146102c85780631f6a1eb91461030457806329561426146103205780634fcf3eca1461034857806351605d80146103645761011e565b8063025b22bc146101f857806313792a4a14610214578063150b7a02146102505780631626ba7e1461028c5761011e565b3661011e57005b60045f369050106101f6575f61013f5f369061013a9190613487565b610572565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146101f4575f5f8273ffffffffffffffffffffffffffffffffffffffff165f3660405161019d929190613521565b5f60405180830381855af49150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101ec57805160208201fd5b805160208201f35b505b005b610212600480360381019061020d91906135a4565b6105c7565b005b34801561021f575f5ffd5b5061023a60048036038101906102359190613bcf565b610643565b6040516102479190613c57565b60405180910390f35b34801561025b575f5ffd5b5061027660048036038101906102719190613c70565b6107f2565b6040516102839190613d03565b60405180910390f35b348015610297575f5ffd5b506102b260048036038101906102ad9190613d1c565b610806565b6040516102bf9190613d03565b60405180910390f35b3480156102d3575f5ffd5b506102ee60048036038101906102e99190613da3565b610848565b6040516102fb9190613ddd565b60405180910390f35b61031e60048036038101906103199190613df6565b610859565b005b34801561032b575f5ffd5b5061034660048036038101906103419190613e74565b6108e8565b005b610362600480360381019061035d9190613da3565b610964565b005b34801561036f575f5ffd5b50610378610a59565b6040516103859190613c57565b60405180910390f35b6103a860048036038101906103a39190613e9f565b610a8a565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190613eea565b610b29565b005b3480156103dd575f5ffd5b506103f860048036038101906103f39190613f5b565b610b2f565b6040516104059190613f95565b60405180910390f35b348015610419575f5ffd5b50610434600480360381019061042f9190613e74565b610b67565b604051610442929190613fae565b60405180910390f35b348015610456575f5ffd5b5061045f610b7b565b60405161046c9190613ddd565b60405180910390f35b348015610480575f5ffd5b5061049b60048036038101906104969190613bcf565b610b89565b6040516104ad96959493929190613fe4565b60405180910390f35b6104d060048036038101906104cb9190614043565b610bc7565b005b3480156104dd575f5ffd5b506104f860048036038101906104f391906140d6565b610cbd565b6040516105059190613d03565b60405180910390f35b348015610519575f5ffd5b50610534600480360381019061052f91906141ad565b610cd4565b6040516105419190613d03565b60405180910390f35b348015610555575f5ffd5b50610570600480360381019061056b9190614284565b610ce9565b005b5f6105be7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916610db2565b5f1c9050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461063757336040517fa19dbf0000000000000000000000000000000000000000000000000000000000815260040161062e9190613ddd565b60405180910390fd5b61064081610dea565b50565b5f5f6001856101000151516106589190614301565b67ffffffffffffffff811115610671576106706135e3565b5b60405190808252806020026020018201604052801561069f5781602001602082028036833780820191505090505b5090505f5f90505b8561010001515181101561072f5785610100015181815181106106cd576106cc614334565b5b60200260200101518282815181106106e8576106e7614334565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506106a7565b503381866101000151518151811061074a57610749614334565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561010001819052505f61079a868686610e2d565b509050806107e3578585856040517ff58cc8b50000000000000000000000000000000000000000000000000000000081526004016107da93929190614714565b60405180910390fd5b60015f1b925050509392505050565b5f63150b7a0260e01b905095945050505050565b5f5f6108118561101d565b90505f61081f828686610e2d565b50905080610834575f60e01b92505050610841565b6320c13b0b60e01b925050505b9392505050565b5f61085282610572565b9050919050565b5f5a90505f6108688686611046565b905061087c816060015182608001516114e8565b5f5f610889838787610e2d565b91509150816108d3578286866040517fa2b6d61b0000000000000000000000000000000000000000000000000000000081526004016108ca93929190614714565b60405180910390fd5b6108de84828561158c565b5050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095857336040517fa19dbf0000000000000000000000000000000000000000000000000000000000815260040161094f9190613ddd565b60405180910390fd5b610961816118bc565b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d457336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016109cb9190613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166109f482610572565b73ffffffffffffffffffffffffffffffffffffffff1603610a4c57806040517f1c3812cc000000000000000000000000000000000000000000000000000000008152600401610a439190613d03565b60405180910390fd5b610a56815f61195d565b50565b5f610a857fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b6119fe565b905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610afa57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610af19190613ddd565b60405180910390fd5b5f5a90505f610b098484611046565b90505f610b1582611a08565b9050610b2283828461158c565b5050505050565b50505050565b5f610b5e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b610db2565b5f1c9050919050565b5f5f610b7283611a58565b91509150915091565b5f610b84611aa9565b905090565b5f5f5f5f5f5f610b9c8989895f5f611ab1565b809550819650829750839950849a505050505050610bb983611dee565b935093975093979195509350565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3757336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610c2e9190613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610c5783610572565b73ffffffffffffffffffffffffffffffffffffffff1614610caf57816040517f5b4d6d6a000000000000000000000000000000000000000000000000000000008152600401610ca69190613d03565b60405180910390fd5b610cb9828261195d565b5050565b5f63bc197c8160e01b905098975050505050505050565b5f63f23a6e6160e01b90509695505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5957336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610d509190613ddd565b60405180910390fd5b610d728383836bffffffffffffffffffffffff16611dff565b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1838383604051610da59392919061475a565b60405180910390a1505050565b5f5f8383604051602001610dc792919061478f565b604051602081830303815290604052805190602001209050805491505092915050565b610df381611e5d565b7f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0381604051610e229190613ddd565b60405180910390a150565b5f5f5f84845f818110610e4357610e42614334565b5b9050013560f81c60f81b9050608060f81b608060f81b82167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f9c57610e8b86611a08565b91505f5f610e9884611a58565b91509150428111610ee25783816040517ff95b6ab7000000000000000000000000000000000000000000000000000000008152600401610ed99291906147b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610f4a57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610f90578333836040517f8945c313000000000000000000000000000000000000000000000000000000008152600401610f87939291906147dd565b60405180910390fd5b60019450505050611015565b5f5f5f610fac8989895f5f611ab1565b905080985081945082955083965050505050828210156110055782826040517ffd41fcba000000000000000000000000000000000000000000000000000000008152600401610ffc929190614812565b60405180910390fd5b61100e81611dee565b9550505050505b935093915050565b611025613392565b6003815f019060ff16908160ff1681525050818160e0018181525050919050565b61104e613392565b5f815f019060ff16908160ff16815250505f5f61106b8585611e63565b915060ff16915060018083160361108b575f8360600181815250506110c7565b6110a0818686611e799290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f811115611104576110f682828888611eaa9190939291909392919063ffffffff16565b856080018194508281525050505b5f6010808516036111185760019050611170565b60208085160361114b57611137838888611ed79290919263ffffffff16565b8161ffff169150809450819250505061116f565b611160838888611ef69290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561118a576111896135e3565b5b6040519080825280602002602001820160405280156111c357816020015b6111b06133dd565b8152602001906001900390816111a85790505b5085604001819052505f5f90505b818110156114dd575f6111ef858a8a611ef69290919263ffffffff16565b8096508192505050600180821660ff160361125e57308760400151838151811061121c5761121b614334565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506112ca565b611273858a8a611f119290919263ffffffff16565b8860400151848151811061128a57611289614334565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff1603611318576112ec858a8a611f429290919263ffffffff16565b8860400151848151811061130357611302614334565b5b60200260200101516020018197508281525050505b600480821660ff16036113e0575f61133b868b8b611f589290919263ffffffff16565b8162ffffff169150809750819250505089898790838961135b9190614301565b9261136893929190614841565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050886040015184815181106113c1576113c0614334565b5b60200260200101516040018190525080866113dc9190614301565b9550505b600880821660ff160361142e57611402858a8a611f429290919263ffffffff16565b8860400151848151811061141957611418614334565b5b60200260200101516060018197508281525050505b601080821660ff16148760400151838151811061144e5761144d614334565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061148457611483614334565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff16876040015183815181106114bf576114be614334565b5b602002602001015160c00181815250505080806001019150506111d1565b505050505092915050565b5f6114f283610b2f565b905081811461153c578282826040517f9b6514f40000000000000000000000000000000000000000000000000000000081526004016115339392919061487b565b60405180910390fd5b5f60018301905061154d8482611f78565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881848260405161157e929190614812565b60405180910390a150505050565b5f5f90505f82604001515190505f5f90505b818110156118b4575f846040015182815181106115be576115bd614334565b5b602002602001015190508060a0015180156115d7575083155b1561161b577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b868360405161160d9291906147b6565b60405180910390a1506118a7565b5f93505f816060015190505f81141580156116355750805a105b1561167b5785835a6040517f21395274000000000000000000000000000000000000000000000000000000008152600401611672939291906148b0565b60405180910390fd5b5f82608001511561173057611729835f01515f841461169a578361169c565b5a5b634c4e814c60e01b8b8d898b8e606001518b604001516040516024016116c796959493929190614924565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fad565b9050611758565b611755835f015184602001515f8514611749578461174b565b5a5b8660400151611fc2565b90505b8061186a575f60ff168360c00151036117b957600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d888561179a611fd9565b6040516117a99392919061498a565b60405180910390a15050506118a7565b600160ff168360c00151036118105786846117d2611fd9565b6040517f7f6b0bb1000000000000000000000000000000000000000000000000000000008152600401611807939291906149c6565b60405180910390fd5b600260ff168360c0015103611869577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b888561184a611fd9565b6040516118599392919061498a565b60405180910390a15050506118b4565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a888560405161189b9291906147b6565b60405180910390a15050505b808060010191505061159e565b505050505050565b5f5f1b81036118f7576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119237fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b82611ff7565b7f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa816040516119529190613c57565b60405180910390a150565b6119c17fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff165f1b611ffe565b7f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed182826040516119f2929190614a09565b60405180910390a15050565b5f81549050919050565b5f5f611a18836020015130612033565b90505f611a24846120d7565b90508181604051602001611a39929190614aa4565b6040516020818303038152906040528051906020012092505050919050565b5f5f5f611a877fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b85610db2565b5f1c9050606081901c816bffffffffffffffffffffffff169250925050915091565b5f3054905090565b5f5f5f5f5f5f5f611ac28b8b611e63565b915060ff169150611ad161342e565b6040808416148015611b0e57505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611c4a57611b28828d8d611f119290919263ffffffff16565b809350819a50505089611c49575f611b4b838e8e611f589290919263ffffffff16565b8162ffffff16915080945081925050505f8d8d85908487611b6c9190614301565b92611b7993929190614841565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090508a73ffffffffffffffffffffffffffffffffffffffff1663ccce3bc830836040518363ffffffff1660e01b8152600401611bf8929190614ada565b6040805180830381865afa158015611c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c369190614b7d565b92508184611c449190614301565b935050505b5b600180841603611c8357611c718d8a838f8f87908092611c6c93929190614841565b61230b565b97509750975097509750505050611de1565b6002808416148d60200190151590811515815250505f6002601c8516901c9050611cbf83828f8f611eaa9190939291909392919063ffffffff16565b8094508197505050505f6001600560208616901c611cdd9190614301565b9050611cfb83828f8f611eaa9190939291909392919063ffffffff16565b809450819a50505050611d0d8d611a08565b9350611d2b8d858e8e86908092611d2693929190614841565b61256d565b8097508198505050611d3f86895f1b6130e1565b9550611d4d86865f1b6130e1565b9550611d71868a73ffffffffffffffffffffffffffffffffffffffff165f1b6130e1565b95505f5f1b815f015114158015611d8b575085815f015114155b8015611d9b575080602001518511155b15611ddd57806040517fccbb534f000000000000000000000000000000000000000000000000000000008152600401611dd49190614bd5565b60405180910390fd5b5050505b9550955095509550959050565b5f611df8826130f5565b9050919050565b611e587fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b846bffffffffffffffffffffffff841660608673ffffffffffffffffffffffffffffffffffffffff16901b175f1b611ffe565b505050565b80305550565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b611fa97f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b835f1b611ffe565b5050565b5f5f5f8351602085018787f490509392505050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b8082555050565b5f838360405160200161201292919061478f565b60405160208183030381529060405280519060200120905081815550505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856120a257466120a4565b5f5b856040516020016120b9959493929190614bee565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016120ef9190614ccb565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff1603612187575f6121258460400151613138565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2818560600151866080015185604051602001612168959493929190614ce1565b6040516020818303038152906040528051906020012092505050612306565b600160ff16835f015160ff16036121f6577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a0015180519060200120826040516020016121d893929190614d32565b60405160208183030381529060405280519060200120915050612306565b600260ff16835f015160ff160361225e577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c001518260405160200161224093929190614d32565b60405160208183030381529060405280519060200120915050612306565b600360ff16835f015160ff16036122c6577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e00151826040516020016122a893929190614d32565b60405160208183030381529060405280519060200120915050612306565b825f01516040517f048183200000000000000000000000000000000000000000000000000000000081526004016122fd9190614d76565b60405180910390fd5b919050565b5f5f5f5f5f612318613392565b6002815f019060ff16908160ff16815250505f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b89899050821015612502575f5f612372848d8d611f589290919263ffffffff16565b8162ffffff1691508095508192505050838161238e9190614301565b9150505f8b8b905082146123a2575f6123a4565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303612404576123eb8f8d8d879086926123e393929190614841565b600185611ab1565b809a50819b50829c50839d50849e505050505050612434565b612422858d8d8790869261241a93929190614841565b600185611ab1565b50809a50819b50829c50839d50505050505b8989101561248f578b8b8590849261244e93929190614841565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016124869493929190614d8f565b60405180910390fd5b819350878d5f0151036124a8575f5f1b8d5f0181815250505b8287106124ee5786836040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004016124e5929190614812565b60405180910390fd5b878560c00181815250508692505050612350565b5f5f1b8b5f01511415801561251b57508a602001518511155b1561255d578a6040517fccbb534f0000000000000000000000000000000000000000000000000000000081526004016125549190614bd5565b60405180910390fd5b5050509550955095509550959050565b5f5f5f5b848490508110156130d7575f612592828787611ef69290919263ffffffff16565b8160ff16915080935081925050505f600460f08316901c90505f81036126ea575f600f831690505f8160ff16036125e1576125d8848989611ef69290919263ffffffff16565b80955081925050505b5f5f6125f8868b8b6131b29290919263ffffffff16565b8097508193505050612615868b8b6131b29290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f8388866040515f815260200160405260405161267b9493929190614dcd565b6020604051602081039080840390855afa15801561269b573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f6126bd828960ff166131c8565b90505f5f1b8c036126ce57806126d9565b6126d88c826130e1565b5b9b5050505050505050505050612571565b60018103612775575f600f831690505f8160ff160361272157612718848989611ef69290919263ffffffff16565b80955081925050505b5f612737858a8a611f119290919263ffffffff16565b80965081925050505f61274d828460ff166131c8565b90505f5f1b870361275e5780612769565b61276887826130e1565b5b96505050505050612571565b60028103612974575f6003831690505f8160ff16036127ac576127a3848989611ef69290919263ffffffff16565b80955081925050505b5f6127c2858a8a611f119290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f6127f887838d8d611eaa9190939291909392919063ffffffff16565b80985081925050505f81880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261285c93929190614841565b6040518463ffffffff1660e01b815260040161287a93929190614e10565b602060405180830381865afa158015612895573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b99190614e54565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612930578c848d8d8b9085926128f193929190614841565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016129279493929190614e7f565b60405180910390fd5b8097508460ff168a0199505f612949858760ff166131c8565b90505f5f1b8a0361295a5780612965565b6129648a826130e1565b5b99505050505050505050612571565b600381036129be575f6129928489896131b29290919263ffffffff16565b80955081925050505f5f1b85036129a957806129b4565b6129b385826130e1565b5b9450505050612571565b60048103612a3d575f600f831660ff1690505f6129ed85838b8b611eaa9190939291909392919063ffffffff16565b80965081925050505f81860190505f5f612a198e8e8e8e8c908892612a1493929190614841565b61256d565b91509150829750818a019950612a2f89826130e1565b985050505050505050612571565b60068103612b4d575f6002600c841660ff16901c60ff1690505f8103612a8157612a72848989611ef69290919263ffffffff16565b8160ff16915080955081925050505b5f6003841660ff1690505f8103612ab757612aa7858a8a611ed79290919263ffffffff16565b8161ffff16915080965081925050505b5f612acd868b8b611f589290919263ffffffff16565b8162ffffff16915080975081925050505f81870190505f5f612b018f8f8f8f8d908892612afc93929190614841565b61256d565b91509150829850848210612b1557858b019a505b5f612b218287896131fa565b90505f5f1b8b03612b325780612b3d565b612b3c8b826130e1565b5b9a50505050505050505050612571565b60058103612bcf575f612b6b8489896131b29290919263ffffffff16565b8095508192505050888103612b9e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b5f612ba88261322f565b90505f5f1b8603612bb95780612bc4565b612bc386826130e1565b5b955050505050612571565b60078103612d35575f600f831690505f8160ff1603612c0657612bfd848989611ef69290919263ffffffff16565b80955081925050505b5f5f612c1d868b8b6131b29290919263ffffffff16565b8097508193505050612c3a868b8b6131b29290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f604051602001612c919190614f07565b604051602081830303815290604052805190602001208388866040515f8152602001604052604051612cc69493929190614dcd565b6020604051602081039080840390855afa158015612ce6573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612d08828960ff166131c8565b90505f5f1b8c03612d195780612d24565b612d238c826130e1565b5b9b5050505050505050505050612571565b60088103612dce575f612d538489896131b29290919263ffffffff16565b80955081925050505f612d6f5f8c61325e90919063ffffffff16565b9050808203612d9c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b5f612da6836132af565b90505f5f1b8703612db75780612dc2565b612dc187826130e1565b5b96505050505050612571565b60098103612f34575f6003831690505f8160ff1603612e0557612dfc848989611ef69290919263ffffffff16565b80955081925050505b5f612e1b858a8a611f119290919263ffffffff16565b80965081925050505f5f6002600c871660ff16901c60ff169050612e5187828d8d611eaa9190939291909392919063ffffffff16565b8098508193505050505f81870190505f8373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612e9093929190614841565b6040518463ffffffff1660e01b8152600401612eae93929190614f2c565b602060405180830381865afa158015612ec9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eed9190614f63565b90508197508460ff168a0199505f612f09858760ff16846132de565b90505f5f1b8a03612f1a5780612f25565b612f248a826130e1565b5b99505050505050505050612571565b600a810361309a575f6003831690505f8160ff1603612f6b57612f62848989611ef69290919263ffffffff16565b80955081925050505b5f612f81858a8a611f119290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f612fb787838d8d611eaa9190939291909392919063ffffffff16565b80985081925050505f81880190505f8473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792612ff593929190614841565b6040518463ffffffff1660e01b815260040161301393929190614e10565b602060405180830381865afa15801561302e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130529190614f63565b90508198508560ff168b019a505f61306e868860ff16846132de565b90505f5f1b8b0361307f578061308a565b6130898b826130e1565b5b9a50505050505050505050612571565b806040517fb2505f7c0000000000000000000000000000000000000000000000000000000081526004016130ce9190613f95565b60405180910390fd5b5094509492505050565b5f825f528160205260405f20905092915050565b5f5f5f1b8214158015613131575061312e7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b6119fe565b82145b9050919050565b5f60605f5f90505b83518110156131a1575f61316d8583815181106131605761315f614334565b5b6020026020010151613313565b90508281604051602001613182929190614fbe565b6040516020818303038152906040529250508080600101915050613140565b508080519060200120915050919050565b5f5f848301359150602083019050935093915050565b5f82826040516020016131dc929190615094565b60405160208183030381529060405280519060200120905092915050565b5f83838360405160200161321093929190615114565b6040516020818303038152906040528051906020012090509392505050565b5f8160405160200161324191906151a5565b604051602081830303815290604052805190602001209050919050565b5f5f61326e846020015184612033565b90505f61327a856120d7565b9050818160405160200161328f929190614aa4565b604051602081830303815290604052805190602001209250505092915050565b5f816040516020016132c19190615214565b604051602081830303815290604052805190602001209050919050565b5f8383836040516020016132f493929190615283565b6040516020818303038152906040528051906020012090509392505050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c001516040516020016133759897969594939291906152ca565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b60405180604001604052805f81526020015f81525090565b5f82905092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f82821b905092915050565b5f6134928383613446565b8261349d8135613450565b925060048210156134dd576134d87fffffffff000000000000000000000000000000000000000000000000000000008360040360080261347b565b831692505b505092915050565b5f81905092915050565b828183375f83830152505050565b5f61350883856134e5565b93506135158385846134ef565b82840190509392505050565b5f61352d8284866134fd565b91508190509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135738261354a565b9050919050565b61358381613569565b811461358d575f5ffd5b50565b5f8135905061359e8161357a565b92915050565b5f602082840312156135b9576135b8613542565b5b5f6135c684828501613590565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613619826135d3565b810181811067ffffffffffffffff82111715613638576136376135e3565b5b80604052505050565b5f61364a613539565b90506136568282613610565b919050565b5f5ffd5b5f60ff82169050919050565b6136748161365f565b811461367e575f5ffd5b50565b5f8135905061368f8161366b565b92915050565b5f8115159050919050565b6136a981613695565b81146136b3575f5ffd5b50565b5f813590506136c4816136a0565b92915050565b5f5ffd5b5f67ffffffffffffffff8211156136e8576136e76135e3565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61370f816136fd565b8114613719575f5ffd5b50565b5f8135905061372a81613706565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561374e5761374d6135e3565b5b613757826135d3565b9050602081019050919050565b5f61377661377184613734565b613641565b90508281526020810184848401111561379257613791613730565b5b61379d8482856134ef565b509392505050565b5f82601f8301126137b9576137b86136ca565b5b81356137c9848260208601613764565b91505092915050565b5f60e082840312156137e7576137e66135cf565b5b6137f160e0613641565b90505f61380084828501613590565b5f8301525060206138138482850161371c565b602083015250604082013567ffffffffffffffff8111156138375761383661365b565b5b613843848285016137a5565b60408301525060606138578482850161371c565b606083015250608061386b848285016136b6565b60808301525060a061387f848285016136b6565b60a08301525060c06138938482850161371c565b60c08301525092915050565b5f6138b16138ac846136ce565b613641565b905080838252602082019050602084028301858111156138d4576138d36136f9565b5b835b8181101561391b57803567ffffffffffffffff8111156138f9576138f86136ca565b5b80860161390689826137d2565b855260208501945050506020810190506138d6565b5050509392505050565b5f82601f830112613939576139386136ca565b5b813561394984826020860161389f565b91505092915050565b5f819050919050565b61396481613952565b811461396e575f5ffd5b50565b5f8135905061397f8161395b565b92915050565b5f67ffffffffffffffff82111561399f5761399e6135e3565b5b602082029050602081019050919050565b5f6139c26139bd84613985565b613641565b905080838252602082019050602084028301858111156139e5576139e46136f9565b5b835b81811015613a0e57806139fa8882613590565b8452602084019350506020810190506139e7565b5050509392505050565b5f82601f830112613a2c57613a2b6136ca565b5b8135613a3c8482602086016139b0565b91505092915050565b5f6101208284031215613a5b57613a5a6135cf565b5b613a66610120613641565b90505f613a7584828501613681565b5f830152506020613a88848285016136b6565b602083015250604082013567ffffffffffffffff811115613aac57613aab61365b565b5b613ab884828501613925565b6040830152506060613acc8482850161371c565b6060830152506080613ae08482850161371c565b60808301525060a082013567ffffffffffffffff811115613b0457613b0361365b565b5b613b10848285016137a5565b60a08301525060c0613b2484828501613971565b60c08301525060e0613b3884828501613971565b60e08301525061010082013567ffffffffffffffff811115613b5d57613b5c61365b565b5b613b6984828501613a18565b6101008301525092915050565b5f5ffd5b5f5f83601f840112613b8f57613b8e6136ca565b5b8235905067ffffffffffffffff811115613bac57613bab613b76565b5b602083019150836001820283011115613bc857613bc76136f9565b5b9250929050565b5f5f5f60408486031215613be657613be5613542565b5b5f84013567ffffffffffffffff811115613c0357613c02613546565b5b613c0f86828701613a45565b935050602084013567ffffffffffffffff811115613c3057613c2f613546565b5b613c3c86828701613b7a565b92509250509250925092565b613c5181613952565b82525050565b5f602082019050613c6a5f830184613c48565b92915050565b5f5f5f5f5f60808688031215613c8957613c88613542565b5b5f613c9688828901613590565b9550506020613ca788828901613590565b9450506040613cb88882890161371c565b935050606086013567ffffffffffffffff811115613cd957613cd8613546565b5b613ce588828901613b7a565b92509250509295509295909350565b613cfd81613450565b82525050565b5f602082019050613d165f830184613cf4565b92915050565b5f5f5f60408486031215613d3357613d32613542565b5b5f613d4086828701613971565b935050602084013567ffffffffffffffff811115613d6157613d60613546565b5b613d6d86828701613b7a565b92509250509250925092565b613d8281613450565b8114613d8c575f5ffd5b50565b5f81359050613d9d81613d79565b92915050565b5f60208284031215613db857613db7613542565b5b5f613dc584828501613d8f565b91505092915050565b613dd781613569565b82525050565b5f602082019050613df05f830184613dce565b92915050565b5f5f5f5f60408587031215613e0e57613e0d613542565b5b5f85013567ffffffffffffffff811115613e2b57613e2a613546565b5b613e3787828801613b7a565b9450945050602085013567ffffffffffffffff811115613e5a57613e59613546565b5b613e6687828801613b7a565b925092505092959194509250565b5f60208284031215613e8957613e88613542565b5b5f613e9684828501613971565b91505092915050565b5f5f60208385031215613eb557613eb4613542565b5b5f83013567ffffffffffffffff811115613ed257613ed1613546565b5b613ede85828601613b7a565b92509250509250929050565b5f5f5f5f60608587031215613f0257613f01613542565b5b5f613f0f87828801613590565b9450506020613f208782880161371c565b935050604085013567ffffffffffffffff811115613f4157613f40613546565b5b613f4d87828801613b7a565b925092505092959194509250565b5f60208284031215613f7057613f6f613542565b5b5f613f7d8482850161371c565b91505092915050565b613f8f816136fd565b82525050565b5f602082019050613fa85f830184613f86565b92915050565b5f604082019050613fc15f830185613dce565b613fce6020830184613f86565b9392505050565b613fde81613695565b82525050565b5f60c082019050613ff75f830189613f86565b6140046020830188613f86565b6140116040830187613fd5565b61401e6060830186613c48565b61402b6080830185613f86565b61403860a0830184613c48565b979650505050505050565b5f5f6040838503121561405957614058613542565b5b5f61406685828601613d8f565b925050602061407785828601613590565b9150509250929050565b5f5f83601f840112614096576140956136ca565b5b8235905067ffffffffffffffff8111156140b3576140b2613b76565b5b6020830191508360208202830111156140cf576140ce6136f9565b5b9250929050565b5f5f5f5f5f5f5f5f60a0898b0312156140f2576140f1613542565b5b5f6140ff8b828c01613590565b98505060206141108b828c01613590565b975050604089013567ffffffffffffffff81111561413157614130613546565b5b61413d8b828c01614081565b9650965050606089013567ffffffffffffffff8111156141605761415f613546565b5b61416c8b828c01614081565b9450945050608089013567ffffffffffffffff81111561418f5761418e613546565b5b61419b8b828c01613b7a565b92509250509295985092959890939650565b5f5f5f5f5f5f60a087890312156141c7576141c6613542565b5b5f6141d489828a01613590565b96505060206141e589828a01613590565b95505060406141f689828a0161371c565b945050606061420789828a0161371c565b935050608087013567ffffffffffffffff81111561422857614227613546565b5b61423489828a01613b7a565b92509250509295509295509295565b5f6bffffffffffffffffffffffff82169050919050565b61426381614243565b811461426d575f5ffd5b50565b5f8135905061427e8161425a565b92915050565b5f5f5f6060848603121561429b5761429a613542565b5b5f6142a886828701613971565b93505060206142b986828701613590565b92505060406142ca86828701614270565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430b826136fd565b9150614316836136fd565b925082820190508082111561432e5761432d6142d4565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61436a8161365f565b82525050565b61437981613695565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143b181613569565b82525050565b6143c0816136fd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6143f8826143c6565b61440281856143d0565b93506144128185602086016143e0565b61441b816135d3565b840191505092915050565b5f60e083015f83015161443b5f8601826143a8565b50602083015161444e60208601826143b7565b506040830151848203604086015261446682826143ee565b915050606083015161447b60608601826143b7565b50608083015161448e6080860182614370565b5060a08301516144a160a0860182614370565b5060c08301516144b460c08601826143b7565b508091505092915050565b5f6144ca8383614426565b905092915050565b5f602082019050919050565b5f6144e88261437f565b6144f28185614389565b93508360208202850161450485614399565b805f5b8581101561453f578484038952815161452085826144bf565b945061452b836144d2565b925060208a01995050600181019050614507565b50829750879550505050505092915050565b61455a81613952565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61459483836143a8565b60208301905092915050565b5f602082019050919050565b5f6145b682614560565b6145c0818561456a565b93506145cb8361457a565b805f5b838110156145fb5781516145e28882614589565b97506145ed836145a0565b9250506001810190506145ce565b5085935050505092915050565b5f61012083015f83015161461e5f860182614361565b5060208301516146316020860182614370565b506040830151848203604086015261464982826144de565b915050606083015161465e60608601826143b7565b50608083015161467160808601826143b7565b5060a083015184820360a086015261468982826143ee565b91505060c083015161469e60c0860182614551565b5060e08301516146b160e0860182614551565b506101008301518482036101008601526146cb82826145ac565b9150508091505092915050565b5f82825260208201905092915050565b5f6146f383856146d8565b93506147008385846134ef565b614709836135d3565b840190509392505050565b5f6040820190508181035f83015261472c8186614608565b905081810360208301526147418184866146e8565b9050949350505050565b61475481614243565b82525050565b5f60608201905061476d5f830186613c48565b61477a6020830185613dce565b614787604083018461474b565b949350505050565b5f6040820190506147a25f830185613c48565b6147af6020830184613c48565b9392505050565b5f6040820190506147c95f830185613c48565b6147d66020830184613f86565b9392505050565b5f6060820190506147f05f830186613c48565b6147fd6020830185613dce565b61480a6040830184613dce565b949350505050565b5f6040820190506148255f830185613f86565b6148326020830184613f86565b9392505050565b5f5ffd5b5f5ffd5b5f5f8585111561485457614853614839565b5b838611156148655761486461483d565b5b6001850283019150848603905094509492505050565b5f60608201905061488e5f830186613f86565b61489b6020830185613f86565b6148a86040830184613f86565b949350505050565b5f6060820190508181035f8301526148c88186614608565b90506148d76020830185613f86565b6148e46040830184613f86565b949350505050565b5f6148f6826143c6565b61490081856146d8565b93506149108185602086016143e0565b614919816135d3565b840191505092915050565b5f60c0820190506149375f830189613c48565b6149446020830188613f86565b6149516040830187613f86565b61495e6060830186613f86565b61496b6080830185613f86565b81810360a083015261497d81846148ec565b9050979650505050505050565b5f60608201905061499d5f830186613c48565b6149aa6020830185613f86565b81810360408301526149bc81846148ec565b9050949350505050565b5f6060820190508181035f8301526149de8186614608565b90506149ed6020830185613f86565b81810360408301526149ff81846148ec565b9050949350505050565b5f604082019050614a1c5f830185613cf4565b614a296020830184613dce565b9392505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614a6e600283614a30565b9150614a7982614a3a565b600282019050919050565b5f819050919050565b614a9e614a9982613952565b614a84565b82525050565b5f614aae82614a62565b9150614aba8285614a8d565b602082019150614aca8284614a8d565b6020820191508190509392505050565b5f604082019050614aed5f830185613dce565b8181036020830152614aff81846148ec565b90509392505050565b5f81519050614b168161395b565b92915050565b5f81519050614b2a81613706565b92915050565b5f60408284031215614b4557614b446135cf565b5b614b4f6040613641565b90505f614b5e84828501614b08565b5f830152506020614b7184828501614b1c565b60208301525092915050565b5f60408284031215614b9257614b91613542565b5b5f614b9f84828501614b30565b91505092915050565b604082015f820151614bbc5f850182614551565b506020820151614bcf60208501826143b7565b50505050565b5f604082019050614be85f830184614ba8565b92915050565b5f60a082019050614c015f830188613c48565b614c0e6020830187613c48565b614c1b6040830186613c48565b614c286060830185613f86565b614c356080830184613dce565b9695505050505050565b5f81905092915050565b614c5281613569565b82525050565b5f614c638383614c49565b60208301905092915050565b5f614c7982614560565b614c838185614c3f565b9350614c8e8361457a565b805f5b83811015614cbe578151614ca58882614c58565b9750614cb0836145a0565b925050600181019050614c91565b5085935050505092915050565b5f614cd68284614c6f565b915081905092915050565b5f60a082019050614cf45f830188613c48565b614d016020830187613c48565b614d0e6040830186613f86565b614d1b6060830185613f86565b614d286080830184613c48565b9695505050505050565b5f606082019050614d455f830186613c48565b614d526020830185613c48565b614d5f6040830184613c48565b949350505050565b614d708161365f565b82525050565b5f602082019050614d895f830184614d67565b92915050565b5f6060820190508181035f830152614da88186886146e8565b9050614db76020830185613f86565b614dc46040830184613f86565b95945050505050565b5f608082019050614de05f830187613c48565b614ded6020830186614d67565b614dfa6040830185613c48565b614e076060830184613c48565b95945050505050565b5f604082019050614e235f830186613c48565b8181036020830152614e368184866146e8565b9050949350505050565b5f81519050614e4e81613d79565b92915050565b5f60208284031215614e6957614e68613542565b5b5f614e7684828501614e40565b91505092915050565b5f606082019050614e925f830187613c48565b614e9f6020830186613dce565b8181036040830152614eb28184866146e8565b905095945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f614ef1601c83614a30565b9150614efc82614ebd565b601c82019050919050565b5f614f1182614ee5565b9150614f1d8284614a8d565b60208201915081905092915050565b5f6040820190508181035f830152614f448186614608565b90508181036020830152614f598184866146e8565b9050949350505050565b5f60208284031215614f7857614f77613542565b5b5f614f8584828501614b08565b91505092915050565b5f614f98826143c6565b614fa281856134e5565b9350614fb28185602086016143e0565b80840191505092915050565b5f614fc98285614f8e565b9150614fd58284614a8d565b6020820191508190509392505050565b7f53657175656e6365207369676e65723a0a0000000000000000000000000000005f82015250565b5f615019601183614a30565b915061502482614fe5565b601182019050919050565b5f8160601b9050919050565b5f6150458261502f565b9050919050565b5f6150568261503b565b9050919050565b61506e61506982613569565b61504c565b82525050565b5f819050919050565b61508e615089826136fd565b615074565b82525050565b5f61509e8261500d565b91506150aa828561505d565b6014820191506150ba828461507d565b6020820191508190509392505050565b7f53657175656e6365206e657374656420636f6e6669673a0a00000000000000005f82015250565b5f6150fe601883614a30565b9150615109826150ca565b601882019050919050565b5f61511e826150f2565b915061512a8286614a8d565b60208201915061513a828561507d565b60208201915061514a828461507d565b602082019150819050949350505050565b7f53657175656e636520737461746963206469676573743a0a00000000000000005f82015250565b5f61518f601883614a30565b915061519a8261515b565b601882019050919050565b5f6151af82615183565b91506151bb8284614a8d565b60208201915081905092915050565b7f53657175656e636520616e792061646472657373207375626469676573743a0a5f82015250565b5f6151fe602083614a30565b9150615209826151ca565b602082019050919050565b5f61521e826151f2565b915061522a8284614a8d565b60208201915081905092915050565b7f53657175656e63652073617069656e7420636f6e6669673a0a000000000000005f82015250565b5f61526d601983614a30565b915061527882615239565b601982019050919050565b5f61528d82615261565b9150615299828661505d565b6014820191506152a9828561507d565b6020820191506152b98284614a8d565b602082019150819050949350505050565b5f610100820190506152de5f83018b613c48565b6152eb602083018a613dce565b6152f86040830189613f86565b6153056060830188613c48565b6153126080830187613f86565b61531f60a0830186613fd5565b61532c60c0830185613fd5565b61533960e0830184613f86565b999850505050505050505056fea264697066735822122019b5533fc4cbee24a73438e1a10df64732fe25b8872932ba010c1d5c7babb5eb64736f6c634300081c0033603e600e3d39601e805130553df33d3d34601c57363d3d373d363d30545af43d82803e903d91601c57fd5bf3", + "deployedBytecode": "0x60806040526004361061012d575f3560e01c80636ea44577116100aa578063aaf10f421161006e578063aaf10f42146104b5578063ad55366b146104df578063b93ea7ad14610520578063bc197c811461053c578063f23a6e6114610578578063f727ef1c146105b457610134565b80636ea44577146103ce5780638943ec02146103ea5780638c3f55631461041257806392dcb3fc1461044e5780639f69ef541461048b57610134565b80631f6a1eb9116100f15780631f6a1eb91461031a578063257671f51461033657806329561426146103605780632dd31000146103885780634fcf3eca146103b257610134565b8063025b22bc1461020e57806313792a4a1461022a578063150b7a02146102665780631626ba7e146102a25780631a9b2337146102de57610134565b3661013457005b60045f3690501061020c575f6101555f369061015091906135ab565b6105dc565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461020a575f5f8273ffffffffffffffffffffffffffffffffffffffff165f366040516101b3929190613645565b5f60405180830381855af49150503d805f81146101eb576040519150601f19603f3d011682016040523d82523d5f602084013e6101f0565b606091505b50915091508161020257805160208201fd5b805160208201f35b505b005b610228600480360381019061022391906136c8565b610631565b005b348015610235575f5ffd5b50610250600480360381019061024b9190613cf3565b6106ad565b60405161025d9190613d7b565b60405180910390f35b348015610271575f5ffd5b5061028c60048036038101906102879190613d94565b61085c565b6040516102999190613e27565b60405180910390f35b3480156102ad575f5ffd5b506102c860048036038101906102c39190613e40565b610870565b6040516102d59190613e27565b60405180910390f35b3480156102e9575f5ffd5b5061030460048036038101906102ff9190613ec7565b6108b2565b6040516103119190613f01565b60405180910390f35b610334600480360381019061032f9190613f1a565b6108c3565b005b348015610341575f5ffd5b5061034a610952565b6040516103579190613d7b565b60405180910390f35b34801561036b575f5ffd5b5061038660048036038101906103819190613f98565b610976565b005b348015610393575f5ffd5b5061039c6109f2565b6040516103a99190613f01565b60405180910390f35b6103cc60048036038101906103c79190613ec7565b610a16565b005b6103e860048036038101906103e39190613fc3565b610b0b565b005b3480156103f5575f5ffd5b50610410600480360381019061040b919061400e565b610baa565b005b34801561041d575f5ffd5b506104386004803603810190610433919061407f565b610bb0565b60405161044591906140b9565b60405180910390f35b348015610459575f5ffd5b50610474600480360381019061046f9190613f98565b610be8565b6040516104829291906140d2565b60405180910390f35b348015610496575f5ffd5b5061049f610bfc565b6040516104ac9190613f01565b60405180910390f35b3480156104c0575f5ffd5b506104c9610c20565b6040516104d69190613f01565b60405180910390f35b3480156104ea575f5ffd5b5061050560048036038101906105009190613cf3565b610c2e565b60405161051796959493929190614108565b60405180910390f35b61053a60048036038101906105359190614167565b610c6c565b005b348015610547575f5ffd5b50610562600480360381019061055d91906141fa565b610d62565b60405161056f9190613e27565b60405180910390f35b348015610583575f5ffd5b5061059e600480360381019061059991906142d1565b610d79565b6040516105ab9190613e27565b60405180910390f35b3480156105bf575f5ffd5b506105da60048036038101906105d591906143a8565b610d8e565b005b5f6106287fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916610e57565b5f1c9050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a157336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016106989190613f01565b60405180910390fd5b6106aa81610e8f565b50565b5f5f6001856101000151516106c29190614425565b67ffffffffffffffff8111156106db576106da613707565b5b6040519080825280602002602001820160405280156107095781602001602082028036833780820191505090505b5090505f5f90505b8561010001515181101561079957856101000151818151811061073757610736614458565b5b602002602001015182828151811061075257610751614458565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508080600101915050610711565b50338186610100015151815181106107b4576107b3614458565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561010001819052505f610804868686610ed2565b5090508061084d578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161084493929190614838565b60405180910390fd5b60015f1b925050509392505050565b5f63150b7a0260e01b905095945050505050565b5f5f61087b856110c2565b90505f610889828686610ed2565b5090508061089e575f60e01b925050506108ab565b6320c13b0b60e01b925050505b9392505050565b5f6108bc826105dc565b9050919050565b5f5a90505f6108d286866110eb565b90506108e68160600151826080015161158d565b5f5f6108f3838787610ed2565b915091508161093d578286866040517fa2b6d61b00000000000000000000000000000000000000000000000000000000815260040161093493929190614838565b60405180910390fd5b610948848285611631565b5050505050505050565b7f3d775581bb67d50f55369a85e3b4f558c1ee99b96fe0799dbfbdd62ec77d625f81565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109e657336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016109dd9190613f01565b60405180910390fd5b6109ef81611961565b50565b7f000000000000000000000000bd0f8abd58b4449b39c57ac9d5c67433239ac44781565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a8657336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610a7d9190613f01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610aa6826105dc565b73ffffffffffffffffffffffffffffffffffffffff1603610afe57806040517f1c3812cc000000000000000000000000000000000000000000000000000000008152600401610af59190613e27565b60405180910390fd5b610b08815f611a2b565b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b7b57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610b729190613f01565b60405180910390fd5b5f5a90505f610b8a84846110eb565b90505f610b9682611acc565b9050610ba3838284611631565b5050505050565b50505050565b5f610bdf7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b610e57565b5f1c9050919050565b5f5f610bf383611b1c565b91509150915091565b7f000000000000000000000000a29874c88b8fd557e42219b04b0cec693e1712f581565b5f610c29611b6d565b905090565b5f5f5f5f5f5f610c418989895f5f611b75565b809550819650829750839950849a505050505050610c5e83611eb2565b935093975093979195509350565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cdc57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610cd39190613f01565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610cfc836105dc565b73ffffffffffffffffffffffffffffffffffffffff1614610d5457816040517f5b4d6d6a000000000000000000000000000000000000000000000000000000008152600401610d4b9190613e27565b60405180910390fd5b610d5e8282611a2b565b5050565b5f63bc197c8160e01b905098975050505050505050565b5f63f23a6e6160e01b90509695505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dfe57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610df59190613f01565b60405180910390fd5b610e178383836bffffffffffffffffffffffff16611ec3565b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1838383604051610e4a9392919061487e565b60405180910390a1505050565b5f5f8383604051602001610e6c9291906148b3565b604051602081830303815290604052805190602001209050805491505092915050565b610e9881611f21565b7f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0381604051610ec79190613f01565b60405180910390a150565b5f5f5f84845f818110610ee857610ee7614458565b5b9050013560f81c60f81b9050608060f81b608060f81b82167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160361104157610f3086611acc565b91505f5f610f3d84611b1c565b91509150428111610f875783816040517ff95b6ab7000000000000000000000000000000000000000000000000000000008152600401610f7e9291906148da565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fef57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611035578333836040517f8945c31300000000000000000000000000000000000000000000000000000000815260040161102c93929190614901565b60405180910390fd5b600194505050506110ba565b5f5f5f6110518989895f5f611b75565b905080985081945082955083965050505050828210156110aa5782826040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004016110a1929190614936565b60405180910390fd5b6110b381611eb2565b9550505050505b935093915050565b6110ca6134b6565b6003815f019060ff16908160ff1681525050818160e0018181525050919050565b6110f36134b6565b5f815f019060ff16908160ff16815250505f5f6111108585611f27565b915060ff169150600180831603611130575f83606001818152505061116c565b611145818686611f3d9290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f8111156111a95761119b82828888611f6e9190939291909392919063ffffffff16565b856080018194508281525050505b5f6010808516036111bd5760019050611215565b6020808516036111f0576111dc838888611f9b9290919263ffffffff16565b8161ffff1691508094508192505050611214565b611205838888611fba9290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561122f5761122e613707565b5b60405190808252806020026020018201604052801561126857816020015b611255613501565b81526020019060019003908161124d5790505b5085604001819052505f5f90505b81811015611582575f611294858a8a611fba9290919263ffffffff16565b8096508192505050600180821660ff16036113035730876040015183815181106112c1576112c0614458565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061136f565b611318858a8a611fd59290919263ffffffff16565b8860400151848151811061132f5761132e614458565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff16036113bd57611391858a8a6120069290919263ffffffff16565b886040015184815181106113a8576113a7614458565b5b60200260200101516020018197508281525050505b600480821660ff1603611485575f6113e0868b8b61201c9290919263ffffffff16565b8162ffffff16915080975081925050508989879083896114009190614425565b9261140d93929190614965565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508860400151848151811061146657611465614458565b5b60200260200101516040018190525080866114819190614425565b9550505b600880821660ff16036114d3576114a7858a8a6120069290919263ffffffff16565b886040015184815181106114be576114bd614458565b5b60200260200101516060018197508281525050505b601080821660ff1614876040015183815181106114f3576114f2614458565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061152957611528614458565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff168760400151838151811061156457611563614458565b5b602002602001015160c0018181525050508080600101915050611276565b505050505092915050565b5f61159783610bb0565b90508181146115e1578282826040517f9b6514f40000000000000000000000000000000000000000000000000000000081526004016115d89392919061499f565b60405180910390fd5b5f6001830190506115f2848261203c565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f8818482604051611623929190614936565b60405180910390a150505050565b5f5f90505f82604001515190505f5f90505b81811015611959575f8460400151828151811061166357611662614458565b5b602002602001015190508060a00151801561167c575083155b156116c0577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b86836040516116b29291906148da565b60405180910390a15061194c565b5f93505f816060015190505f81141580156116da5750805a105b156117205785835a6040517f21395274000000000000000000000000000000000000000000000000000000008152600401611717939291906149d4565b60405180910390fd5b5f8260800151156117d5576117ce835f01515f841461173f5783611741565b5a5b634c4e814c60e01b8b8d898b8e606001518b6040015160405160240161176c96959493929190614a48565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612071565b90506117fd565b6117fa835f015184602001515f85146117ee57846117f0565b5a5b8660400151612086565b90505b8061190f575f60ff168360c001510361185e57600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d888561183f61209d565b60405161184e93929190614aae565b60405180910390a150505061194c565b600160ff168360c00151036118b557868461187761209d565b6040517f7f6b0bb10000000000000000000000000000000000000000000000000000000081526004016118ac93929190614aea565b60405180910390fd5b600260ff168360c001510361190e577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b88856118ef61209d565b6040516118fe93929190614aae565b60405180910390a1505050611959565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a88856040516119409291906148da565b60405180910390a15050505b8080600101915050611643565b505050505050565b5f5f1b810361199c576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119c87fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b826120bb565b7f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa816040516119f79190613d7b565b60405180910390a1611a287f000000000000000000000000a29874c88b8fd557e42219b04b0cec693e1712f5610e8f565b50565b611a8f7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff165f1b6120c2565b7f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed18282604051611ac0929190614b2d565b60405180910390a15050565b5f5f611adc8360200151306120f7565b90505f611ae88461219b565b90508181604051602001611afd929190614bc8565b6040516020818303038152906040528051906020012092505050919050565b5f5f5f611b4b7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b85610e57565b5f1c9050606081901c816bffffffffffffffffffffffff169250925050915091565b5f3054905090565b5f5f5f5f5f5f5f611b868b8b611f27565b915060ff169150611b95613552565b6040808416148015611bd257505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611d0e57611bec828d8d611fd59290919263ffffffff16565b809350819a50505089611d0d575f611c0f838e8e61201c9290919263ffffffff16565b8162ffffff16915080945081925050505f8d8d85908487611c309190614425565b92611c3d93929190614965565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090508a73ffffffffffffffffffffffffffffffffffffffff1663ccce3bc830836040518363ffffffff1660e01b8152600401611cbc929190614bfe565b6040805180830381865afa158015611cd6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cfa9190614ca1565b92508184611d089190614425565b935050505b5b600180841603611d4757611d358d8a838f8f87908092611d3093929190614965565b6123cf565b97509750975097509750505050611ea5565b6002808416148d60200190151590811515815250505f6002601c8516901c9050611d8383828f8f611f6e9190939291909392919063ffffffff16565b8094508197505050505f6001600560208616901c611da19190614425565b9050611dbf83828f8f611f6e9190939291909392919063ffffffff16565b809450819a50505050611dd18d611acc565b9350611def8d858e8e86908092611dea93929190614965565b612631565b8097508198505050611e0386895f1b6131a5565b9550611e1186865f1b6131a5565b9550611e35868a73ffffffffffffffffffffffffffffffffffffffff165f1b6131a5565b95505f5f1b815f015114158015611e4f575085815f015114155b8015611e5f575080602001518511155b15611ea157806040517fccbb534f000000000000000000000000000000000000000000000000000000008152600401611e989190614cf9565b60405180910390fd5b5050505b9550955095509550959050565b5f611ebc826131b9565b9050919050565b611f1c7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b846bffffffffffffffffffffffff841660608673ffffffffffffffffffffffffffffffffffffffff16901b175f1b6120c2565b505050565b80305550565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b61206d7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b835f1b6120c2565b5050565b5f5f5f8351602085018787f490509392505050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b8082555050565b5f83836040516020016120d69291906148b3565b60405160208183030381529060405280519060200120905081815550505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856121665746612168565b5f5b8560405160200161217d959493929190614d12565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016121b39190614def565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff160361224b575f6121e9846040015161325c565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a281856060015186608001518560405160200161222c959493929190614e05565b60405160208183030381529060405280519060200120925050506123ca565b600160ff16835f015160ff16036122ba577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a00151805190602001208260405160200161229c93929190614e56565b604051602081830303815290604052805190602001209150506123ca565b600260ff16835f015160ff1603612322577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c001518260405160200161230493929190614e56565b604051602081830303815290604052805190602001209150506123ca565b600360ff16835f015160ff160361238a577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e001518260405160200161236c93929190614e56565b604051602081830303815290604052805190602001209150506123ca565b825f01516040517f048183200000000000000000000000000000000000000000000000000000000081526004016123c19190614e9a565b60405180910390fd5b919050565b5f5f5f5f5f6123dc6134b6565b6002815f019060ff16908160ff16815250505f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b898990508210156125c6575f5f612436848d8d61201c9290919263ffffffff16565b8162ffffff169150809550819250505083816124529190614425565b9150505f8b8b90508214612466575f612468565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036124c8576124af8f8d8d879086926124a793929190614965565b600185611b75565b809a50819b50829c50839d50849e5050505050506124f8565b6124e6858d8d879086926124de93929190614965565b600185611b75565b50809a50819b50829c50839d50505050505b89891015612553578b8b8590849261251293929190614965565b8b8b6040517fb006aba000000000000000000000000000000000000000000000000000000000815260040161254a9493929190614eb3565b60405180910390fd5b819350878d5f01510361256c575f5f1b8d5f0181815250505b8287106125b25786836040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004016125a9929190614936565b60405180910390fd5b878560c00181815250508692505050612414565b5f5f1b8b5f0151141580156125df57508a602001518511155b15612621578a6040517fccbb534f0000000000000000000000000000000000000000000000000000000081526004016126189190614cf9565b60405180910390fd5b5050509550955095509550959050565b5f5f5f5b8484905081101561319b575f612656828787611fba9290919263ffffffff16565b8160ff16915080935081925050505f600460f08316901c90505f81036127ae575f600f831690505f8160ff16036126a55761269c848989611fba9290919263ffffffff16565b80955081925050505b5f5f6126bc868b8b6132d69290919263ffffffff16565b80975081935050506126d9868b8b6132d69290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f8388866040515f815260200160405260405161273f9493929190614ef1565b6020604051602081039080840390855afa15801561275f573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612781828960ff166132ec565b90505f5f1b8c03612792578061279d565b61279c8c826131a5565b5b9b5050505050505050505050612635565b60018103612839575f600f831690505f8160ff16036127e5576127dc848989611fba9290919263ffffffff16565b80955081925050505b5f6127fb858a8a611fd59290919263ffffffff16565b80965081925050505f612811828460ff166132ec565b90505f5f1b8703612822578061282d565b61282c87826131a5565b5b96505050505050612635565b60028103612a38575f6003831690505f8160ff160361287057612867848989611fba9290919263ffffffff16565b80955081925050505b5f612886858a8a611fd59290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f6128bc87838d8d611f6e9190939291909392919063ffffffff16565b80985081925050505f81880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261292093929190614965565b6040518463ffffffff1660e01b815260040161293e93929190614f34565b602060405180830381865afa158015612959573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061297d9190614f78565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146129f4578c848d8d8b9085926129b593929190614965565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016129eb9493929190614fa3565b60405180910390fd5b8097508460ff168a0199505f612a0d858760ff166132ec565b90505f5f1b8a03612a1e5780612a29565b612a288a826131a5565b5b99505050505050505050612635565b60038103612a82575f612a568489896132d69290919263ffffffff16565b80955081925050505f5f1b8503612a6d5780612a78565b612a7785826131a5565b5b9450505050612635565b60048103612b01575f600f831660ff1690505f612ab185838b8b611f6e9190939291909392919063ffffffff16565b80965081925050505f81860190505f5f612add8e8e8e8e8c908892612ad893929190614965565b612631565b91509150829750818a019950612af389826131a5565b985050505050505050612635565b60068103612c11575f6002600c841660ff16901c60ff1690505f8103612b4557612b36848989611fba9290919263ffffffff16565b8160ff16915080955081925050505b5f6003841660ff1690505f8103612b7b57612b6b858a8a611f9b9290919263ffffffff16565b8161ffff16915080965081925050505b5f612b91868b8b61201c9290919263ffffffff16565b8162ffffff16915080975081925050505f81870190505f5f612bc58f8f8f8f8d908892612bc093929190614965565b612631565b91509150829850848210612bd957858b019a505b5f612be582878961331e565b90505f5f1b8b03612bf65780612c01565b612c008b826131a5565b5b9a50505050505050505050612635565b60058103612c93575f612c2f8489896132d69290919263ffffffff16565b8095508192505050888103612c62577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b5f612c6c82613353565b90505f5f1b8603612c7d5780612c88565b612c8786826131a5565b5b955050505050612635565b60078103612df9575f600f831690505f8160ff1603612cca57612cc1848989611fba9290919263ffffffff16565b80955081925050505b5f5f612ce1868b8b6132d69290919263ffffffff16565b8097508193505050612cfe868b8b6132d69290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f604051602001612d55919061502b565b604051602081830303815290604052805190602001208388866040515f8152602001604052604051612d8a9493929190614ef1565b6020604051602081039080840390855afa158015612daa573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612dcc828960ff166132ec565b90505f5f1b8c03612ddd5780612de8565b612de78c826131a5565b5b9b5050505050505050505050612635565b60088103612e92575f612e178489896132d69290919263ffffffff16565b80955081925050505f612e335f8c61338290919063ffffffff16565b9050808203612e60577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b5f612e6a836133d3565b90505f5f1b8703612e7b5780612e86565b612e8587826131a5565b5b96505050505050612635565b60098103612ff8575f6003831690505f8160ff1603612ec957612ec0848989611fba9290919263ffffffff16565b80955081925050505b5f612edf858a8a611fd59290919263ffffffff16565b80965081925050505f5f6002600c871660ff16901c60ff169050612f1587828d8d611f6e9190939291909392919063ffffffff16565b8098508193505050505f81870190505f8373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612f5493929190614965565b6040518463ffffffff1660e01b8152600401612f7293929190615050565b602060405180830381865afa158015612f8d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fb19190615087565b90508197508460ff168a0199505f612fcd858760ff1684613402565b90505f5f1b8a03612fde5780612fe9565b612fe88a826131a5565b5b99505050505050505050612635565b600a810361315e575f6003831690505f8160ff160361302f57613026848989611fba9290919263ffffffff16565b80955081925050505b5f613045858a8a611fd59290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f61307b87838d8d611f6e9190939291909392919063ffffffff16565b80985081925050505f81880190505f8473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d9087926130b993929190614965565b6040518463ffffffff1660e01b81526004016130d793929190614f34565b602060405180830381865afa1580156130f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131169190615087565b90508198508560ff168b019a505f613132868860ff1684613402565b90505f5f1b8b03613143578061314e565b61314d8b826131a5565b5b9a50505050505050505050612635565b806040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260040161319291906140b9565b60405180910390fd5b5094509492505050565b5f825f528160205260405f20905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000bd0f8abd58b4449b39c57ac9d5c67433239ac447837f3d775581bb67d50f55369a85e3b4f558c1ee99b96fe0799dbfbdd62ec77d625f60405160200161322693929190615141565b604051602081830303815290604052805190602001205f1c73ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60605f5f90505b83518110156132c5575f61329185838151811061328457613283614458565b5b6020026020010151613437565b905082816040516020016132a69291906151b8565b6040516020818303038152906040529250508080600101915050613264565b508080519060200120915050919050565b5f5f848301359150602083019050935093915050565b5f8282604051602001613300929190615249565b60405160208183030381529060405280519060200120905092915050565b5f838383604051602001613334939291906152c9565b6040516020818303038152906040528051906020012090509392505050565b5f81604051602001613365919061535a565b604051602081830303815290604052805190602001209050919050565b5f5f6133928460200151846120f7565b90505f61339e8561219b565b905081816040516020016133b3929190614bc8565b604051602081830303815290604052805190602001209250505092915050565b5f816040516020016133e591906153c9565b604051602081830303815290604052805190602001209050919050565b5f83838360405160200161341893929190615438565b6040516020818303038152906040528051906020012090509392505050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161349998979695949392919061547f565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b60405180604001604052805f81526020015f81525090565b5f82905092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f82821b905092915050565b5f6135b6838361356a565b826135c18135613574565b92506004821015613601576135fc7fffffffff000000000000000000000000000000000000000000000000000000008360040360080261359f565b831692505b505092915050565b5f81905092915050565b828183375f83830152505050565b5f61362c8385613609565b9350613639838584613613565b82840190509392505050565b5f613651828486613621565b91508190509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136978261366e565b9050919050565b6136a78161368d565b81146136b1575f5ffd5b50565b5f813590506136c28161369e565b92915050565b5f602082840312156136dd576136dc613666565b5b5f6136ea848285016136b4565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61373d826136f7565b810181811067ffffffffffffffff8211171561375c5761375b613707565b5b80604052505050565b5f61376e61365d565b905061377a8282613734565b919050565b5f5ffd5b5f60ff82169050919050565b61379881613783565b81146137a2575f5ffd5b50565b5f813590506137b38161378f565b92915050565b5f8115159050919050565b6137cd816137b9565b81146137d7575f5ffd5b50565b5f813590506137e8816137c4565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561380c5761380b613707565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61383381613821565b811461383d575f5ffd5b50565b5f8135905061384e8161382a565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561387257613871613707565b5b61387b826136f7565b9050602081019050919050565b5f61389a61389584613858565b613765565b9050828152602081018484840111156138b6576138b5613854565b5b6138c1848285613613565b509392505050565b5f82601f8301126138dd576138dc6137ee565b5b81356138ed848260208601613888565b91505092915050565b5f60e0828403121561390b5761390a6136f3565b5b61391560e0613765565b90505f613924848285016136b4565b5f83015250602061393784828501613840565b602083015250604082013567ffffffffffffffff81111561395b5761395a61377f565b5b613967848285016138c9565b604083015250606061397b84828501613840565b606083015250608061398f848285016137da565b60808301525060a06139a3848285016137da565b60a08301525060c06139b784828501613840565b60c08301525092915050565b5f6139d56139d0846137f2565b613765565b905080838252602082019050602084028301858111156139f8576139f761381d565b5b835b81811015613a3f57803567ffffffffffffffff811115613a1d57613a1c6137ee565b5b808601613a2a89826138f6565b855260208501945050506020810190506139fa565b5050509392505050565b5f82601f830112613a5d57613a5c6137ee565b5b8135613a6d8482602086016139c3565b91505092915050565b5f819050919050565b613a8881613a76565b8114613a92575f5ffd5b50565b5f81359050613aa381613a7f565b92915050565b5f67ffffffffffffffff821115613ac357613ac2613707565b5b602082029050602081019050919050565b5f613ae6613ae184613aa9565b613765565b90508083825260208201905060208402830185811115613b0957613b0861381d565b5b835b81811015613b325780613b1e88826136b4565b845260208401935050602081019050613b0b565b5050509392505050565b5f82601f830112613b5057613b4f6137ee565b5b8135613b60848260208601613ad4565b91505092915050565b5f6101208284031215613b7f57613b7e6136f3565b5b613b8a610120613765565b90505f613b99848285016137a5565b5f830152506020613bac848285016137da565b602083015250604082013567ffffffffffffffff811115613bd057613bcf61377f565b5b613bdc84828501613a49565b6040830152506060613bf084828501613840565b6060830152506080613c0484828501613840565b60808301525060a082013567ffffffffffffffff811115613c2857613c2761377f565b5b613c34848285016138c9565b60a08301525060c0613c4884828501613a95565b60c08301525060e0613c5c84828501613a95565b60e08301525061010082013567ffffffffffffffff811115613c8157613c8061377f565b5b613c8d84828501613b3c565b6101008301525092915050565b5f5ffd5b5f5f83601f840112613cb357613cb26137ee565b5b8235905067ffffffffffffffff811115613cd057613ccf613c9a565b5b602083019150836001820283011115613cec57613ceb61381d565b5b9250929050565b5f5f5f60408486031215613d0a57613d09613666565b5b5f84013567ffffffffffffffff811115613d2757613d2661366a565b5b613d3386828701613b69565b935050602084013567ffffffffffffffff811115613d5457613d5361366a565b5b613d6086828701613c9e565b92509250509250925092565b613d7581613a76565b82525050565b5f602082019050613d8e5f830184613d6c565b92915050565b5f5f5f5f5f60808688031215613dad57613dac613666565b5b5f613dba888289016136b4565b9550506020613dcb888289016136b4565b9450506040613ddc88828901613840565b935050606086013567ffffffffffffffff811115613dfd57613dfc61366a565b5b613e0988828901613c9e565b92509250509295509295909350565b613e2181613574565b82525050565b5f602082019050613e3a5f830184613e18565b92915050565b5f5f5f60408486031215613e5757613e56613666565b5b5f613e6486828701613a95565b935050602084013567ffffffffffffffff811115613e8557613e8461366a565b5b613e9186828701613c9e565b92509250509250925092565b613ea681613574565b8114613eb0575f5ffd5b50565b5f81359050613ec181613e9d565b92915050565b5f60208284031215613edc57613edb613666565b5b5f613ee984828501613eb3565b91505092915050565b613efb8161368d565b82525050565b5f602082019050613f145f830184613ef2565b92915050565b5f5f5f5f60408587031215613f3257613f31613666565b5b5f85013567ffffffffffffffff811115613f4f57613f4e61366a565b5b613f5b87828801613c9e565b9450945050602085013567ffffffffffffffff811115613f7e57613f7d61366a565b5b613f8a87828801613c9e565b925092505092959194509250565b5f60208284031215613fad57613fac613666565b5b5f613fba84828501613a95565b91505092915050565b5f5f60208385031215613fd957613fd8613666565b5b5f83013567ffffffffffffffff811115613ff657613ff561366a565b5b61400285828601613c9e565b92509250509250929050565b5f5f5f5f6060858703121561402657614025613666565b5b5f614033878288016136b4565b945050602061404487828801613840565b935050604085013567ffffffffffffffff8111156140655761406461366a565b5b61407187828801613c9e565b925092505092959194509250565b5f6020828403121561409457614093613666565b5b5f6140a184828501613840565b91505092915050565b6140b381613821565b82525050565b5f6020820190506140cc5f8301846140aa565b92915050565b5f6040820190506140e55f830185613ef2565b6140f260208301846140aa565b9392505050565b614102816137b9565b82525050565b5f60c08201905061411b5f8301896140aa565b61412860208301886140aa565b61413560408301876140f9565b6141426060830186613d6c565b61414f60808301856140aa565b61415c60a0830184613d6c565b979650505050505050565b5f5f6040838503121561417d5761417c613666565b5b5f61418a85828601613eb3565b925050602061419b858286016136b4565b9150509250929050565b5f5f83601f8401126141ba576141b96137ee565b5b8235905067ffffffffffffffff8111156141d7576141d6613c9a565b5b6020830191508360208202830111156141f3576141f261381d565b5b9250929050565b5f5f5f5f5f5f5f5f60a0898b03121561421657614215613666565b5b5f6142238b828c016136b4565b98505060206142348b828c016136b4565b975050604089013567ffffffffffffffff8111156142555761425461366a565b5b6142618b828c016141a5565b9650965050606089013567ffffffffffffffff8111156142845761428361366a565b5b6142908b828c016141a5565b9450945050608089013567ffffffffffffffff8111156142b3576142b261366a565b5b6142bf8b828c01613c9e565b92509250509295985092959890939650565b5f5f5f5f5f5f60a087890312156142eb576142ea613666565b5b5f6142f889828a016136b4565b965050602061430989828a016136b4565b955050604061431a89828a01613840565b945050606061432b89828a01613840565b935050608087013567ffffffffffffffff81111561434c5761434b61366a565b5b61435889828a01613c9e565b92509250509295509295509295565b5f6bffffffffffffffffffffffff82169050919050565b61438781614367565b8114614391575f5ffd5b50565b5f813590506143a28161437e565b92915050565b5f5f5f606084860312156143bf576143be613666565b5b5f6143cc86828701613a95565b93505060206143dd868287016136b4565b92505060406143ee86828701614394565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61442f82613821565b915061443a83613821565b9250828201905080821115614452576144516143f8565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61448e81613783565b82525050565b61449d816137b9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6144d58161368d565b82525050565b6144e481613821565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f61451c826144ea565b61452681856144f4565b9350614536818560208601614504565b61453f816136f7565b840191505092915050565b5f60e083015f83015161455f5f8601826144cc565b50602083015161457260208601826144db565b506040830151848203604086015261458a8282614512565b915050606083015161459f60608601826144db565b5060808301516145b26080860182614494565b5060a08301516145c560a0860182614494565b5060c08301516145d860c08601826144db565b508091505092915050565b5f6145ee838361454a565b905092915050565b5f602082019050919050565b5f61460c826144a3565b61461681856144ad565b935083602082028501614628856144bd565b805f5b85811015614663578484038952815161464485826145e3565b945061464f836145f6565b925060208a0199505060018101905061462b565b50829750879550505050505092915050565b61467e81613a76565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6146b883836144cc565b60208301905092915050565b5f602082019050919050565b5f6146da82614684565b6146e4818561468e565b93506146ef8361469e565b805f5b8381101561471f57815161470688826146ad565b9750614711836146c4565b9250506001810190506146f2565b5085935050505092915050565b5f61012083015f8301516147425f860182614485565b5060208301516147556020860182614494565b506040830151848203604086015261476d8282614602565b915050606083015161478260608601826144db565b50608083015161479560808601826144db565b5060a083015184820360a08601526147ad8282614512565b91505060c08301516147c260c0860182614675565b5060e08301516147d560e0860182614675565b506101008301518482036101008601526147ef82826146d0565b9150508091505092915050565b5f82825260208201905092915050565b5f61481783856147fc565b9350614824838584613613565b61482d836136f7565b840190509392505050565b5f6040820190508181035f830152614850818661472c565b9050818103602083015261486581848661480c565b9050949350505050565b61487881614367565b82525050565b5f6060820190506148915f830186613d6c565b61489e6020830185613ef2565b6148ab604083018461486f565b949350505050565b5f6040820190506148c65f830185613d6c565b6148d36020830184613d6c565b9392505050565b5f6040820190506148ed5f830185613d6c565b6148fa60208301846140aa565b9392505050565b5f6060820190506149145f830186613d6c565b6149216020830185613ef2565b61492e6040830184613ef2565b949350505050565b5f6040820190506149495f8301856140aa565b61495660208301846140aa565b9392505050565b5f5ffd5b5f5ffd5b5f5f858511156149785761497761495d565b5b8386111561498957614988614961565b5b6001850283019150848603905094509492505050565b5f6060820190506149b25f8301866140aa565b6149bf60208301856140aa565b6149cc60408301846140aa565b949350505050565b5f6060820190508181035f8301526149ec818661472c565b90506149fb60208301856140aa565b614a0860408301846140aa565b949350505050565b5f614a1a826144ea565b614a2481856147fc565b9350614a34818560208601614504565b614a3d816136f7565b840191505092915050565b5f60c082019050614a5b5f830189613d6c565b614a6860208301886140aa565b614a7560408301876140aa565b614a8260608301866140aa565b614a8f60808301856140aa565b81810360a0830152614aa18184614a10565b9050979650505050505050565b5f606082019050614ac15f830186613d6c565b614ace60208301856140aa565b8181036040830152614ae08184614a10565b9050949350505050565b5f6060820190508181035f830152614b02818661472c565b9050614b1160208301856140aa565b8181036040830152614b238184614a10565b9050949350505050565b5f604082019050614b405f830185613e18565b614b4d6020830184613ef2565b9392505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614b92600283614b54565b9150614b9d82614b5e565b600282019050919050565b5f819050919050565b614bc2614bbd82613a76565b614ba8565b82525050565b5f614bd282614b86565b9150614bde8285614bb1565b602082019150614bee8284614bb1565b6020820191508190509392505050565b5f604082019050614c115f830185613ef2565b8181036020830152614c238184614a10565b90509392505050565b5f81519050614c3a81613a7f565b92915050565b5f81519050614c4e8161382a565b92915050565b5f60408284031215614c6957614c686136f3565b5b614c736040613765565b90505f614c8284828501614c2c565b5f830152506020614c9584828501614c40565b60208301525092915050565b5f60408284031215614cb657614cb5613666565b5b5f614cc384828501614c54565b91505092915050565b604082015f820151614ce05f850182614675565b506020820151614cf360208501826144db565b50505050565b5f604082019050614d0c5f830184614ccc565b92915050565b5f60a082019050614d255f830188613d6c565b614d326020830187613d6c565b614d3f6040830186613d6c565b614d4c60608301856140aa565b614d596080830184613ef2565b9695505050505050565b5f81905092915050565b614d768161368d565b82525050565b5f614d878383614d6d565b60208301905092915050565b5f614d9d82614684565b614da78185614d63565b9350614db28361469e565b805f5b83811015614de2578151614dc98882614d7c565b9750614dd4836146c4565b925050600181019050614db5565b5085935050505092915050565b5f614dfa8284614d93565b915081905092915050565b5f60a082019050614e185f830188613d6c565b614e256020830187613d6c565b614e3260408301866140aa565b614e3f60608301856140aa565b614e4c6080830184613d6c565b9695505050505050565b5f606082019050614e695f830186613d6c565b614e766020830185613d6c565b614e836040830184613d6c565b949350505050565b614e9481613783565b82525050565b5f602082019050614ead5f830184614e8b565b92915050565b5f6060820190508181035f830152614ecc81868861480c565b9050614edb60208301856140aa565b614ee860408301846140aa565b95945050505050565b5f608082019050614f045f830187613d6c565b614f116020830186614e8b565b614f1e6040830185613d6c565b614f2b6060830184613d6c565b95945050505050565b5f604082019050614f475f830186613d6c565b8181036020830152614f5a81848661480c565b9050949350505050565b5f81519050614f7281613e9d565b92915050565b5f60208284031215614f8d57614f8c613666565b5b5f614f9a84828501614f64565b91505092915050565b5f606082019050614fb65f830187613d6c565b614fc36020830186613ef2565b8181036040830152614fd681848661480c565b905095945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f615015601c83614b54565b915061502082614fe1565b601c82019050919050565b5f61503582615009565b91506150418284614bb1565b60208201915081905092915050565b5f6040820190508181035f830152615068818661472c565b9050818103602083015261507d81848661480c565b9050949350505050565b5f6020828403121561509c5761509b613666565b5b5f6150a984828501614c2c565b91505092915050565b7fff000000000000000000000000000000000000000000000000000000000000005f82015250565b5f6150e6600183614b54565b91506150f1826150b2565b600182019050919050565b5f8160601b9050919050565b5f615112826150fc565b9050919050565b5f61512382615108565b9050919050565b61513b6151368261368d565b615119565b82525050565b5f61514b826150da565b9150615157828661512a565b6014820191506151678285614bb1565b6020820191506151778284614bb1565b602082019150819050949350505050565b5f615192826144ea565b61519c8185613609565b93506151ac818560208601614504565b80840191505092915050565b5f6151c38285615188565b91506151cf8284614bb1565b6020820191508190509392505050565b7f53657175656e6365207369676e65723a0a0000000000000000000000000000005f82015250565b5f615213601183614b54565b915061521e826151df565b601182019050919050565b5f819050919050565b61524361523e82613821565b615229565b82525050565b5f61525382615207565b915061525f828561512a565b60148201915061526f8284615232565b6020820191508190509392505050565b7f53657175656e6365206e657374656420636f6e6669673a0a00000000000000005f82015250565b5f6152b3601883614b54565b91506152be8261527f565b601882019050919050565b5f6152d3826152a7565b91506152df8286614bb1565b6020820191506152ef8285615232565b6020820191506152ff8284615232565b602082019150819050949350505050565b7f53657175656e636520737461746963206469676573743a0a00000000000000005f82015250565b5f615344601883614b54565b915061534f82615310565b601882019050919050565b5f61536482615338565b91506153708284614bb1565b60208201915081905092915050565b7f53657175656e636520616e792061646472657373207375626469676573743a0a5f82015250565b5f6153b3602083614b54565b91506153be8261537f565b602082019050919050565b5f6153d3826153a7565b91506153df8284614bb1565b60208201915081905092915050565b7f53657175656e63652073617069656e7420636f6e6669673a0a000000000000005f82015250565b5f615422601983614b54565b915061542d826153ee565b601982019050919050565b5f61544282615416565b915061544e828661512a565b60148201915061545e8285615232565b60208201915061546e8284614bb1565b602082019150819050949350505050565b5f610100820190506154935f83018b613d6c565b6154a0602083018a613ef2565b6154ad60408301896140aa565b6154ba6060830188613d6c565b6154c760808301876140aa565b6154d460a08301866140f9565b6154e160c08301856140f9565b6154ee60e08301846140aa565b999850505050505050505056fea26469706673582212203719e46a9a86dab24a35db4a3d94c62713d15f05ffd1a322e60a2ef3b78ffbf964736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json b/testchain/artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json new file mode 100644 index 000000000..d474e2c69 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Stage2Module.sol/Stage2Module.json @@ -0,0 +1,1420 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Stage2Module", + "sourceName": "src/Stage2Module.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_current", + "type": "uint256" + } + ], + "name": "BadNonce", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "ImageHashIsZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLeft", + "type": "uint256" + } + ], + "name": "NotEnoughGas", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "Reverted", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallAborted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSucceeded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "DefinedHook", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "newImageHash", + "type": "bytes32" + } + ], + "name": "ImageHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_newNonce", + "type": "uint256" + } + ], + "name": "NonceChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "addHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "imageHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "readHook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + } + ], + "name": "readNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "removeHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + } + ], + "name": "selfExecute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "tokenReceived", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405260043610610117575f3560e01c80636ea445771161009f578063ad55366b11610063578063ad55366b14610475578063b93ea7ad146104b6578063bc197c81146104d2578063f23a6e611461050e578063f727ef1c1461054a5761011e565b80636ea445771461038e5780638943ec02146103aa5780638c3f5563146103d257806392dcb3fc1461040e578063aaf10f421461044b5761011e565b80631a9b2337116100e65780631a9b2337146102c85780631f6a1eb91461030457806329561426146103205780634fcf3eca1461034857806351605d80146103645761011e565b8063025b22bc146101f857806313792a4a14610214578063150b7a02146102505780631626ba7e1461028c5761011e565b3661011e57005b60045f369050106101f6575f61013f5f369061013a9190613487565b610572565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146101f4575f5f8273ffffffffffffffffffffffffffffffffffffffff165f3660405161019d929190613521565b5f60405180830381855af49150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101ec57805160208201fd5b805160208201f35b505b005b610212600480360381019061020d91906135a4565b6105c7565b005b34801561021f575f5ffd5b5061023a60048036038101906102359190613bcf565b610643565b6040516102479190613c57565b60405180910390f35b34801561025b575f5ffd5b5061027660048036038101906102719190613c70565b6107f2565b6040516102839190613d03565b60405180910390f35b348015610297575f5ffd5b506102b260048036038101906102ad9190613d1c565b610806565b6040516102bf9190613d03565b60405180910390f35b3480156102d3575f5ffd5b506102ee60048036038101906102e99190613da3565b610848565b6040516102fb9190613ddd565b60405180910390f35b61031e60048036038101906103199190613df6565b610859565b005b34801561032b575f5ffd5b5061034660048036038101906103419190613e74565b6108e8565b005b610362600480360381019061035d9190613da3565b610964565b005b34801561036f575f5ffd5b50610378610a59565b6040516103859190613c57565b60405180910390f35b6103a860048036038101906103a39190613e9f565b610a8a565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190613eea565b610b29565b005b3480156103dd575f5ffd5b506103f860048036038101906103f39190613f5b565b610b2f565b6040516104059190613f95565b60405180910390f35b348015610419575f5ffd5b50610434600480360381019061042f9190613e74565b610b67565b604051610442929190613fae565b60405180910390f35b348015610456575f5ffd5b5061045f610b7b565b60405161046c9190613ddd565b60405180910390f35b348015610480575f5ffd5b5061049b60048036038101906104969190613bcf565b610b89565b6040516104ad96959493929190613fe4565b60405180910390f35b6104d060048036038101906104cb9190614043565b610bc7565b005b3480156104dd575f5ffd5b506104f860048036038101906104f391906140d6565b610cbd565b6040516105059190613d03565b60405180910390f35b348015610519575f5ffd5b50610534600480360381019061052f91906141ad565b610cd4565b6040516105419190613d03565b60405180910390f35b348015610555575f5ffd5b50610570600480360381019061056b9190614284565b610ce9565b005b5f6105be7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916610db2565b5f1c9050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461063757336040517fa19dbf0000000000000000000000000000000000000000000000000000000000815260040161062e9190613ddd565b60405180910390fd5b61064081610dea565b50565b5f5f6001856101000151516106589190614301565b67ffffffffffffffff811115610671576106706135e3565b5b60405190808252806020026020018201604052801561069f5781602001602082028036833780820191505090505b5090505f5f90505b8561010001515181101561072f5785610100015181815181106106cd576106cc614334565b5b60200260200101518282815181106106e8576106e7614334565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506106a7565b503381866101000151518151811061074a57610749614334565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561010001819052505f61079a868686610e2d565b509050806107e3578585856040517ff58cc8b50000000000000000000000000000000000000000000000000000000081526004016107da93929190614714565b60405180910390fd5b60015f1b925050509392505050565b5f63150b7a0260e01b905095945050505050565b5f5f6108118561101d565b90505f61081f828686610e2d565b50905080610834575f60e01b92505050610841565b6320c13b0b60e01b925050505b9392505050565b5f61085282610572565b9050919050565b5f5a90505f6108688686611046565b905061087c816060015182608001516114e8565b5f5f610889838787610e2d565b91509150816108d3578286866040517fa2b6d61b0000000000000000000000000000000000000000000000000000000081526004016108ca93929190614714565b60405180910390fd5b6108de84828561158c565b5050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095857336040517fa19dbf0000000000000000000000000000000000000000000000000000000000815260040161094f9190613ddd565b60405180910390fd5b610961816118bc565b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d457336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016109cb9190613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166109f482610572565b73ffffffffffffffffffffffffffffffffffffffff1603610a4c57806040517f1c3812cc000000000000000000000000000000000000000000000000000000008152600401610a439190613d03565b60405180910390fd5b610a56815f61195d565b50565b5f610a857fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b6119fe565b905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610afa57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610af19190613ddd565b60405180910390fd5b5f5a90505f610b098484611046565b90505f610b1582611a08565b9050610b2283828461158c565b5050505050565b50505050565b5f610b5e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b610db2565b5f1c9050919050565b5f5f610b7283611a58565b91509150915091565b5f610b84611aa9565b905090565b5f5f5f5f5f5f610b9c8989895f5f611ab1565b809550819650829750839950849a505050505050610bb983611dee565b935093975093979195509350565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3757336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610c2e9190613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610c5783610572565b73ffffffffffffffffffffffffffffffffffffffff1614610caf57816040517f5b4d6d6a000000000000000000000000000000000000000000000000000000008152600401610ca69190613d03565b60405180910390fd5b610cb9828261195d565b5050565b5f63bc197c8160e01b905098975050505050505050565b5f63f23a6e6160e01b90509695505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5957336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610d509190613ddd565b60405180910390fd5b610d728383836bffffffffffffffffffffffff16611dff565b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1838383604051610da59392919061475a565b60405180910390a1505050565b5f5f8383604051602001610dc792919061478f565b604051602081830303815290604052805190602001209050805491505092915050565b610df381611e5d565b7f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0381604051610e229190613ddd565b60405180910390a150565b5f5f5f84845f818110610e4357610e42614334565b5b9050013560f81c60f81b9050608060f81b608060f81b82167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f9c57610e8b86611a08565b91505f5f610e9884611a58565b91509150428111610ee25783816040517ff95b6ab7000000000000000000000000000000000000000000000000000000008152600401610ed99291906147b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610f4a57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610f90578333836040517f8945c313000000000000000000000000000000000000000000000000000000008152600401610f87939291906147dd565b60405180910390fd5b60019450505050611015565b5f5f5f610fac8989895f5f611ab1565b905080985081945082955083965050505050828210156110055782826040517ffd41fcba000000000000000000000000000000000000000000000000000000008152600401610ffc929190614812565b60405180910390fd5b61100e81611dee565b9550505050505b935093915050565b611025613392565b6003815f019060ff16908160ff1681525050818160e0018181525050919050565b61104e613392565b5f815f019060ff16908160ff16815250505f5f61106b8585611e63565b915060ff16915060018083160361108b575f8360600181815250506110c7565b6110a0818686611e799290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f811115611104576110f682828888611eaa9190939291909392919063ffffffff16565b856080018194508281525050505b5f6010808516036111185760019050611170565b60208085160361114b57611137838888611ed79290919263ffffffff16565b8161ffff169150809450819250505061116f565b611160838888611ef69290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561118a576111896135e3565b5b6040519080825280602002602001820160405280156111c357816020015b6111b06133dd565b8152602001906001900390816111a85790505b5085604001819052505f5f90505b818110156114dd575f6111ef858a8a611ef69290919263ffffffff16565b8096508192505050600180821660ff160361125e57308760400151838151811061121c5761121b614334565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506112ca565b611273858a8a611f119290919263ffffffff16565b8860400151848151811061128a57611289614334565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff1603611318576112ec858a8a611f429290919263ffffffff16565b8860400151848151811061130357611302614334565b5b60200260200101516020018197508281525050505b600480821660ff16036113e0575f61133b868b8b611f589290919263ffffffff16565b8162ffffff169150809750819250505089898790838961135b9190614301565b9261136893929190614841565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050886040015184815181106113c1576113c0614334565b5b60200260200101516040018190525080866113dc9190614301565b9550505b600880821660ff160361142e57611402858a8a611f429290919263ffffffff16565b8860400151848151811061141957611418614334565b5b60200260200101516060018197508281525050505b601080821660ff16148760400151838151811061144e5761144d614334565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061148457611483614334565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff16876040015183815181106114bf576114be614334565b5b602002602001015160c00181815250505080806001019150506111d1565b505050505092915050565b5f6114f283610b2f565b905081811461153c578282826040517f9b6514f40000000000000000000000000000000000000000000000000000000081526004016115339392919061487b565b60405180910390fd5b5f60018301905061154d8482611f78565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881848260405161157e929190614812565b60405180910390a150505050565b5f5f90505f82604001515190505f5f90505b818110156118b4575f846040015182815181106115be576115bd614334565b5b602002602001015190508060a0015180156115d7575083155b1561161b577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b868360405161160d9291906147b6565b60405180910390a1506118a7565b5f93505f816060015190505f81141580156116355750805a105b1561167b5785835a6040517f21395274000000000000000000000000000000000000000000000000000000008152600401611672939291906148b0565b60405180910390fd5b5f82608001511561173057611729835f01515f841461169a578361169c565b5a5b634c4e814c60e01b8b8d898b8e606001518b604001516040516024016116c796959493929190614924565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fad565b9050611758565b611755835f015184602001515f8514611749578461174b565b5a5b8660400151611fc2565b90505b8061186a575f60ff168360c00151036117b957600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d888561179a611fd9565b6040516117a99392919061498a565b60405180910390a15050506118a7565b600160ff168360c00151036118105786846117d2611fd9565b6040517f7f6b0bb1000000000000000000000000000000000000000000000000000000008152600401611807939291906149c6565b60405180910390fd5b600260ff168360c0015103611869577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b888561184a611fd9565b6040516118599392919061498a565b60405180910390a15050506118b4565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a888560405161189b9291906147b6565b60405180910390a15050505b808060010191505061159e565b505050505050565b5f5f1b81036118f7576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119237fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b82611ff7565b7f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa816040516119529190613c57565b60405180910390a150565b6119c17fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff165f1b611ffe565b7f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed182826040516119f2929190614a09565b60405180910390a15050565b5f81549050919050565b5f5f611a18836020015130612033565b90505f611a24846120d7565b90508181604051602001611a39929190614aa4565b6040516020818303038152906040528051906020012092505050919050565b5f5f5f611a877fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b85610db2565b5f1c9050606081901c816bffffffffffffffffffffffff169250925050915091565b5f3054905090565b5f5f5f5f5f5f5f611ac28b8b611e63565b915060ff169150611ad161342e565b6040808416148015611b0e57505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611c4a57611b28828d8d611f119290919263ffffffff16565b809350819a50505089611c49575f611b4b838e8e611f589290919263ffffffff16565b8162ffffff16915080945081925050505f8d8d85908487611b6c9190614301565b92611b7993929190614841565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090508a73ffffffffffffffffffffffffffffffffffffffff1663ccce3bc830836040518363ffffffff1660e01b8152600401611bf8929190614ada565b6040805180830381865afa158015611c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c369190614b7d565b92508184611c449190614301565b935050505b5b600180841603611c8357611c718d8a838f8f87908092611c6c93929190614841565b61230b565b97509750975097509750505050611de1565b6002808416148d60200190151590811515815250505f6002601c8516901c9050611cbf83828f8f611eaa9190939291909392919063ffffffff16565b8094508197505050505f6001600560208616901c611cdd9190614301565b9050611cfb83828f8f611eaa9190939291909392919063ffffffff16565b809450819a50505050611d0d8d611a08565b9350611d2b8d858e8e86908092611d2693929190614841565b61256d565b8097508198505050611d3f86895f1b6130e1565b9550611d4d86865f1b6130e1565b9550611d71868a73ffffffffffffffffffffffffffffffffffffffff165f1b6130e1565b95505f5f1b815f015114158015611d8b575085815f015114155b8015611d9b575080602001518511155b15611ddd57806040517fccbb534f000000000000000000000000000000000000000000000000000000008152600401611dd49190614bd5565b60405180910390fd5b5050505b9550955095509550959050565b5f611df8826130f5565b9050919050565b611e587fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b846bffffffffffffffffffffffff841660608673ffffffffffffffffffffffffffffffffffffffff16901b175f1b611ffe565b505050565b80305550565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b611fa97f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b835f1b611ffe565b5050565b5f5f5f8351602085018787f490509392505050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b8082555050565b5f838360405160200161201292919061478f565b60405160208183030381529060405280519060200120905081815550505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856120a257466120a4565b5f5b856040516020016120b9959493929190614bee565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016120ef9190614ccb565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff1603612187575f6121258460400151613138565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2818560600151866080015185604051602001612168959493929190614ce1565b6040516020818303038152906040528051906020012092505050612306565b600160ff16835f015160ff16036121f6577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a0015180519060200120826040516020016121d893929190614d32565b60405160208183030381529060405280519060200120915050612306565b600260ff16835f015160ff160361225e577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c001518260405160200161224093929190614d32565b60405160208183030381529060405280519060200120915050612306565b600360ff16835f015160ff16036122c6577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e00151826040516020016122a893929190614d32565b60405160208183030381529060405280519060200120915050612306565b825f01516040517f048183200000000000000000000000000000000000000000000000000000000081526004016122fd9190614d76565b60405180910390fd5b919050565b5f5f5f5f5f612318613392565b6002815f019060ff16908160ff16815250505f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b89899050821015612502575f5f612372848d8d611f589290919263ffffffff16565b8162ffffff1691508095508192505050838161238e9190614301565b9150505f8b8b905082146123a2575f6123a4565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303612404576123eb8f8d8d879086926123e393929190614841565b600185611ab1565b809a50819b50829c50839d50849e505050505050612434565b612422858d8d8790869261241a93929190614841565b600185611ab1565b50809a50819b50829c50839d50505050505b8989101561248f578b8b8590849261244e93929190614841565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016124869493929190614d8f565b60405180910390fd5b819350878d5f0151036124a8575f5f1b8d5f0181815250505b8287106124ee5786836040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004016124e5929190614812565b60405180910390fd5b878560c00181815250508692505050612350565b5f5f1b8b5f01511415801561251b57508a602001518511155b1561255d578a6040517fccbb534f0000000000000000000000000000000000000000000000000000000081526004016125549190614bd5565b60405180910390fd5b5050509550955095509550959050565b5f5f5f5b848490508110156130d7575f612592828787611ef69290919263ffffffff16565b8160ff16915080935081925050505f600460f08316901c90505f81036126ea575f600f831690505f8160ff16036125e1576125d8848989611ef69290919263ffffffff16565b80955081925050505b5f5f6125f8868b8b6131b29290919263ffffffff16565b8097508193505050612615868b8b6131b29290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f8388866040515f815260200160405260405161267b9493929190614dcd565b6020604051602081039080840390855afa15801561269b573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f6126bd828960ff166131c8565b90505f5f1b8c036126ce57806126d9565b6126d88c826130e1565b5b9b5050505050505050505050612571565b60018103612775575f600f831690505f8160ff160361272157612718848989611ef69290919263ffffffff16565b80955081925050505b5f612737858a8a611f119290919263ffffffff16565b80965081925050505f61274d828460ff166131c8565b90505f5f1b870361275e5780612769565b61276887826130e1565b5b96505050505050612571565b60028103612974575f6003831690505f8160ff16036127ac576127a3848989611ef69290919263ffffffff16565b80955081925050505b5f6127c2858a8a611f119290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f6127f887838d8d611eaa9190939291909392919063ffffffff16565b80985081925050505f81880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261285c93929190614841565b6040518463ffffffff1660e01b815260040161287a93929190614e10565b602060405180830381865afa158015612895573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b99190614e54565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612930578c848d8d8b9085926128f193929190614841565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016129279493929190614e7f565b60405180910390fd5b8097508460ff168a0199505f612949858760ff166131c8565b90505f5f1b8a0361295a5780612965565b6129648a826130e1565b5b99505050505050505050612571565b600381036129be575f6129928489896131b29290919263ffffffff16565b80955081925050505f5f1b85036129a957806129b4565b6129b385826130e1565b5b9450505050612571565b60048103612a3d575f600f831660ff1690505f6129ed85838b8b611eaa9190939291909392919063ffffffff16565b80965081925050505f81860190505f5f612a198e8e8e8e8c908892612a1493929190614841565b61256d565b91509150829750818a019950612a2f89826130e1565b985050505050505050612571565b60068103612b4d575f6002600c841660ff16901c60ff1690505f8103612a8157612a72848989611ef69290919263ffffffff16565b8160ff16915080955081925050505b5f6003841660ff1690505f8103612ab757612aa7858a8a611ed79290919263ffffffff16565b8161ffff16915080965081925050505b5f612acd868b8b611f589290919263ffffffff16565b8162ffffff16915080975081925050505f81870190505f5f612b018f8f8f8f8d908892612afc93929190614841565b61256d565b91509150829850848210612b1557858b019a505b5f612b218287896131fa565b90505f5f1b8b03612b325780612b3d565b612b3c8b826130e1565b5b9a50505050505050505050612571565b60058103612bcf575f612b6b8489896131b29290919263ffffffff16565b8095508192505050888103612b9e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b5f612ba88261322f565b90505f5f1b8603612bb95780612bc4565b612bc386826130e1565b5b955050505050612571565b60078103612d35575f600f831690505f8160ff1603612c0657612bfd848989611ef69290919263ffffffff16565b80955081925050505b5f5f612c1d868b8b6131b29290919263ffffffff16565b8097508193505050612c3a868b8b6131b29290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f604051602001612c919190614f07565b604051602081830303815290604052805190602001208388866040515f8152602001604052604051612cc69493929190614dcd565b6020604051602081039080840390855afa158015612ce6573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612d08828960ff166131c8565b90505f5f1b8c03612d195780612d24565b612d238c826130e1565b5b9b5050505050505050505050612571565b60088103612dce575f612d538489896131b29290919263ffffffff16565b80955081925050505f612d6f5f8c61325e90919063ffffffff16565b9050808203612d9c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b5f612da6836132af565b90505f5f1b8703612db75780612dc2565b612dc187826130e1565b5b96505050505050612571565b60098103612f34575f6003831690505f8160ff1603612e0557612dfc848989611ef69290919263ffffffff16565b80955081925050505b5f612e1b858a8a611f119290919263ffffffff16565b80965081925050505f5f6002600c871660ff16901c60ff169050612e5187828d8d611eaa9190939291909392919063ffffffff16565b8098508193505050505f81870190505f8373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612e9093929190614841565b6040518463ffffffff1660e01b8152600401612eae93929190614f2c565b602060405180830381865afa158015612ec9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eed9190614f63565b90508197508460ff168a0199505f612f09858760ff16846132de565b90505f5f1b8a03612f1a5780612f25565b612f248a826130e1565b5b99505050505050505050612571565b600a810361309a575f6003831690505f8160ff1603612f6b57612f62848989611ef69290919263ffffffff16565b80955081925050505b5f612f81858a8a611f119290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f612fb787838d8d611eaa9190939291909392919063ffffffff16565b80985081925050505f81880190505f8473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792612ff593929190614841565b6040518463ffffffff1660e01b815260040161301393929190614e10565b602060405180830381865afa15801561302e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130529190614f63565b90508198508560ff168b019a505f61306e868860ff16846132de565b90505f5f1b8b0361307f578061308a565b6130898b826130e1565b5b9a50505050505050505050612571565b806040517fb2505f7c0000000000000000000000000000000000000000000000000000000081526004016130ce9190613f95565b60405180910390fd5b5094509492505050565b5f825f528160205260405f20905092915050565b5f5f5f1b8214158015613131575061312e7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b6119fe565b82145b9050919050565b5f60605f5f90505b83518110156131a1575f61316d8583815181106131605761315f614334565b5b6020026020010151613313565b90508281604051602001613182929190614fbe565b6040516020818303038152906040529250508080600101915050613140565b508080519060200120915050919050565b5f5f848301359150602083019050935093915050565b5f82826040516020016131dc929190615094565b60405160208183030381529060405280519060200120905092915050565b5f83838360405160200161321093929190615114565b6040516020818303038152906040528051906020012090509392505050565b5f8160405160200161324191906151a5565b604051602081830303815290604052805190602001209050919050565b5f5f61326e846020015184612033565b90505f61327a856120d7565b9050818160405160200161328f929190614aa4565b604051602081830303815290604052805190602001209250505092915050565b5f816040516020016132c19190615214565b604051602081830303815290604052805190602001209050919050565b5f8383836040516020016132f493929190615283565b6040516020818303038152906040528051906020012090509392505050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c001516040516020016133759897969594939291906152ca565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b60405180604001604052805f81526020015f81525090565b5f82905092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f82821b905092915050565b5f6134928383613446565b8261349d8135613450565b925060048210156134dd576134d87fffffffff000000000000000000000000000000000000000000000000000000008360040360080261347b565b831692505b505092915050565b5f81905092915050565b828183375f83830152505050565b5f61350883856134e5565b93506135158385846134ef565b82840190509392505050565b5f61352d8284866134fd565b91508190509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135738261354a565b9050919050565b61358381613569565b811461358d575f5ffd5b50565b5f8135905061359e8161357a565b92915050565b5f602082840312156135b9576135b8613542565b5b5f6135c684828501613590565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613619826135d3565b810181811067ffffffffffffffff82111715613638576136376135e3565b5b80604052505050565b5f61364a613539565b90506136568282613610565b919050565b5f5ffd5b5f60ff82169050919050565b6136748161365f565b811461367e575f5ffd5b50565b5f8135905061368f8161366b565b92915050565b5f8115159050919050565b6136a981613695565b81146136b3575f5ffd5b50565b5f813590506136c4816136a0565b92915050565b5f5ffd5b5f67ffffffffffffffff8211156136e8576136e76135e3565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61370f816136fd565b8114613719575f5ffd5b50565b5f8135905061372a81613706565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561374e5761374d6135e3565b5b613757826135d3565b9050602081019050919050565b5f61377661377184613734565b613641565b90508281526020810184848401111561379257613791613730565b5b61379d8482856134ef565b509392505050565b5f82601f8301126137b9576137b86136ca565b5b81356137c9848260208601613764565b91505092915050565b5f60e082840312156137e7576137e66135cf565b5b6137f160e0613641565b90505f61380084828501613590565b5f8301525060206138138482850161371c565b602083015250604082013567ffffffffffffffff8111156138375761383661365b565b5b613843848285016137a5565b60408301525060606138578482850161371c565b606083015250608061386b848285016136b6565b60808301525060a061387f848285016136b6565b60a08301525060c06138938482850161371c565b60c08301525092915050565b5f6138b16138ac846136ce565b613641565b905080838252602082019050602084028301858111156138d4576138d36136f9565b5b835b8181101561391b57803567ffffffffffffffff8111156138f9576138f86136ca565b5b80860161390689826137d2565b855260208501945050506020810190506138d6565b5050509392505050565b5f82601f830112613939576139386136ca565b5b813561394984826020860161389f565b91505092915050565b5f819050919050565b61396481613952565b811461396e575f5ffd5b50565b5f8135905061397f8161395b565b92915050565b5f67ffffffffffffffff82111561399f5761399e6135e3565b5b602082029050602081019050919050565b5f6139c26139bd84613985565b613641565b905080838252602082019050602084028301858111156139e5576139e46136f9565b5b835b81811015613a0e57806139fa8882613590565b8452602084019350506020810190506139e7565b5050509392505050565b5f82601f830112613a2c57613a2b6136ca565b5b8135613a3c8482602086016139b0565b91505092915050565b5f6101208284031215613a5b57613a5a6135cf565b5b613a66610120613641565b90505f613a7584828501613681565b5f830152506020613a88848285016136b6565b602083015250604082013567ffffffffffffffff811115613aac57613aab61365b565b5b613ab884828501613925565b6040830152506060613acc8482850161371c565b6060830152506080613ae08482850161371c565b60808301525060a082013567ffffffffffffffff811115613b0457613b0361365b565b5b613b10848285016137a5565b60a08301525060c0613b2484828501613971565b60c08301525060e0613b3884828501613971565b60e08301525061010082013567ffffffffffffffff811115613b5d57613b5c61365b565b5b613b6984828501613a18565b6101008301525092915050565b5f5ffd5b5f5f83601f840112613b8f57613b8e6136ca565b5b8235905067ffffffffffffffff811115613bac57613bab613b76565b5b602083019150836001820283011115613bc857613bc76136f9565b5b9250929050565b5f5f5f60408486031215613be657613be5613542565b5b5f84013567ffffffffffffffff811115613c0357613c02613546565b5b613c0f86828701613a45565b935050602084013567ffffffffffffffff811115613c3057613c2f613546565b5b613c3c86828701613b7a565b92509250509250925092565b613c5181613952565b82525050565b5f602082019050613c6a5f830184613c48565b92915050565b5f5f5f5f5f60808688031215613c8957613c88613542565b5b5f613c9688828901613590565b9550506020613ca788828901613590565b9450506040613cb88882890161371c565b935050606086013567ffffffffffffffff811115613cd957613cd8613546565b5b613ce588828901613b7a565b92509250509295509295909350565b613cfd81613450565b82525050565b5f602082019050613d165f830184613cf4565b92915050565b5f5f5f60408486031215613d3357613d32613542565b5b5f613d4086828701613971565b935050602084013567ffffffffffffffff811115613d6157613d60613546565b5b613d6d86828701613b7a565b92509250509250925092565b613d8281613450565b8114613d8c575f5ffd5b50565b5f81359050613d9d81613d79565b92915050565b5f60208284031215613db857613db7613542565b5b5f613dc584828501613d8f565b91505092915050565b613dd781613569565b82525050565b5f602082019050613df05f830184613dce565b92915050565b5f5f5f5f60408587031215613e0e57613e0d613542565b5b5f85013567ffffffffffffffff811115613e2b57613e2a613546565b5b613e3787828801613b7a565b9450945050602085013567ffffffffffffffff811115613e5a57613e59613546565b5b613e6687828801613b7a565b925092505092959194509250565b5f60208284031215613e8957613e88613542565b5b5f613e9684828501613971565b91505092915050565b5f5f60208385031215613eb557613eb4613542565b5b5f83013567ffffffffffffffff811115613ed257613ed1613546565b5b613ede85828601613b7a565b92509250509250929050565b5f5f5f5f60608587031215613f0257613f01613542565b5b5f613f0f87828801613590565b9450506020613f208782880161371c565b935050604085013567ffffffffffffffff811115613f4157613f40613546565b5b613f4d87828801613b7a565b925092505092959194509250565b5f60208284031215613f7057613f6f613542565b5b5f613f7d8482850161371c565b91505092915050565b613f8f816136fd565b82525050565b5f602082019050613fa85f830184613f86565b92915050565b5f604082019050613fc15f830185613dce565b613fce6020830184613f86565b9392505050565b613fde81613695565b82525050565b5f60c082019050613ff75f830189613f86565b6140046020830188613f86565b6140116040830187613fd5565b61401e6060830186613c48565b61402b6080830185613f86565b61403860a0830184613c48565b979650505050505050565b5f5f6040838503121561405957614058613542565b5b5f61406685828601613d8f565b925050602061407785828601613590565b9150509250929050565b5f5f83601f840112614096576140956136ca565b5b8235905067ffffffffffffffff8111156140b3576140b2613b76565b5b6020830191508360208202830111156140cf576140ce6136f9565b5b9250929050565b5f5f5f5f5f5f5f5f60a0898b0312156140f2576140f1613542565b5b5f6140ff8b828c01613590565b98505060206141108b828c01613590565b975050604089013567ffffffffffffffff81111561413157614130613546565b5b61413d8b828c01614081565b9650965050606089013567ffffffffffffffff8111156141605761415f613546565b5b61416c8b828c01614081565b9450945050608089013567ffffffffffffffff81111561418f5761418e613546565b5b61419b8b828c01613b7a565b92509250509295985092959890939650565b5f5f5f5f5f5f60a087890312156141c7576141c6613542565b5b5f6141d489828a01613590565b96505060206141e589828a01613590565b95505060406141f689828a0161371c565b945050606061420789828a0161371c565b935050608087013567ffffffffffffffff81111561422857614227613546565b5b61423489828a01613b7a565b92509250509295509295509295565b5f6bffffffffffffffffffffffff82169050919050565b61426381614243565b811461426d575f5ffd5b50565b5f8135905061427e8161425a565b92915050565b5f5f5f6060848603121561429b5761429a613542565b5b5f6142a886828701613971565b93505060206142b986828701613590565b92505060406142ca86828701614270565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430b826136fd565b9150614316836136fd565b925082820190508082111561432e5761432d6142d4565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61436a8161365f565b82525050565b61437981613695565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143b181613569565b82525050565b6143c0816136fd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6143f8826143c6565b61440281856143d0565b93506144128185602086016143e0565b61441b816135d3565b840191505092915050565b5f60e083015f83015161443b5f8601826143a8565b50602083015161444e60208601826143b7565b506040830151848203604086015261446682826143ee565b915050606083015161447b60608601826143b7565b50608083015161448e6080860182614370565b5060a08301516144a160a0860182614370565b5060c08301516144b460c08601826143b7565b508091505092915050565b5f6144ca8383614426565b905092915050565b5f602082019050919050565b5f6144e88261437f565b6144f28185614389565b93508360208202850161450485614399565b805f5b8581101561453f578484038952815161452085826144bf565b945061452b836144d2565b925060208a01995050600181019050614507565b50829750879550505050505092915050565b61455a81613952565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61459483836143a8565b60208301905092915050565b5f602082019050919050565b5f6145b682614560565b6145c0818561456a565b93506145cb8361457a565b805f5b838110156145fb5781516145e28882614589565b97506145ed836145a0565b9250506001810190506145ce565b5085935050505092915050565b5f61012083015f83015161461e5f860182614361565b5060208301516146316020860182614370565b506040830151848203604086015261464982826144de565b915050606083015161465e60608601826143b7565b50608083015161467160808601826143b7565b5060a083015184820360a086015261468982826143ee565b91505060c083015161469e60c0860182614551565b5060e08301516146b160e0860182614551565b506101008301518482036101008601526146cb82826145ac565b9150508091505092915050565b5f82825260208201905092915050565b5f6146f383856146d8565b93506147008385846134ef565b614709836135d3565b840190509392505050565b5f6040820190508181035f83015261472c8186614608565b905081810360208301526147418184866146e8565b9050949350505050565b61475481614243565b82525050565b5f60608201905061476d5f830186613c48565b61477a6020830185613dce565b614787604083018461474b565b949350505050565b5f6040820190506147a25f830185613c48565b6147af6020830184613c48565b9392505050565b5f6040820190506147c95f830185613c48565b6147d66020830184613f86565b9392505050565b5f6060820190506147f05f830186613c48565b6147fd6020830185613dce565b61480a6040830184613dce565b949350505050565b5f6040820190506148255f830185613f86565b6148326020830184613f86565b9392505050565b5f5ffd5b5f5ffd5b5f5f8585111561485457614853614839565b5b838611156148655761486461483d565b5b6001850283019150848603905094509492505050565b5f60608201905061488e5f830186613f86565b61489b6020830185613f86565b6148a86040830184613f86565b949350505050565b5f6060820190508181035f8301526148c88186614608565b90506148d76020830185613f86565b6148e46040830184613f86565b949350505050565b5f6148f6826143c6565b61490081856146d8565b93506149108185602086016143e0565b614919816135d3565b840191505092915050565b5f60c0820190506149375f830189613c48565b6149446020830188613f86565b6149516040830187613f86565b61495e6060830186613f86565b61496b6080830185613f86565b81810360a083015261497d81846148ec565b9050979650505050505050565b5f60608201905061499d5f830186613c48565b6149aa6020830185613f86565b81810360408301526149bc81846148ec565b9050949350505050565b5f6060820190508181035f8301526149de8186614608565b90506149ed6020830185613f86565b81810360408301526149ff81846148ec565b9050949350505050565b5f604082019050614a1c5f830185613cf4565b614a296020830184613dce565b9392505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614a6e600283614a30565b9150614a7982614a3a565b600282019050919050565b5f819050919050565b614a9e614a9982613952565b614a84565b82525050565b5f614aae82614a62565b9150614aba8285614a8d565b602082019150614aca8284614a8d565b6020820191508190509392505050565b5f604082019050614aed5f830185613dce565b8181036020830152614aff81846148ec565b90509392505050565b5f81519050614b168161395b565b92915050565b5f81519050614b2a81613706565b92915050565b5f60408284031215614b4557614b446135cf565b5b614b4f6040613641565b90505f614b5e84828501614b08565b5f830152506020614b7184828501614b1c565b60208301525092915050565b5f60408284031215614b9257614b91613542565b5b5f614b9f84828501614b30565b91505092915050565b604082015f820151614bbc5f850182614551565b506020820151614bcf60208501826143b7565b50505050565b5f604082019050614be85f830184614ba8565b92915050565b5f60a082019050614c015f830188613c48565b614c0e6020830187613c48565b614c1b6040830186613c48565b614c286060830185613f86565b614c356080830184613dce565b9695505050505050565b5f81905092915050565b614c5281613569565b82525050565b5f614c638383614c49565b60208301905092915050565b5f614c7982614560565b614c838185614c3f565b9350614c8e8361457a565b805f5b83811015614cbe578151614ca58882614c58565b9750614cb0836145a0565b925050600181019050614c91565b5085935050505092915050565b5f614cd68284614c6f565b915081905092915050565b5f60a082019050614cf45f830188613c48565b614d016020830187613c48565b614d0e6040830186613f86565b614d1b6060830185613f86565b614d286080830184613c48565b9695505050505050565b5f606082019050614d455f830186613c48565b614d526020830185613c48565b614d5f6040830184613c48565b949350505050565b614d708161365f565b82525050565b5f602082019050614d895f830184614d67565b92915050565b5f6060820190508181035f830152614da88186886146e8565b9050614db76020830185613f86565b614dc46040830184613f86565b95945050505050565b5f608082019050614de05f830187613c48565b614ded6020830186614d67565b614dfa6040830185613c48565b614e076060830184613c48565b95945050505050565b5f604082019050614e235f830186613c48565b8181036020830152614e368184866146e8565b9050949350505050565b5f81519050614e4e81613d79565b92915050565b5f60208284031215614e6957614e68613542565b5b5f614e7684828501614e40565b91505092915050565b5f606082019050614e925f830187613c48565b614e9f6020830186613dce565b8181036040830152614eb28184866146e8565b905095945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f614ef1601c83614a30565b9150614efc82614ebd565b601c82019050919050565b5f614f1182614ee5565b9150614f1d8284614a8d565b60208201915081905092915050565b5f6040820190508181035f830152614f448186614608565b90508181036020830152614f598184866146e8565b9050949350505050565b5f60208284031215614f7857614f77613542565b5b5f614f8584828501614b08565b91505092915050565b5f614f98826143c6565b614fa281856134e5565b9350614fb28185602086016143e0565b80840191505092915050565b5f614fc98285614f8e565b9150614fd58284614a8d565b6020820191508190509392505050565b7f53657175656e6365207369676e65723a0a0000000000000000000000000000005f82015250565b5f615019601183614a30565b915061502482614fe5565b601182019050919050565b5f8160601b9050919050565b5f6150458261502f565b9050919050565b5f6150568261503b565b9050919050565b61506e61506982613569565b61504c565b82525050565b5f819050919050565b61508e615089826136fd565b615074565b82525050565b5f61509e8261500d565b91506150aa828561505d565b6014820191506150ba828461507d565b6020820191508190509392505050565b7f53657175656e6365206e657374656420636f6e6669673a0a00000000000000005f82015250565b5f6150fe601883614a30565b9150615109826150ca565b601882019050919050565b5f61511e826150f2565b915061512a8286614a8d565b60208201915061513a828561507d565b60208201915061514a828461507d565b602082019150819050949350505050565b7f53657175656e636520737461746963206469676573743a0a00000000000000005f82015250565b5f61518f601883614a30565b915061519a8261515b565b601882019050919050565b5f6151af82615183565b91506151bb8284614a8d565b60208201915081905092915050565b7f53657175656e636520616e792061646472657373207375626469676573743a0a5f82015250565b5f6151fe602083614a30565b9150615209826151ca565b602082019050919050565b5f61521e826151f2565b915061522a8284614a8d565b60208201915081905092915050565b7f53657175656e63652073617069656e7420636f6e6669673a0a000000000000005f82015250565b5f61526d601983614a30565b915061527882615239565b601982019050919050565b5f61528d82615261565b9150615299828661505d565b6014820191506152a9828561507d565b6020820191506152b98284614a8d565b602082019150819050949350505050565b5f610100820190506152de5f83018b613c48565b6152eb602083018a613dce565b6152f86040830189613f86565b6153056060830188613c48565b6153126080830187613f86565b61531f60a0830186613fd5565b61532c60c0830185613fd5565b61533960e0830184613f86565b999850505050505050505056fea264697066735822122019b5533fc4cbee24a73438e1a10df64732fe25b8872932ba010c1d5c7babb5eb64736f6c634300081c0033", + "deployedBytecode": "0x608060405260043610610117575f3560e01c80636ea445771161009f578063ad55366b11610063578063ad55366b14610475578063b93ea7ad146104b6578063bc197c81146104d2578063f23a6e611461050e578063f727ef1c1461054a5761011e565b80636ea445771461038e5780638943ec02146103aa5780638c3f5563146103d257806392dcb3fc1461040e578063aaf10f421461044b5761011e565b80631a9b2337116100e65780631a9b2337146102c85780631f6a1eb91461030457806329561426146103205780634fcf3eca1461034857806351605d80146103645761011e565b8063025b22bc146101f857806313792a4a14610214578063150b7a02146102505780631626ba7e1461028c5761011e565b3661011e57005b60045f369050106101f6575f61013f5f369061013a9190613487565b610572565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146101f4575f5f8273ffffffffffffffffffffffffffffffffffffffff165f3660405161019d929190613521565b5f60405180830381855af49150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101ec57805160208201fd5b805160208201f35b505b005b610212600480360381019061020d91906135a4565b6105c7565b005b34801561021f575f5ffd5b5061023a60048036038101906102359190613bcf565b610643565b6040516102479190613c57565b60405180910390f35b34801561025b575f5ffd5b5061027660048036038101906102719190613c70565b6107f2565b6040516102839190613d03565b60405180910390f35b348015610297575f5ffd5b506102b260048036038101906102ad9190613d1c565b610806565b6040516102bf9190613d03565b60405180910390f35b3480156102d3575f5ffd5b506102ee60048036038101906102e99190613da3565b610848565b6040516102fb9190613ddd565b60405180910390f35b61031e60048036038101906103199190613df6565b610859565b005b34801561032b575f5ffd5b5061034660048036038101906103419190613e74565b6108e8565b005b610362600480360381019061035d9190613da3565b610964565b005b34801561036f575f5ffd5b50610378610a59565b6040516103859190613c57565b60405180910390f35b6103a860048036038101906103a39190613e9f565b610a8a565b005b3480156103b5575f5ffd5b506103d060048036038101906103cb9190613eea565b610b29565b005b3480156103dd575f5ffd5b506103f860048036038101906103f39190613f5b565b610b2f565b6040516104059190613f95565b60405180910390f35b348015610419575f5ffd5b50610434600480360381019061042f9190613e74565b610b67565b604051610442929190613fae565b60405180910390f35b348015610456575f5ffd5b5061045f610b7b565b60405161046c9190613ddd565b60405180910390f35b348015610480575f5ffd5b5061049b60048036038101906104969190613bcf565b610b89565b6040516104ad96959493929190613fe4565b60405180910390f35b6104d060048036038101906104cb9190614043565b610bc7565b005b3480156104dd575f5ffd5b506104f860048036038101906104f391906140d6565b610cbd565b6040516105059190613d03565b60405180910390f35b348015610519575f5ffd5b50610534600480360381019061052f91906141ad565b610cd4565b6040516105419190613d03565b60405180910390f35b348015610555575f5ffd5b50610570600480360381019061056b9190614284565b610ce9565b005b5f6105be7fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916610db2565b5f1c9050919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461063757336040517fa19dbf0000000000000000000000000000000000000000000000000000000000815260040161062e9190613ddd565b60405180910390fd5b61064081610dea565b50565b5f5f6001856101000151516106589190614301565b67ffffffffffffffff811115610671576106706135e3565b5b60405190808252806020026020018201604052801561069f5781602001602082028036833780820191505090505b5090505f5f90505b8561010001515181101561072f5785610100015181815181106106cd576106cc614334565b5b60200260200101518282815181106106e8576106e7614334565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506106a7565b503381866101000151518151811061074a57610749614334565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808561010001819052505f61079a868686610e2d565b509050806107e3578585856040517ff58cc8b50000000000000000000000000000000000000000000000000000000081526004016107da93929190614714565b60405180910390fd5b60015f1b925050509392505050565b5f63150b7a0260e01b905095945050505050565b5f5f6108118561101d565b90505f61081f828686610e2d565b50905080610834575f60e01b92505050610841565b6320c13b0b60e01b925050505b9392505050565b5f61085282610572565b9050919050565b5f5a90505f6108688686611046565b905061087c816060015182608001516114e8565b5f5f610889838787610e2d565b91509150816108d3578286866040517fa2b6d61b0000000000000000000000000000000000000000000000000000000081526004016108ca93929190614714565b60405180910390fd5b6108de84828561158c565b5050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461095857336040517fa19dbf0000000000000000000000000000000000000000000000000000000000815260040161094f9190613ddd565b60405180910390fd5b610961816118bc565b50565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109d457336040517fa19dbf000000000000000000000000000000000000000000000000000000000081526004016109cb9190613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166109f482610572565b73ffffffffffffffffffffffffffffffffffffffff1603610a4c57806040517f1c3812cc000000000000000000000000000000000000000000000000000000008152600401610a439190613d03565b60405180910390fd5b610a56815f61195d565b50565b5f610a857fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b6119fe565b905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610afa57336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610af19190613ddd565b60405180910390fd5b5f5a90505f610b098484611046565b90505f610b1582611a08565b9050610b2283828461158c565b5050505050565b50505050565b5f610b5e7f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b610db2565b5f1c9050919050565b5f5f610b7283611a58565b91509150915091565b5f610b84611aa9565b905090565b5f5f5f5f5f5f610b9c8989895f5f611ab1565b809550819650829750839950849a505050505050610bb983611dee565b935093975093979195509350565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3757336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610c2e9190613ddd565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610c5783610572565b73ffffffffffffffffffffffffffffffffffffffff1614610caf57816040517f5b4d6d6a000000000000000000000000000000000000000000000000000000008152600401610ca69190613d03565b60405180910390fd5b610cb9828261195d565b5050565b5f63bc197c8160e01b905098975050505050505050565b5f63f23a6e6160e01b90509695505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d5957336040517fa19dbf00000000000000000000000000000000000000000000000000000000008152600401610d509190613ddd565b60405180910390fd5b610d728383836bffffffffffffffffffffffff16611dff565b7febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b1838383604051610da59392919061475a565b60405180910390a1505050565b5f5f8383604051602001610dc792919061478f565b604051602081830303815290604052805190602001209050805491505092915050565b610df381611e5d565b7f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca0381604051610e229190613ddd565b60405180910390a150565b5f5f5f84845f818110610e4357610e42614334565b5b9050013560f81c60f81b9050608060f81b608060f81b82167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191603610f9c57610e8b86611a08565b91505f5f610e9884611a58565b91509150428111610ee25783816040517ff95b6ab7000000000000000000000000000000000000000000000000000000008152600401610ed99291906147b6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610f4a57503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610f90578333836040517f8945c313000000000000000000000000000000000000000000000000000000008152600401610f87939291906147dd565b60405180910390fd5b60019450505050611015565b5f5f5f610fac8989895f5f611ab1565b905080985081945082955083965050505050828210156110055782826040517ffd41fcba000000000000000000000000000000000000000000000000000000008152600401610ffc929190614812565b60405180910390fd5b61100e81611dee565b9550505050505b935093915050565b611025613392565b6003815f019060ff16908160ff1681525050818160e0018181525050919050565b61104e613392565b5f815f019060ff16908160ff16815250505f5f61106b8585611e63565b915060ff16915060018083160361108b575f8360600181815250506110c7565b6110a0818686611e799290919263ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff169150846060018193508281525050505b5f6007600184901c1690505f811115611104576110f682828888611eaa9190939291909392919063ffffffff16565b856080018194508281525050505b5f6010808516036111185760019050611170565b60208085160361114b57611137838888611ed79290919263ffffffff16565b8161ffff169150809450819250505061116f565b611160838888611ef69290919263ffffffff16565b8160ff16915080945081925050505b5b8067ffffffffffffffff81111561118a576111896135e3565b5b6040519080825280602002602001820160405280156111c357816020015b6111b06133dd565b8152602001906001900390816111a85790505b5085604001819052505f5f90505b818110156114dd575f6111ef858a8a611ef69290919263ffffffff16565b8096508192505050600180821660ff160361125e57308760400151838151811061121c5761121b614334565b5b60200260200101515f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506112ca565b611273858a8a611f119290919263ffffffff16565b8860400151848151811061128a57611289614334565b5b60200260200101515f018197508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050505b600280821660ff1603611318576112ec858a8a611f429290919263ffffffff16565b8860400151848151811061130357611302614334565b5b60200260200101516020018197508281525050505b600480821660ff16036113e0575f61133b868b8b611f589290919263ffffffff16565b8162ffffff169150809750819250505089898790838961135b9190614301565b9261136893929190614841565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050886040015184815181106113c1576113c0614334565b5b60200260200101516040018190525080866113dc9190614301565b9550505b600880821660ff160361142e57611402858a8a611f429290919263ffffffff16565b8860400151848151811061141957611418614334565b5b60200260200101516060018197508281525050505b601080821660ff16148760400151838151811061144e5761144d614334565b5b60200260200101516080019015159081151581525050602080821660ff16148760400151838151811061148457611483614334565b5b602002602001015160a0019015159081151581525050600660c0821660ff16901c60ff16876040015183815181106114bf576114be614334565b5b602002602001015160c00181815250505080806001019150506111d1565b505050505092915050565b5f6114f283610b2f565b905081811461153c578282826040517f9b6514f40000000000000000000000000000000000000000000000000000000081526004016115339392919061487b565b60405180910390fd5b5f60018301905061154d8482611f78565b7f1f180c27086c7a39ea2a7b25239d1ab92348f07ca7bb59d1438fcf527568f881848260405161157e929190614812565b60405180910390a150505050565b5f5f90505f82604001515190505f5f90505b818110156118b4575f846040015182815181106115be576115bd614334565b5b602002602001015190508060a0015180156115d7575083155b1561161b577f9ae934bf8a986157c889a24c3b3fa85e74b7e4ee4b1f8fc6e7362cb4c1d19d8b868360405161160d9291906147b6565b60405180910390a1506118a7565b5f93505f816060015190505f81141580156116355750805a105b1561167b5785835a6040517f21395274000000000000000000000000000000000000000000000000000000008152600401611672939291906148b0565b60405180910390fd5b5f82608001511561173057611729835f01515f841461169a578361169c565b5a5b634c4e814c60e01b8b8d898b8e606001518b604001516040516024016116c796959493929190614924565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fad565b9050611758565b611755835f015184602001515f8514611749578461174b565b5a5b8660400151611fc2565b90505b8061186a575f60ff168360c00151036117b957600195507f115f347c00e69f252cd6b63c4f81022a9564c6befe8aa719cb74640a4a306f0d888561179a611fd9565b6040516117a99392919061498a565b60405180910390a15050506118a7565b600160ff168360c00151036118105786846117d2611fd9565b6040517f7f6b0bb1000000000000000000000000000000000000000000000000000000008152600401611807939291906149c6565b60405180910390fd5b600260ff168360c0015103611869577fc2c704302430fe0dc8d95f272e2f4e54bbbc51a3327fd5d75ab41f9fc8fd129b888561184a611fd9565b6040516118599392919061498a565b60405180910390a15050506118b4565b5b7f5a589b1d8062f33451d29cae3dabd9b2e36c62aee644178c600977ca8dda661a888560405161189b9291906147b6565b60405180910390a15050505b808060010191505061159e565b505050505050565b5f5f1b81036118f7576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119237fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b82611ff7565b7f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa816040516119529190613c57565b60405180910390a150565b6119c17fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1205f1b837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168373ffffffffffffffffffffffffffffffffffffffff165f1b611ffe565b7f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed182826040516119f2929190614a09565b60405180910390a15050565b5f81549050919050565b5f5f611a18836020015130612033565b90505f611a24846120d7565b90508181604051602001611a39929190614aa4565b6040516020818303038152906040528051906020012092505050919050565b5f5f5f611a877fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b85610db2565b5f1c9050606081901c816bffffffffffffffffffffffff169250925050915091565b5f3054905090565b5f5f5f5f5f5f5f611ac28b8b611e63565b915060ff169150611ad161342e565b6040808416148015611b0e57505f73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff16145b15611c4a57611b28828d8d611f119290919263ffffffff16565b809350819a50505089611c49575f611b4b838e8e611f589290919263ffffffff16565b8162ffffff16915080945081925050505f8d8d85908487611b6c9190614301565b92611b7993929190614841565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f8201169050808301925050505050505090508a73ffffffffffffffffffffffffffffffffffffffff1663ccce3bc830836040518363ffffffff1660e01b8152600401611bf8929190614ada565b6040805180830381865afa158015611c12573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c369190614b7d565b92508184611c449190614301565b935050505b5b600180841603611c8357611c718d8a838f8f87908092611c6c93929190614841565b61230b565b97509750975097509750505050611de1565b6002808416148d60200190151590811515815250505f6002601c8516901c9050611cbf83828f8f611eaa9190939291909392919063ffffffff16565b8094508197505050505f6001600560208616901c611cdd9190614301565b9050611cfb83828f8f611eaa9190939291909392919063ffffffff16565b809450819a50505050611d0d8d611a08565b9350611d2b8d858e8e86908092611d2693929190614841565b61256d565b8097508198505050611d3f86895f1b6130e1565b9550611d4d86865f1b6130e1565b9550611d71868a73ffffffffffffffffffffffffffffffffffffffff165f1b6130e1565b95505f5f1b815f015114158015611d8b575085815f015114155b8015611d9b575080602001518511155b15611ddd57806040517fccbb534f000000000000000000000000000000000000000000000000000000008152600401611dd49190614bd5565b60405180910390fd5b5050505b9550955095509550959050565b5f611df8826130f5565b9050919050565b611e587fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e865f1b846bffffffffffffffffffffffff841660608673ffffffffffffffffffffffffffffffffffffffff16901b175f1b611ffe565b505050565b80305550565b5f5f83358060f81c925060019150509250929050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f858401356008840261010003600180866008021b0382821c1693508486019250505094509492505050565b5f5f8483013561ffff8160f01c16925060028401915050935093915050565b5f5f848301358060f81c925060018401915050935093915050565b5f5f8483013573ffffffffffffffffffffffffffffffffffffffff8160601c16925060148401915050935093915050565b5f5f848301359150602083019050935093915050565b5f5f8483013562ffffff8160e81c16925060038401915050935093915050565b611fa97f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e5f1b835f1b835f1b611ffe565b5050565b5f5f5f8351602085018787f490509392505050565b5f5f5f835160208501878988f19050949350505050565b60603d604051915060208201818101604052818352815f823e505090565b8082555050565b5f838360405160200161201292919061478f565b60405160208183030381529060405280519060200120905081815550505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856120a257466120a4565b5f5b856040516020016120b9959493929190614bee565b60405160208183030381529060405280519060200120905092915050565b5f5f8261010001516040516020016120ef9190614ccb565b6040516020818303038152906040528051906020012090505f60ff16835f015160ff1603612187575f6121258460400151613138565b90507f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a2818560600151866080015185604051602001612168959493929190614ce1565b6040516020818303038152906040528051906020012092505050612306565b600160ff16835f015160ff16036121f6577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360a0015180519060200120826040516020016121d893929190614d32565b60405160208183030381529060405280519060200120915050612306565b600260ff16835f015160ff160361225e577f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e48360c001518260405160200161224093929190614d32565b60405160208183030381529060405280519060200120915050612306565b600360ff16835f015160ff16036122c6577fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d4668360e00151826040516020016122a893929190614d32565b60405160208183030381529060405280519060200120915050612306565b825f01516040517f048183200000000000000000000000000000000000000000000000000000000081526004016122fd9190614d76565b60405180910390fd5b919050565b5f5f5f5f5f612318613392565b6002815f019060ff16908160ff16815250505f5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90505b89899050821015612502575f5f612372848d8d611f589290919263ffffffff16565b8162ffffff1691508095508192505050838161238e9190614301565b9150505f8b8b905082146123a2575f6123a4565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303612404576123eb8f8d8d879086926123e393929190614841565b600185611ab1565b809a50819b50829c50839d50849e505050505050612434565b612422858d8d8790869261241a93929190614841565b600185611ab1565b50809a50819b50829c50839d50505050505b8989101561248f578b8b8590849261244e93929190614841565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016124869493929190614d8f565b60405180910390fd5b819350878d5f0151036124a8575f5f1b8d5f0181815250505b8287106124ee5786836040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004016124e5929190614812565b60405180910390fd5b878560c00181815250508692505050612350565b5f5f1b8b5f01511415801561251b57508a602001518511155b1561255d578a6040517fccbb534f0000000000000000000000000000000000000000000000000000000081526004016125549190614bd5565b60405180910390fd5b5050509550955095509550959050565b5f5f5f5b848490508110156130d7575f612592828787611ef69290919263ffffffff16565b8160ff16915080935081925050505f600460f08316901c90505f81036126ea575f600f831690505f8160ff16036125e1576125d8848989611ef69290919263ffffffff16565b80955081925050505b5f5f6125f8868b8b6131b29290919263ffffffff16565b8097508193505050612615868b8b6131b29290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f8388866040515f815260200160405260405161267b9493929190614dcd565b6020604051602081039080840390855afa15801561269b573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f6126bd828960ff166131c8565b90505f5f1b8c036126ce57806126d9565b6126d88c826130e1565b5b9b5050505050505050505050612571565b60018103612775575f600f831690505f8160ff160361272157612718848989611ef69290919263ffffffff16565b80955081925050505b5f612737858a8a611f119290919263ffffffff16565b80965081925050505f61274d828460ff166131c8565b90505f5f1b870361275e5780612769565b61276887826130e1565b5b96505050505050612571565b60028103612974575f6003831690505f8160ff16036127ac576127a3848989611ef69290919263ffffffff16565b80955081925050505b5f6127c2858a8a611f119290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f6127f887838d8d611eaa9190939291909392919063ffffffff16565b80985081925050505f81880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261285c93929190614841565b6040518463ffffffff1660e01b815260040161287a93929190614e10565b602060405180830381865afa158015612895573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b99190614e54565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612930578c848d8d8b9085926128f193929190614841565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016129279493929190614e7f565b60405180910390fd5b8097508460ff168a0199505f612949858760ff166131c8565b90505f5f1b8a0361295a5780612965565b6129648a826130e1565b5b99505050505050505050612571565b600381036129be575f6129928489896131b29290919263ffffffff16565b80955081925050505f5f1b85036129a957806129b4565b6129b385826130e1565b5b9450505050612571565b60048103612a3d575f600f831660ff1690505f6129ed85838b8b611eaa9190939291909392919063ffffffff16565b80965081925050505f81860190505f5f612a198e8e8e8e8c908892612a1493929190614841565b61256d565b91509150829750818a019950612a2f89826130e1565b985050505050505050612571565b60068103612b4d575f6002600c841660ff16901c60ff1690505f8103612a8157612a72848989611ef69290919263ffffffff16565b8160ff16915080955081925050505b5f6003841660ff1690505f8103612ab757612aa7858a8a611ed79290919263ffffffff16565b8161ffff16915080965081925050505b5f612acd868b8b611f589290919263ffffffff16565b8162ffffff16915080975081925050505f81870190505f5f612b018f8f8f8f8d908892612afc93929190614841565b61256d565b91509150829850848210612b1557858b019a505b5f612b218287896131fa565b90505f5f1b8b03612b325780612b3d565b612b3c8b826130e1565b5b9a50505050505050505050612571565b60058103612bcf575f612b6b8489896131b29290919263ffffffff16565b8095508192505050888103612b9e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b5f612ba88261322f565b90505f5f1b8603612bb95780612bc4565b612bc386826130e1565b5b955050505050612571565b60078103612d35575f600f831690505f8160ff1603612c0657612bfd848989611ef69290919263ffffffff16565b80955081925050505b5f5f612c1d868b8b6131b29290919263ffffffff16565b8097508193505050612c3a868b8b6131b29290919263ffffffff16565b80975081925050505f60ff82901c5f1c90505f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff835f1c165f1b90505f601b830190505f60018f604051602001612c919190614f07565b604051602081830303815290604052805190602001208388866040515f8152602001604052604051612cc69493929190614dcd565b6020604051602081039080840390855afa158015612ce6573d5f5f3e3d5ffd5b5050506020604051035190508660ff168c019b505f612d08828960ff166131c8565b90505f5f1b8c03612d195780612d24565b612d238c826130e1565b5b9b5050505050505050505050612571565b60088103612dce575f612d538489896131b29290919263ffffffff16565b80955081925050505f612d6f5f8c61325e90919063ffffffff16565b9050808203612d9c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b5f612da6836132af565b90505f5f1b8703612db75780612dc2565b612dc187826130e1565b5b96505050505050612571565b60098103612f34575f6003831690505f8160ff1603612e0557612dfc848989611ef69290919263ffffffff16565b80955081925050505b5f612e1b858a8a611f119290919263ffffffff16565b80965081925050505f5f6002600c871660ff16901c60ff169050612e5187828d8d611eaa9190939291909392919063ffffffff16565b8098508193505050505f81870190505f8373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792612e9093929190614841565b6040518463ffffffff1660e01b8152600401612eae93929190614f2c565b602060405180830381865afa158015612ec9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612eed9190614f63565b90508197508460ff168a0199505f612f09858760ff16846132de565b90505f5f1b8a03612f1a5780612f25565b612f248a826130e1565b5b99505050505050505050612571565b600a810361309a575f6003831690505f8160ff1603612f6b57612f62848989611ef69290919263ffffffff16565b80955081925050505b5f612f81858a8a611f119290919263ffffffff16565b80965081925050505f6002600c861660ff16901c60ff1690505f612fb787838d8d611eaa9190939291909392919063ffffffff16565b80985081925050505f81880190505f8473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792612ff593929190614841565b6040518463ffffffff1660e01b815260040161301393929190614e10565b602060405180830381865afa15801561302e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130529190614f63565b90508198508560ff168b019a505f61306e868860ff16846132de565b90505f5f1b8b0361307f578061308a565b6130898b826130e1565b5b9a50505050505050505050612571565b806040517fb2505f7c0000000000000000000000000000000000000000000000000000000081526004016130ce9190613f95565b60405180910390fd5b5094509492505050565b5f825f528160205260405f20905092915050565b5f5f5f1b8214158015613131575061312e7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85f1b6119fe565b82145b9050919050565b5f60605f5f90505b83518110156131a1575f61316d8583815181106131605761315f614334565b5b6020026020010151613313565b90508281604051602001613182929190614fbe565b6040516020818303038152906040529250508080600101915050613140565b508080519060200120915050919050565b5f5f848301359150602083019050935093915050565b5f82826040516020016131dc929190615094565b60405160208183030381529060405280519060200120905092915050565b5f83838360405160200161321093929190615114565b6040516020818303038152906040528051906020012090509392505050565b5f8160405160200161324191906151a5565b604051602081830303815290604052805190602001209050919050565b5f5f61326e846020015184612033565b90505f61327a856120d7565b9050818160405160200161328f929190614aa4565b604051602081830303815290604052805190602001209250505092915050565b5f816040516020016132c19190615214565b604051602081830303815290604052805190602001209050919050565b5f8383836040516020016132f493929190615283565b6040516020818303038152906040528051906020012090509392505050565b5f7f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef437825f01518360200151846040015180519060200120856060015186608001518760a001518860c001516040516020016133759897969594939291906152ca565b604051602081830303815290604052805190602001209050919050565b6040518061012001604052805f60ff1681526020015f15158152602001606081526020015f81526020015f8152602001606081526020015f81526020015f8152602001606081525090565b6040518060e001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f8152602001606081526020015f81526020015f151581526020015f151581526020015f81525090565b60405180604001604052805f81526020015f81525090565b5f82905092915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b5f82821b905092915050565b5f6134928383613446565b8261349d8135613450565b925060048210156134dd576134d87fffffffff000000000000000000000000000000000000000000000000000000008360040360080261347b565b831692505b505092915050565b5f81905092915050565b828183375f83830152505050565b5f61350883856134e5565b93506135158385846134ef565b82840190509392505050565b5f61352d8284866134fd565b91508190509392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6135738261354a565b9050919050565b61358381613569565b811461358d575f5ffd5b50565b5f8135905061359e8161357a565b92915050565b5f602082840312156135b9576135b8613542565b5b5f6135c684828501613590565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b613619826135d3565b810181811067ffffffffffffffff82111715613638576136376135e3565b5b80604052505050565b5f61364a613539565b90506136568282613610565b919050565b5f5ffd5b5f60ff82169050919050565b6136748161365f565b811461367e575f5ffd5b50565b5f8135905061368f8161366b565b92915050565b5f8115159050919050565b6136a981613695565b81146136b3575f5ffd5b50565b5f813590506136c4816136a0565b92915050565b5f5ffd5b5f67ffffffffffffffff8211156136e8576136e76135e3565b5b602082029050602081019050919050565b5f5ffd5b5f819050919050565b61370f816136fd565b8114613719575f5ffd5b50565b5f8135905061372a81613706565b92915050565b5f5ffd5b5f67ffffffffffffffff82111561374e5761374d6135e3565b5b613757826135d3565b9050602081019050919050565b5f61377661377184613734565b613641565b90508281526020810184848401111561379257613791613730565b5b61379d8482856134ef565b509392505050565b5f82601f8301126137b9576137b86136ca565b5b81356137c9848260208601613764565b91505092915050565b5f60e082840312156137e7576137e66135cf565b5b6137f160e0613641565b90505f61380084828501613590565b5f8301525060206138138482850161371c565b602083015250604082013567ffffffffffffffff8111156138375761383661365b565b5b613843848285016137a5565b60408301525060606138578482850161371c565b606083015250608061386b848285016136b6565b60808301525060a061387f848285016136b6565b60a08301525060c06138938482850161371c565b60c08301525092915050565b5f6138b16138ac846136ce565b613641565b905080838252602082019050602084028301858111156138d4576138d36136f9565b5b835b8181101561391b57803567ffffffffffffffff8111156138f9576138f86136ca565b5b80860161390689826137d2565b855260208501945050506020810190506138d6565b5050509392505050565b5f82601f830112613939576139386136ca565b5b813561394984826020860161389f565b91505092915050565b5f819050919050565b61396481613952565b811461396e575f5ffd5b50565b5f8135905061397f8161395b565b92915050565b5f67ffffffffffffffff82111561399f5761399e6135e3565b5b602082029050602081019050919050565b5f6139c26139bd84613985565b613641565b905080838252602082019050602084028301858111156139e5576139e46136f9565b5b835b81811015613a0e57806139fa8882613590565b8452602084019350506020810190506139e7565b5050509392505050565b5f82601f830112613a2c57613a2b6136ca565b5b8135613a3c8482602086016139b0565b91505092915050565b5f6101208284031215613a5b57613a5a6135cf565b5b613a66610120613641565b90505f613a7584828501613681565b5f830152506020613a88848285016136b6565b602083015250604082013567ffffffffffffffff811115613aac57613aab61365b565b5b613ab884828501613925565b6040830152506060613acc8482850161371c565b6060830152506080613ae08482850161371c565b60808301525060a082013567ffffffffffffffff811115613b0457613b0361365b565b5b613b10848285016137a5565b60a08301525060c0613b2484828501613971565b60c08301525060e0613b3884828501613971565b60e08301525061010082013567ffffffffffffffff811115613b5d57613b5c61365b565b5b613b6984828501613a18565b6101008301525092915050565b5f5ffd5b5f5f83601f840112613b8f57613b8e6136ca565b5b8235905067ffffffffffffffff811115613bac57613bab613b76565b5b602083019150836001820283011115613bc857613bc76136f9565b5b9250929050565b5f5f5f60408486031215613be657613be5613542565b5b5f84013567ffffffffffffffff811115613c0357613c02613546565b5b613c0f86828701613a45565b935050602084013567ffffffffffffffff811115613c3057613c2f613546565b5b613c3c86828701613b7a565b92509250509250925092565b613c5181613952565b82525050565b5f602082019050613c6a5f830184613c48565b92915050565b5f5f5f5f5f60808688031215613c8957613c88613542565b5b5f613c9688828901613590565b9550506020613ca788828901613590565b9450506040613cb88882890161371c565b935050606086013567ffffffffffffffff811115613cd957613cd8613546565b5b613ce588828901613b7a565b92509250509295509295909350565b613cfd81613450565b82525050565b5f602082019050613d165f830184613cf4565b92915050565b5f5f5f60408486031215613d3357613d32613542565b5b5f613d4086828701613971565b935050602084013567ffffffffffffffff811115613d6157613d60613546565b5b613d6d86828701613b7a565b92509250509250925092565b613d8281613450565b8114613d8c575f5ffd5b50565b5f81359050613d9d81613d79565b92915050565b5f60208284031215613db857613db7613542565b5b5f613dc584828501613d8f565b91505092915050565b613dd781613569565b82525050565b5f602082019050613df05f830184613dce565b92915050565b5f5f5f5f60408587031215613e0e57613e0d613542565b5b5f85013567ffffffffffffffff811115613e2b57613e2a613546565b5b613e3787828801613b7a565b9450945050602085013567ffffffffffffffff811115613e5a57613e59613546565b5b613e6687828801613b7a565b925092505092959194509250565b5f60208284031215613e8957613e88613542565b5b5f613e9684828501613971565b91505092915050565b5f5f60208385031215613eb557613eb4613542565b5b5f83013567ffffffffffffffff811115613ed257613ed1613546565b5b613ede85828601613b7a565b92509250509250929050565b5f5f5f5f60608587031215613f0257613f01613542565b5b5f613f0f87828801613590565b9450506020613f208782880161371c565b935050604085013567ffffffffffffffff811115613f4157613f40613546565b5b613f4d87828801613b7a565b925092505092959194509250565b5f60208284031215613f7057613f6f613542565b5b5f613f7d8482850161371c565b91505092915050565b613f8f816136fd565b82525050565b5f602082019050613fa85f830184613f86565b92915050565b5f604082019050613fc15f830185613dce565b613fce6020830184613f86565b9392505050565b613fde81613695565b82525050565b5f60c082019050613ff75f830189613f86565b6140046020830188613f86565b6140116040830187613fd5565b61401e6060830186613c48565b61402b6080830185613f86565b61403860a0830184613c48565b979650505050505050565b5f5f6040838503121561405957614058613542565b5b5f61406685828601613d8f565b925050602061407785828601613590565b9150509250929050565b5f5f83601f840112614096576140956136ca565b5b8235905067ffffffffffffffff8111156140b3576140b2613b76565b5b6020830191508360208202830111156140cf576140ce6136f9565b5b9250929050565b5f5f5f5f5f5f5f5f60a0898b0312156140f2576140f1613542565b5b5f6140ff8b828c01613590565b98505060206141108b828c01613590565b975050604089013567ffffffffffffffff81111561413157614130613546565b5b61413d8b828c01614081565b9650965050606089013567ffffffffffffffff8111156141605761415f613546565b5b61416c8b828c01614081565b9450945050608089013567ffffffffffffffff81111561418f5761418e613546565b5b61419b8b828c01613b7a565b92509250509295985092959890939650565b5f5f5f5f5f5f60a087890312156141c7576141c6613542565b5b5f6141d489828a01613590565b96505060206141e589828a01613590565b95505060406141f689828a0161371c565b945050606061420789828a0161371c565b935050608087013567ffffffffffffffff81111561422857614227613546565b5b61423489828a01613b7a565b92509250509295509295509295565b5f6bffffffffffffffffffffffff82169050919050565b61426381614243565b811461426d575f5ffd5b50565b5f8135905061427e8161425a565b92915050565b5f5f5f6060848603121561429b5761429a613542565b5b5f6142a886828701613971565b93505060206142b986828701613590565b92505060406142ca86828701614270565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61430b826136fd565b9150614316836136fd565b925082820190508082111561432e5761432d6142d4565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61436a8161365f565b82525050565b61437981613695565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6143b181613569565b82525050565b6143c0816136fd565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f6143f8826143c6565b61440281856143d0565b93506144128185602086016143e0565b61441b816135d3565b840191505092915050565b5f60e083015f83015161443b5f8601826143a8565b50602083015161444e60208601826143b7565b506040830151848203604086015261446682826143ee565b915050606083015161447b60608601826143b7565b50608083015161448e6080860182614370565b5060a08301516144a160a0860182614370565b5060c08301516144b460c08601826143b7565b508091505092915050565b5f6144ca8383614426565b905092915050565b5f602082019050919050565b5f6144e88261437f565b6144f28185614389565b93508360208202850161450485614399565b805f5b8581101561453f578484038952815161452085826144bf565b945061452b836144d2565b925060208a01995050600181019050614507565b50829750879550505050505092915050565b61455a81613952565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f61459483836143a8565b60208301905092915050565b5f602082019050919050565b5f6145b682614560565b6145c0818561456a565b93506145cb8361457a565b805f5b838110156145fb5781516145e28882614589565b97506145ed836145a0565b9250506001810190506145ce565b5085935050505092915050565b5f61012083015f83015161461e5f860182614361565b5060208301516146316020860182614370565b506040830151848203604086015261464982826144de565b915050606083015161465e60608601826143b7565b50608083015161467160808601826143b7565b5060a083015184820360a086015261468982826143ee565b91505060c083015161469e60c0860182614551565b5060e08301516146b160e0860182614551565b506101008301518482036101008601526146cb82826145ac565b9150508091505092915050565b5f82825260208201905092915050565b5f6146f383856146d8565b93506147008385846134ef565b614709836135d3565b840190509392505050565b5f6040820190508181035f83015261472c8186614608565b905081810360208301526147418184866146e8565b9050949350505050565b61475481614243565b82525050565b5f60608201905061476d5f830186613c48565b61477a6020830185613dce565b614787604083018461474b565b949350505050565b5f6040820190506147a25f830185613c48565b6147af6020830184613c48565b9392505050565b5f6040820190506147c95f830185613c48565b6147d66020830184613f86565b9392505050565b5f6060820190506147f05f830186613c48565b6147fd6020830185613dce565b61480a6040830184613dce565b949350505050565b5f6040820190506148255f830185613f86565b6148326020830184613f86565b9392505050565b5f5ffd5b5f5ffd5b5f5f8585111561485457614853614839565b5b838611156148655761486461483d565b5b6001850283019150848603905094509492505050565b5f60608201905061488e5f830186613f86565b61489b6020830185613f86565b6148a86040830184613f86565b949350505050565b5f6060820190508181035f8301526148c88186614608565b90506148d76020830185613f86565b6148e46040830184613f86565b949350505050565b5f6148f6826143c6565b61490081856146d8565b93506149108185602086016143e0565b614919816135d3565b840191505092915050565b5f60c0820190506149375f830189613c48565b6149446020830188613f86565b6149516040830187613f86565b61495e6060830186613f86565b61496b6080830185613f86565b81810360a083015261497d81846148ec565b9050979650505050505050565b5f60608201905061499d5f830186613c48565b6149aa6020830185613f86565b81810360408301526149bc81846148ec565b9050949350505050565b5f6060820190508181035f8301526149de8186614608565b90506149ed6020830185613f86565b81810360408301526149ff81846148ec565b9050949350505050565b5f604082019050614a1c5f830185613cf4565b614a296020830184613dce565b9392505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614a6e600283614a30565b9150614a7982614a3a565b600282019050919050565b5f819050919050565b614a9e614a9982613952565b614a84565b82525050565b5f614aae82614a62565b9150614aba8285614a8d565b602082019150614aca8284614a8d565b6020820191508190509392505050565b5f604082019050614aed5f830185613dce565b8181036020830152614aff81846148ec565b90509392505050565b5f81519050614b168161395b565b92915050565b5f81519050614b2a81613706565b92915050565b5f60408284031215614b4557614b446135cf565b5b614b4f6040613641565b90505f614b5e84828501614b08565b5f830152506020614b7184828501614b1c565b60208301525092915050565b5f60408284031215614b9257614b91613542565b5b5f614b9f84828501614b30565b91505092915050565b604082015f820151614bbc5f850182614551565b506020820151614bcf60208501826143b7565b50505050565b5f604082019050614be85f830184614ba8565b92915050565b5f60a082019050614c015f830188613c48565b614c0e6020830187613c48565b614c1b6040830186613c48565b614c286060830185613f86565b614c356080830184613dce565b9695505050505050565b5f81905092915050565b614c5281613569565b82525050565b5f614c638383614c49565b60208301905092915050565b5f614c7982614560565b614c838185614c3f565b9350614c8e8361457a565b805f5b83811015614cbe578151614ca58882614c58565b9750614cb0836145a0565b925050600181019050614c91565b5085935050505092915050565b5f614cd68284614c6f565b915081905092915050565b5f60a082019050614cf45f830188613c48565b614d016020830187613c48565b614d0e6040830186613f86565b614d1b6060830185613f86565b614d286080830184613c48565b9695505050505050565b5f606082019050614d455f830186613c48565b614d526020830185613c48565b614d5f6040830184613c48565b949350505050565b614d708161365f565b82525050565b5f602082019050614d895f830184614d67565b92915050565b5f6060820190508181035f830152614da88186886146e8565b9050614db76020830185613f86565b614dc46040830184613f86565b95945050505050565b5f608082019050614de05f830187613c48565b614ded6020830186614d67565b614dfa6040830185613c48565b614e076060830184613c48565b95945050505050565b5f604082019050614e235f830186613c48565b8181036020830152614e368184866146e8565b9050949350505050565b5f81519050614e4e81613d79565b92915050565b5f60208284031215614e6957614e68613542565b5b5f614e7684828501614e40565b91505092915050565b5f606082019050614e925f830187613c48565b614e9f6020830186613dce565b8181036040830152614eb28184866146e8565b905095945050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f82015250565b5f614ef1601c83614a30565b9150614efc82614ebd565b601c82019050919050565b5f614f1182614ee5565b9150614f1d8284614a8d565b60208201915081905092915050565b5f6040820190508181035f830152614f448186614608565b90508181036020830152614f598184866146e8565b9050949350505050565b5f60208284031215614f7857614f77613542565b5b5f614f8584828501614b08565b91505092915050565b5f614f98826143c6565b614fa281856134e5565b9350614fb28185602086016143e0565b80840191505092915050565b5f614fc98285614f8e565b9150614fd58284614a8d565b6020820191508190509392505050565b7f53657175656e6365207369676e65723a0a0000000000000000000000000000005f82015250565b5f615019601183614a30565b915061502482614fe5565b601182019050919050565b5f8160601b9050919050565b5f6150458261502f565b9050919050565b5f6150568261503b565b9050919050565b61506e61506982613569565b61504c565b82525050565b5f819050919050565b61508e615089826136fd565b615074565b82525050565b5f61509e8261500d565b91506150aa828561505d565b6014820191506150ba828461507d565b6020820191508190509392505050565b7f53657175656e6365206e657374656420636f6e6669673a0a00000000000000005f82015250565b5f6150fe601883614a30565b9150615109826150ca565b601882019050919050565b5f61511e826150f2565b915061512a8286614a8d565b60208201915061513a828561507d565b60208201915061514a828461507d565b602082019150819050949350505050565b7f53657175656e636520737461746963206469676573743a0a00000000000000005f82015250565b5f61518f601883614a30565b915061519a8261515b565b601882019050919050565b5f6151af82615183565b91506151bb8284614a8d565b60208201915081905092915050565b7f53657175656e636520616e792061646472657373207375626469676573743a0a5f82015250565b5f6151fe602083614a30565b9150615209826151ca565b602082019050919050565b5f61521e826151f2565b915061522a8284614a8d565b60208201915081905092915050565b7f53657175656e63652073617069656e7420636f6e6669673a0a000000000000005f82015250565b5f61526d601983614a30565b915061527882615239565b601982019050919050565b5f61528d82615261565b9150615299828661505d565b6014820191506152a9828561507d565b6020820191506152b98284614a8d565b602082019150819050949350505050565b5f610100820190506152de5f83018b613c48565b6152eb602083018a613dce565b6152f86040830189613f86565b6153056060830188613c48565b6153126080830187613f86565b61531f60a0830186613fd5565b61532c60c0830185613fd5565b61533960e0830184613f86565b999850505050505050505056fea264697066735822122019b5533fc4cbee24a73438e1a10df64732fe25b8872932ba010c1d5c7babb5eb64736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/Wallet.sol/Wallet.json b/testchain/artifacts/wallet-contracts-v3/Wallet.sol/Wallet.json new file mode 100644 index 000000000..ff2437785 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/Wallet.sol/Wallet.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Wallet", + "sourceName": "src/Wallet.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122006810a8b042453f1e22e4ea22ad0c0938973f7afe38950b62340b5fae5cc7b6a64736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122006810a8b042453f1e22e4ea22ad0c0938973f7afe38950b62340b5fae5cc7b6a64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/passkeys/Passkeys.sol/Passkeys.json b/testchain/artifacts/wallet-contracts-v3/extensions/passkeys/Passkeys.sol/Passkeys.json new file mode 100644 index 000000000..d3cdbb3a7 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/passkeys/Passkeys.sol/Passkeys.json @@ -0,0 +1,93 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Passkeys", + "sourceName": "src/extensions/passkeys/Passkeys.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes", + "name": "authenticatorData", + "type": "bytes" + }, + { + "internalType": "string", + "name": "clientDataJSON", + "type": "string" + }, + { + "internalType": "uint256", + "name": "challengeIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "typeIndex", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "internalType": "struct WebAuthn.WebAuthnAuth", + "name": "_webAuthnAuth", + "type": "tuple" + }, + { + "internalType": "bool", + "name": "_requireUserVerification", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "_x", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_y", + "type": "bytes32" + } + ], + "name": "InvalidPasskeySignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_digest", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignatureCompact", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b50610be78061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063898bd92114610030575b600080fd5b61004361003e3660046107ba565b610055565b60405190815260200160405180910390f35b6000806000806000806100688888610100565b945094509450945094506100a08960405160200161008891815260200190565b60405160208183030381529060405285878686610492565b6100e757848484846040517f12a693e60000000000000000000000000000000000000000000000000000000081526004016100de949392919061089c565b60405180910390fd5b6100f3848484846105cc565b9998505050505050505050565b6040805160c081018252606080825260208201819052600092820183905281018290526080810182905260a0810182905290808080808787828161014657610146610942565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f200000000000000000000000000000000000000000000000000000000000000016600003610460577f010000000000000000000000000000000000000000000000000000000000000081161515945060ff600160f983901c8116810182169160fa84901c8216820181169160fb85901c8116810182169160fc86901c8216820116907f4000000000000000000000000000000000000000000000000000000000000000861615610225578c81013596506020015b60006102738e8e848992810135600884026101008190039190911c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600190921b9190910116939201919050565b8093508192505050600081830190508e8e8490839261029493929190610971565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d60000181905250809250505060006103328e8e848892810135600884026101008190039190911c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600190921b9190910116939201919050565b8093508192505050600081830190508e8e8490839261035393929190610971565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208e015291505060016008840290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e830135610100929092039190911c1683820160408d0191909152905060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e830135610100929092039190911c1682820160608d019190915290508c8101356020820160808d019190915290508c8101356020820160a08d019190915290508c8101356020820190995090508c81013597505050505050610487565b61046d876001818b610971565b81019061047a9190610abc565b9399509197509550935091505b509295509295909350565b60008060006104a388600180610613565b905060208601518051602082019150604088015160608901518451600d81017f226368616c6c656e6765223a220000000000000000000000000000000000000060981c87528484820110602282868901015160001a14168160138901208286890120141685846014011085851760801c107f2274797065223a22776562617574686e2e67657422000000000000000000000060581c8589015160581c14161698505080865250505087515189151560021b600117808160218c51015116146020831188161696505085156105a057602089510181810180516020600160208601856020868a8c60025afa60011b5afa51915295503d90506105a057fe5b50505082156105c1576105be8287608001518860a001518888610724565b92505b505095945050505050565b60008381526020839052604081208560006105f1828660009182526020526040902090565b9050610607838260009182526020526040902090565b98975050505050505050565b60608351801561071c576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f52602083018181018388602001018051600082525b60038a0199508951603f8160121c1651600053603f81600c1c1651600153603f8160061c1651600253603f81165160035350600051845260048401935082841061068f5790526020016040527f3d3d000000000000000000000000000000000000000000000000000000000000600384066002048083039190915260008615159091029182900352900382525b509392505050565b6000604051868152856020820152846040820152836060820152826080820152600080526020600060a0836101005afa503d6107845760203d60a0836dd01ea45f9efd5c54f037fa57ea1a5afa503d6107845763d0d5039b3d526004601cfd5b506000516001147f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8851110905095945050505050565b6000806000604084860312156107cf57600080fd5b83359250602084013567ffffffffffffffff8111156107ed57600080fd5b8401601f810186136107fe57600080fd5b803567ffffffffffffffff81111561081557600080fd5b86602082840101111561082757600080fd5b939660209190910195509293505050565b6000815180845260005b8181101561085e57602081850181015186830182015201610842565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b608081526000855160c060808401526108b9610140840182610838565b905060208701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808483030160a08501526108f48282610838565b604089015160c0860152606089015160e0860152608089015161010086015260a089015161012086015287151560208601529250610930915050565b60408201939093526060015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000808585111561098157600080fd5b8386111561098e57600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156109ed576109ed61099b565b60405290565b600082601f830112610a0457600080fd5b81356020830160008067ffffffffffffffff841115610a2557610a2561099b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610a7257610a7261099b565b604052838152905080828401871015610a8a57600080fd5b838360208301376000602085830101528094505050505092915050565b80358015158114610ab757600080fd5b919050565b600080600080600060a08688031215610ad457600080fd5b853567ffffffffffffffff811115610aeb57600080fd5b860160c08189031215610afd57600080fd5b610b056109ca565b813567ffffffffffffffff811115610b1c57600080fd5b610b288a8285016109f3565b825250602082013567ffffffffffffffff811115610b4557600080fd5b610b518a8285016109f3565b60208381019190915260408481013590840152606080850135908401526080808501359084015260a09384013593830193909352509550610b93908701610aa7565b9497949650505050604083013592606081013592608090910135915056fea2646970667358221220886b2877641f1cd8a61d649a52512fd474d058f0d4195e2fedd5058062c6efb464736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063898bd92114610030575b600080fd5b61004361003e3660046107ba565b610055565b60405190815260200160405180910390f35b6000806000806000806100688888610100565b945094509450945094506100a08960405160200161008891815260200190565b60405160208183030381529060405285878686610492565b6100e757848484846040517f12a693e60000000000000000000000000000000000000000000000000000000081526004016100de949392919061089c565b60405180910390fd5b6100f3848484846105cc565b9998505050505050505050565b6040805160c081018252606080825260208201819052600092820183905281018290526080810182905260a0810182905290808080808787828161014657610146610942565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f200000000000000000000000000000000000000000000000000000000000000016600003610460577f010000000000000000000000000000000000000000000000000000000000000081161515945060ff600160f983901c8116810182169160fa84901c8216820181169160fb85901c8116810182169160fc86901c8216820116907f4000000000000000000000000000000000000000000000000000000000000000861615610225578c81013596506020015b60006102738e8e848992810135600884026101008190039190911c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600190921b9190910116939201919050565b8093508192505050600081830190508e8e8490839261029493929190610971565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508d60000181905250809250505060006103328e8e848892810135600884026101008190039190911c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600190921b9190910116939201919050565b8093508192505050600081830190508e8e8490839261035393929190610971565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060208e015291505060016008840290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e830135610100929092039190911c1683820160408d0191909152905060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e830135610100929092039190911c1682820160608d019190915290508c8101356020820160808d019190915290508c8101356020820160a08d019190915290508c8101356020820190995090508c81013597505050505050610487565b61046d876001818b610971565b81019061047a9190610abc565b9399509197509550935091505b509295509295909350565b60008060006104a388600180610613565b905060208601518051602082019150604088015160608901518451600d81017f226368616c6c656e6765223a220000000000000000000000000000000000000060981c87528484820110602282868901015160001a14168160138901208286890120141685846014011085851760801c107f2274797065223a22776562617574686e2e67657422000000000000000000000060581c8589015160581c14161698505080865250505087515189151560021b600117808160218c51015116146020831188161696505085156105a057602089510181810180516020600160208601856020868a8c60025afa60011b5afa51915295503d90506105a057fe5b50505082156105c1576105be8287608001518860a001518888610724565b92505b505095945050505050565b60008381526020839052604081208560006105f1828660009182526020526040902090565b9050610607838260009182526020526040902090565b98975050505050505050565b60608351801561071c576003600282010460021b60405192507f4142434445464748494a4b4c4d4e4f505152535455565758595a616263646566601f526106708515027f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5f18603f52602083018181018388602001018051600082525b60038a0199508951603f8160121c1651600053603f81600c1c1651600153603f8160061c1651600253603f81165160035350600051845260048401935082841061068f5790526020016040527f3d3d000000000000000000000000000000000000000000000000000000000000600384066002048083039190915260008615159091029182900352900382525b509392505050565b6000604051868152856020820152846040820152836060820152826080820152600080526020600060a0836101005afa503d6107845760203d60a0836dd01ea45f9efd5c54f037fa57ea1a5afa503d6107845763d0d5039b3d526004601cfd5b506000516001147f7fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8851110905095945050505050565b6000806000604084860312156107cf57600080fd5b83359250602084013567ffffffffffffffff8111156107ed57600080fd5b8401601f810186136107fe57600080fd5b803567ffffffffffffffff81111561081557600080fd5b86602082840101111561082757600080fd5b939660209190910195509293505050565b6000815180845260005b8181101561085e57602081850181015186830182015201610842565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b608081526000855160c060808401526108b9610140840182610838565b905060208701517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808483030160a08501526108f48282610838565b604089015160c0860152606089015160e0860152608089015161010086015260a089015161012086015287151560208601529250610930915050565b60408201939093526060015292915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000808585111561098157600080fd5b8386111561098e57600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156109ed576109ed61099b565b60405290565b600082601f830112610a0457600080fd5b81356020830160008067ffffffffffffffff841115610a2557610a2561099b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff82111715610a7257610a7261099b565b604052838152905080828401871015610a8a57600080fd5b838360208301376000602085830101528094505050505092915050565b80358015158114610ab757600080fd5b919050565b600080600080600060a08688031215610ad457600080fd5b853567ffffffffffffffff811115610aeb57600080fd5b860160c08189031215610afd57600080fd5b610b056109ca565b813567ffffffffffffffff811115610b1c57600080fd5b610b288a8285016109f3565b825250602082013567ffffffffffffffff811115610b4557600080fd5b610b518a8285016109f3565b60208381019190915260408481013590840152606080850135908401526080808501359084015260a09384013593830193909352509550610b93908701610aa7565b9497949650505050604083013592606081013592608090910135915056fea2646970667358221220886b2877641f1cd8a61d649a52512fd474d058f0d4195e2fedd5058062c6efb464736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/recovery/Recovery.sol/Recovery.json b/testchain/artifacts/wallet-contracts-v3/extensions/recovery/Recovery.sol/Recovery.json new file mode 100644 index 000000000..a37a94a09 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/recovery/Recovery.sol/Recovery.json @@ -0,0 +1,537 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Recovery", + "sourceName": "src/extensions/recovery/Recovery.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + } + ], + "name": "AlreadyQueued", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + } + ], + "name": "QueueNotReady", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "NewQueuedPayload", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "queuePayload", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "queuedPayloadHashes", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_payloadHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignatureCompact", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + } + ], + "name": "recoveryPayloadHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "timestampForQueuedPayload", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + } + ], + "name": "totalQueuedPayloads", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b50611a208061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063b05f87db11610050578063b05f87db146100df578063d834bcbf146100f4578063ec08af331461010757600080fd5b80630e159f8014610077578063898bd921146100b9578063b00c8484146100cc575b600080fd5b6100a7610085366004610de3565b6000602081815293815260408082208552928152828120909352825290205481565b60405190815260200160405180910390f35b6100a76100c7366004610e69565b61014d565b6100a76100da366004610ece565b6101b0565b6100f26100ed366004610f1c565b61023f565b005b6100a7610102366004610de3565b6103eb565b6100a7610115366004610fad565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600080600061015e33878787610429565b91509150816101a7576040517f904689fc000000000000000000000000000000000000000000000000000000008152336004820152602481018790526044015b60405180910390fd5b95945050505050565b6000806101cc6101c66040850160208601610ff0565b85610679565b905060006101e16101dc85611342565b610745565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018490526042810182905290915060620160405160208183030381529060405280519060200120925050505b92915050565b61024c85858585856109cb565b61028c5784848484846040517f44b7a40500000000000000000000000000000000000000000000000000000000815260040161019e9594939291906116bd565b60006102a061029a85611342565b87610bcf565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352928152828220848352905220549091501561033a576040517f654c8bbf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152861660248201526044810182905260640161019e565b73ffffffffffffffffffffffffffffffffffffffff868116600081815260208181526040808320948a16808452948252808320868452825280832042908190558484526001808452828520878652845282852080549182018155855293839020909301869055805193845290830193909352818301849052606082015290517faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae9181900360800190a1505050505050565b6001602052826000526040600020602052816000526040600020818154811061041357600080fd5b9060005260206000200160009250925050505481565b60008060005b8381101561066f57600181019085013560f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016105955773ffffffffffffffffffffffffffffffffffffffff8816600090815260208181526040808320898601803560601c8086529184528285208c8652909352922054601f90940193601482013560e81c916017013560c01c9080158015906104cf5750818110155b80156104e45750826104e18242611856565b10155b156104ee57600197505b604080517f53657175656e6365207265636f76657279206c6561663a0a0000000000000000602080830191909152606087901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c8201869052606c80830186905283518084039091018152608c9092019092528051910120876105795780610588565b60008881526020829052604090205b975050505050505061042f565b600381036105c8576020820191860135836105b057806105bf565b60008481526020829052604090205b9350505061042f565b6004810361063a57600382019186013560e81c60006105e78285611869565b90506000806106088c8c8c8c8a9088926106039392919061187c565b610429565b9150915082955087806106185750815b975061062e878260009182526020526040902090565b9650505050505061042f565b6040517fb2505f7c0000000000000000000000000000000000000000000000000000000081526004810182905260240161019e565b5094509492505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d57fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6856106e957466106ec565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c00160405160208183030381529060405280519060200120905092915050565b60008082610100015160405160200161075e91906118a6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff166108215760006107af8460400151610bed565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c0016040516020818303038152906040528051906020012092505050919050565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016108b15760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016109215760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001610893565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd016109915760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001610893565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff909116600482015260240161019e565b6000806109d887866101b0565b905073ffffffffffffffffffffffffffffffffffffffff86163b15610ad8576040517f1626ba7e0000000000000000000000000000000000000000000000000000000081527f20c13b0b000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff881690631626ba7e90610a6f908590899089906004016118f2565b602060405180830381865afa158015610a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab0919061190c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506101a7565b600080610ae78587018761194e565b909250905060ff81901c7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166000610b2183601b611970565b604080516000808252602082018084528a905260ff84169282019290925260608101889052608081018590529192509060019060a0016020604051602081039080840390855afa158015610b79573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8e81169116149850505050505050505095945050505050565b600080610be0846020015184610c7e565b905060006101e185610745565b6000606060005b8351811015610c6f576000610c21858381518110610c1457610c14611989565b6020026020010151610cee565b90508281604051602001610c369291906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052925050600101610bf4565b50805160209091012092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856106e957466106ec565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c00151604051602001610d9d98979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b604051602081830303815290604052805190602001209050919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610dde57600080fd5b919050565b600080600060608486031215610df857600080fd5b610e0184610dba565b9250610e0f60208501610dba565b929592945050506040919091013590565b60008083601f840112610e3257600080fd5b50813567ffffffffffffffff811115610e4a57600080fd5b602083019150836020828501011115610e6257600080fd5b9250929050565b600080600060408486031215610e7e57600080fd5b83359250602084013567ffffffffffffffff811115610e9c57600080fd5b610ea886828701610e20565b9497909650939450505050565b60006101208284031215610ec857600080fd5b50919050565b60008060408385031215610ee157600080fd5b610eea83610dba565b9150602083013567ffffffffffffffff811115610f0657600080fd5b610f1285828601610eb5565b9150509250929050565b600080600080600060808688031215610f3457600080fd5b610f3d86610dba565b9450610f4b60208701610dba565b9350604086013567ffffffffffffffff811115610f6757600080fd5b610f7388828901610eb5565b935050606086013567ffffffffffffffff811115610f9057600080fd5b610f9c88828901610e20565b969995985093965092949392505050565b60008060408385031215610fc057600080fd5b610fc983610dba565b9150610fd760208401610dba565b90509250929050565b80358015158114610dde57600080fd5b60006020828403121561100257600080fd5b61100b82610fe0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561106457611064611012565b60405290565b604051610120810167ffffffffffffffff8111828210171561106457611064611012565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156110d5576110d5611012565b604052919050565b803560ff81168114610dde57600080fd5b600067ffffffffffffffff82111561110857611108611012565b5060051b60200190565b600082601f83011261112357600080fd5b813567ffffffffffffffff81111561113d5761113d611012565b61116e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161108e565b81815284602083860101111561118357600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126111b157600080fd5b81356111c46111bf826110ee565b61108e565b8082825260208201915060208360051b8601019250858311156111e657600080fd5b602085015b838110156112d357803567ffffffffffffffff81111561120a57600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561123e57600080fd5b611246611041565b61125260208301610dba565b815260408201356020820152606082013567ffffffffffffffff81111561127857600080fd5b6112878a602083860101611112565b604083015250608082013560608201526112a360a08301610fe0565b60808201526112b460c08301610fe0565b60a082015260e0919091013560c08201528352602092830192016111eb565b5095945050505050565b600082601f8301126112ee57600080fd5b81356112fc6111bf826110ee565b8082825260208201915060208360051b86010192508583111561131e57600080fd5b602085015b838110156112d35761133481610dba565b835260209283019201611323565b6000610120823603121561135557600080fd5b61135d61106a565b611366836110dd565b815261137460208401610fe0565b6020820152604083013567ffffffffffffffff81111561139357600080fd5b61139f368286016111a0565b604083015250606083810135908201526080808401359082015260a083013567ffffffffffffffff8111156113d357600080fd5b6113df36828601611112565b60a08301525060c0838101359082015260e0808401359082015261010083013567ffffffffffffffff81111561141457600080fd5b611420368286016112dd565b6101008301525092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261146257600080fd5b830160208101925035905067ffffffffffffffff81111561148257600080fd5b8060051b3603821315610e6257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126114c957600080fd5b830160208101925035905067ffffffffffffffff8111156114e957600080fd5b803603821315610e6257600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008383855260208501945060208460051b8201018360005b8681101561165c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084840301885281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218736030181126115bb57600080fd5b860173ffffffffffffffffffffffffffffffffffffffff6115db82610dba565b168452602081810135908501526115f56040820182611494565b60e0604087015261160a60e0870182846114f8565b606084810135908801529150611624905060808301610fe0565b1515608086015261163760a08301610fe0565b151560a086015260c0918201359190940152602097880197919091019060010161155a565b50909695505050505050565b81835260208301925060008160005b848110156116b35773ffffffffffffffffffffffffffffffffffffffff61169d83610dba565b1686526020958601959190910190600101611677565b5093949350505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201526080604082015261171060808201611709866110dd565b60ff169052565b600061171e60208601610fe0565b151560a0830152611732604086018661142d565b61012060c08501526117496101a085018284611541565b606088013560e08601526080880135610100860152915061176f905060a0870187611494565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80858403016101208601526117a58382846114f8565b60c089013561014087015260e089013561016087015292506117ce91505061010087018761142d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8085840301610180860152611804838284611668565b92505050828103606084015261181b8185876114f8565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561023957610239611827565b8082018082111561023957610239611827565b6000808585111561188c57600080fd5b8386111561189957600080fd5b5050820193919092039150565b8151600090829060208501835b828110156118e757815173ffffffffffffffffffffffffffffffffffffffff168452602093840193909101906001016118b3565b509195945050505050565b8381526040602082015260006101a76040830184866114f8565b60006020828403121561191e57600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b6000806040838503121561196157600080fd5b50508035926020909101359150565b60ff818116838216019081111561023957610239611827565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000835160005b818110156119d957602081870181015185830152016119bf565b50919091019182525060200191905056fea2646970667358221220fa5bdf6b1345165d4f08a1576f8d10f987ed0e1d41f56b38d2a23a240623d64364736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063b05f87db11610050578063b05f87db146100df578063d834bcbf146100f4578063ec08af331461010757600080fd5b80630e159f8014610077578063898bd921146100b9578063b00c8484146100cc575b600080fd5b6100a7610085366004610de3565b6000602081815293815260408082208552928152828120909352825290205481565b60405190815260200160405180910390f35b6100a76100c7366004610e69565b61014d565b6100a76100da366004610ece565b6101b0565b6100f26100ed366004610f1c565b61023f565b005b6100a7610102366004610de3565b6103eb565b6100a7610115366004610fad565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b600080600061015e33878787610429565b91509150816101a7576040517f904689fc000000000000000000000000000000000000000000000000000000008152336004820152602481018790526044015b60405180910390fd5b95945050505050565b6000806101cc6101c66040850160208601610ff0565b85610679565b905060006101e16101dc85611342565b610745565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281018490526042810182905290915060620160405160208183030381529060405280519060200120925050505b92915050565b61024c85858585856109cb565b61028c5784848484846040517f44b7a40500000000000000000000000000000000000000000000000000000000815260040161019e9594939291906116bd565b60006102a061029a85611342565b87610bcf565b73ffffffffffffffffffffffffffffffffffffffff808816600090815260208181526040808320938a168352928152828220848352905220549091501561033a576040517f654c8bbf00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8088166004830152861660248201526044810182905260640161019e565b73ffffffffffffffffffffffffffffffffffffffff868116600081815260208181526040808320948a16808452948252808320868452825280832042908190558484526001808452828520878652845282852080549182018155855293839020909301869055805193845290830193909352818301849052606082015290517faeb5575092e25ccd826d5de3515c096028bb338c1f304db40dc831c3746ee0ae9181900360800190a1505050505050565b6001602052826000526040600020602052816000526040600020818154811061041357600080fd5b9060005260206000200160009250925050505481565b60008060005b8381101561066f57600181019085013560f81c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81016105955773ffffffffffffffffffffffffffffffffffffffff8816600090815260208181526040808320898601803560601c8086529184528285208c8652909352922054601f90940193601482013560e81c916017013560c01c9080158015906104cf5750818110155b80156104e45750826104e18242611856565b10155b156104ee57600197505b604080517f53657175656e6365207265636f76657279206c6561663a0a0000000000000000602080830191909152606087901b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166038830152604c8201869052606c80830186905283518084039091018152608c9092019092528051910120876105795780610588565b60008881526020829052604090205b975050505050505061042f565b600381036105c8576020820191860135836105b057806105bf565b60008481526020829052604090205b9350505061042f565b6004810361063a57600382019186013560e81c60006105e78285611869565b90506000806106088c8c8c8c8a9088926106039392919061187c565b610429565b9150915082955087806106185750815b975061062e878260009182526020526040902090565b9650505050505061042f565b6040517fb2505f7c0000000000000000000000000000000000000000000000000000000081526004810182905260240161019e565b5094509492505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7fd50a220b5983c5d6e86926072ffa8a3197ae49602ffc9dd0e60d62d561a2e1d57fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6856106e957466106ec565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c00160405160208183030381529060405280519060200120905092915050565b60008082610100015160405160200161075e91906118a6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff166108215760006107af8460400151610bed565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c0016040516020818303038152906040528051906020012092505050919050565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016108b15760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016109215760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001610893565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd016109915760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001610893565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff909116600482015260240161019e565b6000806109d887866101b0565b905073ffffffffffffffffffffffffffffffffffffffff86163b15610ad8576040517f1626ba7e0000000000000000000000000000000000000000000000000000000081527f20c13b0b000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff881690631626ba7e90610a6f908590899089906004016118f2565b602060405180830381865afa158015610a8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab0919061190c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506101a7565b600080610ae78587018761194e565b909250905060ff81901c7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166000610b2183601b611970565b604080516000808252602082018084528a905260ff84169282019290925260608101889052608081018590529192509060019060a0016020604051602081039080840390855afa158015610b79573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff8e81169116149850505050505050505095945050505050565b600080610be0846020015184610c7e565b905060006101e185610745565b6000606060005b8351811015610c6f576000610c21858381518110610c1457610c14611989565b6020026020010151610cee565b90508281604051602001610c369291906119b8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052925050600101610bf4565b50805160209091012092915050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de856106e957466106ec565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c00151604051602001610d9d98979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b604051602081830303815290604052805190602001209050919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610dde57600080fd5b919050565b600080600060608486031215610df857600080fd5b610e0184610dba565b9250610e0f60208501610dba565b929592945050506040919091013590565b60008083601f840112610e3257600080fd5b50813567ffffffffffffffff811115610e4a57600080fd5b602083019150836020828501011115610e6257600080fd5b9250929050565b600080600060408486031215610e7e57600080fd5b83359250602084013567ffffffffffffffff811115610e9c57600080fd5b610ea886828701610e20565b9497909650939450505050565b60006101208284031215610ec857600080fd5b50919050565b60008060408385031215610ee157600080fd5b610eea83610dba565b9150602083013567ffffffffffffffff811115610f0657600080fd5b610f1285828601610eb5565b9150509250929050565b600080600080600060808688031215610f3457600080fd5b610f3d86610dba565b9450610f4b60208701610dba565b9350604086013567ffffffffffffffff811115610f6757600080fd5b610f7388828901610eb5565b935050606086013567ffffffffffffffff811115610f9057600080fd5b610f9c88828901610e20565b969995985093965092949392505050565b60008060408385031215610fc057600080fd5b610fc983610dba565b9150610fd760208401610dba565b90509250929050565b80358015158114610dde57600080fd5b60006020828403121561100257600080fd5b61100b82610fe0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561106457611064611012565b60405290565b604051610120810167ffffffffffffffff8111828210171561106457611064611012565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156110d5576110d5611012565b604052919050565b803560ff81168114610dde57600080fd5b600067ffffffffffffffff82111561110857611108611012565b5060051b60200190565b600082601f83011261112357600080fd5b813567ffffffffffffffff81111561113d5761113d611012565b61116e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161108e565b81815284602083860101111561118357600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126111b157600080fd5b81356111c46111bf826110ee565b61108e565b8082825260208201915060208360051b8601019250858311156111e657600080fd5b602085015b838110156112d357803567ffffffffffffffff81111561120a57600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561123e57600080fd5b611246611041565b61125260208301610dba565b815260408201356020820152606082013567ffffffffffffffff81111561127857600080fd5b6112878a602083860101611112565b604083015250608082013560608201526112a360a08301610fe0565b60808201526112b460c08301610fe0565b60a082015260e0919091013560c08201528352602092830192016111eb565b5095945050505050565b600082601f8301126112ee57600080fd5b81356112fc6111bf826110ee565b8082825260208201915060208360051b86010192508583111561131e57600080fd5b602085015b838110156112d35761133481610dba565b835260209283019201611323565b6000610120823603121561135557600080fd5b61135d61106a565b611366836110dd565b815261137460208401610fe0565b6020820152604083013567ffffffffffffffff81111561139357600080fd5b61139f368286016111a0565b604083015250606083810135908201526080808401359082015260a083013567ffffffffffffffff8111156113d357600080fd5b6113df36828601611112565b60a08301525060c0838101359082015260e0808401359082015261010083013567ffffffffffffffff81111561141457600080fd5b611420368286016112dd565b6101008301525092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261146257600080fd5b830160208101925035905067ffffffffffffffff81111561148257600080fd5b8060051b3603821315610e6257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126114c957600080fd5b830160208101925035905067ffffffffffffffff8111156114e957600080fd5b803603821315610e6257600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008383855260208501945060208460051b8201018360005b8681101561165c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084840301885281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff218736030181126115bb57600080fd5b860173ffffffffffffffffffffffffffffffffffffffff6115db82610dba565b168452602081810135908501526115f56040820182611494565b60e0604087015261160a60e0870182846114f8565b606084810135908801529150611624905060808301610fe0565b1515608086015261163760a08301610fe0565b151560a086015260c0918201359190940152602097880197919091019060010161155a565b50909695505050505050565b81835260208301925060008160005b848110156116b35773ffffffffffffffffffffffffffffffffffffffff61169d83610dba565b1686526020958601959190910190600101611677565b5093949350505050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff851660208201526080604082015261171060808201611709866110dd565b60ff169052565b600061171e60208601610fe0565b151560a0830152611732604086018661142d565b61012060c08501526117496101a085018284611541565b606088013560e08601526080880135610100860152915061176f905060a0870187611494565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80858403016101208601526117a58382846114f8565b60c089013561014087015260e089013561016087015292506117ce91505061010087018761142d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8085840301610180860152611804838284611668565b92505050828103606084015261181b8185876114f8565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561023957610239611827565b8082018082111561023957610239611827565b6000808585111561188c57600080fd5b8386111561189957600080fd5b5050820193919092039150565b8151600090829060208501835b828110156118e757815173ffffffffffffffffffffffffffffffffffffffff168452602093840193909101906001016118b3565b509195945050505050565b8381526040602082015260006101a76040830184866114f8565b60006020828403121561191e57600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461100b57600080fd5b6000806040838503121561196157600080fd5b50508035926020909101359150565b60ff818116838216019081111561023957610239611827565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000835160005b818110156119d957602081870181015185830152016119bf565b50919091019182525060200191905056fea2646970667358221220fa5bdf6b1345165d4f08a1576f8d10f987ed0e1d41f56b38d2a23a240623d64364736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionErrors.sol/SessionErrors.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionErrors.sol/SessionErrors.json new file mode 100644 index 000000000..077e8b6e5 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionErrors.sol/SessionErrors.json @@ -0,0 +1,105 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SessionErrors", + "sourceName": "src/extensions/sessions/SessionErrors.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "BlacklistedAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestation", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBlacklist", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidDelegateCall", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidIdentitySigner", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidImplicitResult", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidLimitUsageIncrement", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "flag", + "type": "uint256" + } + ], + "name": "InvalidNodeType", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPermission", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSelfCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "invalidSigner", + "type": "address" + } + ], + "name": "InvalidSessionSigner", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidValue", + "type": "error" + }, + { + "inputs": [], + "name": "MissingPermission", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "SessionExpired", + "type": "error" + } + ], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ca0584545d97da73be765afb80b3ec759a7113a046de85b2d773bba83475a2c164736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ca0584545d97da73be765afb80b3ec759a7113a046de85b2d773bba83475a2c164736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionManager.sol/SessionManager.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionManager.sol/SessionManager.json new file mode 100644 index 000000000..2bedf7e67 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionManager.sol/SessionManager.json @@ -0,0 +1,448 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SessionManager", + "sourceName": "src/extensions/sessions/SessionManager.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + } + ], + "name": "BlacklistedAddress", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidAttestation", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidBlacklist", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidCallsLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidDelegateCall", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidIdentitySigner", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidImplicitResult", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidLimitUsageIncrement", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "flag", + "type": "uint256" + } + ], + "name": "InvalidNodeType", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPayloadKind", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPermission", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidSelfCall", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "invalidSigner", + "type": "address" + } + ], + "name": "InvalidSessionSigner", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidValue", + "type": "error" + }, + { + "inputs": [], + "name": "MissingPermission", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "name": "SessionExpired", + "type": "error" + }, + { + "inputs": [], + "name": "VALUE_TRACKING_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + } + ], + "name": "getLimitUsage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "limits", + "type": "tuple[]" + } + ], + "name": "incrementUsageLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "encodedSignature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "cumulative", + "type": "bool" + }, + { + "internalType": "enum ParameterOperation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "value", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mask", + "type": "bytes32" + } + ], + "internalType": "struct ParameterRule[]", + "name": "rules", + "type": "tuple[]" + } + ], + "internalType": "struct Permission", + "name": "permission", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call", + "name": "call", + "type": "tuple" + }, + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "usageLimits", + "type": "tuple[]" + } + ], + "name": "validatePermission", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "newUsageLimits", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b50613ca38061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063313dade711610050578063313dade71461010157806342de141814610122578063f916f3b21461013757600080fd5b806301ffc9a71461007757806313792a4a1461009f57806323b3713e146100c0575b600080fd5b61008a610085366004612c87565b610177565b60405190151581526020015b60405180910390f35b6100b26100ad366004612cd0565b6101d3565b604051908152602001610096565b6100b26100ce366004612d9f565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b61011461010f366004612f95565b61074d565b604051610096929190613194565b6101356101303660046131b7565b610b4b565b005b61015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f13792a4a0000000000000000000000000000000000000000000000000000000014806101cd57506101cd82610c78565b92915050565b6000806101e3602086018661322e565b60ff161461021d576040517f7205212000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61022a6040850185613251565b9050600003610265576040517f542f0af500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610272858585610d10565b90503360006102846040880188613251565b905067ffffffffffffffff81111561029e5761029e612dc9565b60405190808252806020026020018201604052801561030957816020015b6102f66040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b8152602001906001900390816102bc5790505b50905060005b61031c6040890189613251565b90508110156105b0573661033360408a018a613251565b83818110610343576103436132b9565b905060200281019061035591906132e8565b905061036760a0820160808301613326565b1561039e576040517faa25f2ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856080015183815181106103b6576103b66132b9565b602002602001015190508060000151156103e8576103e38286836020015184606001518a6040015161126f565b6105a6565b6104226040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b60005b855181101561056857600073ffffffffffffffffffffffffffffffffffffffff16868281518110610458576104586132b9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16036104eb5760208381015173ffffffffffffffffffffffffffffffffffffffff168352604080516000808252928101909152906104d9565b60408051808201909152600080825260208201528152602001906001900390816104b25790505b50602083015260006040830152610568565b826020015173ffffffffffffffffffffffffffffffffffffffff16868281518110610518576105186132b9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff160361056057858181518110610551576105516132b9565b60200260200101519150610568565b600101610425565b6105838c868986602001518c6060015188604001518861150c565b915081868281518110610598576105986132b9565b602002602001018190525050505b505060010161030f565b506000815167ffffffffffffffff8111156105cd576105cd612dc9565b60405190808252806020026020018201604052801561063857816020015b6106256040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b8152602001906001900390816105eb5790505b5090506000805b83518110156106e557600084828151811061065c5761065c6132b9565b60200260200101516020015151118061069257506000848281518110610684576106846132b9565b602002602001015160400151115b156106dd578381815181106106a9576106a96132b9565b60200260200101518383815181106106c3576106c36132b9565b602002602001018190525081806106d990613370565b9250505b60010161063f565b50808252366106f760408b018b613251565b600161070660408e018e613251565b6107119291506133a8565b818110610720576107206132b9565b905060200281019061073291906132e8565b905061073e818461195f565b50509251979650505050505050565b6000606061075e60208701876133bb565b73ffffffffffffffffffffffffffffffffffffffff16876000015173ffffffffffffffffffffffffffffffffffffffff161461079f57506000905081610b41565b86602001515183516107b191906133d6565b67ffffffffffffffff8111156107c9576107c9612dc9565b60405190808252806020026020018201604052801561080e57816020015b60408051808201909152600080825260208201528152602001906001900390816107e75790505b50905060005b835181101561085c5783818151811061082f5761082f6132b9565b6020026020010151828281518110610849576108496132b9565b6020908102919091010152600101610814565b50825160005b886020015151811015610b3957600089602001518281518110610887576108876132b9565b6020026020010151905060006108b182606001518b80604001906108ab91906133e9565b50013590565b608083015183519116915015610a485760405181906000906108db908b908f90889060200161347d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012083830190925260008084529083018190529092509060005b89518110156109f5576000801b8a8281518110610948576109486132b9565b602002602001015160000151036109a157604051806040016040528085815260200160008152509150818a8281518110610984576109846132b9565b602090810291909101015261099a8160016133d6565b98506109f5565b838a82815181106109b4576109b46132b9565b602002602001015160000151036109ed578981815181106109d7576109d76132b9565b60200260200101519150816020015192506109f5565b600101610929565b5081600003610a305773ffffffffffffffffffffffffffffffffffffffff8d1660009081526020818152604080832086845290915290205491505b610a3a82856133d6565b602090910181905293505050505b600082602001516003811115610a6057610a6061344e565b03610a855781604001518114610a80576000879550955050505050610b41565b610b2f565b600382602001516003811115610a9d57610a9d61344e565b03610abe576040820151811115610a80576000879550955050505050610b41565b600182602001516003811115610ad657610ad661344e565b03610af65781604001518103610a80576000879550955050505050610b41565b600282602001516003811115610b0e57610b0e61344e565b03610b2f576040820151811015610b2f576000879550955050505050610b41565b5050600101610862565b508152600191505b9550959350505050565b3360005b82811015610c7257610baa82858584818110610b6d57610b6d6132b9565b9050604002016000013573ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b848483818110610bbc57610bbc6132b9565b905060400201602001351015610bfd576040517e2a700a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6a82858584818110610c1357610c136132b9565b90506040020160000135868685818110610c2f57610c2f6132b9565b9050604002016020013573ffffffffffffffffffffffffffffffffffffffff9092166000908152602081815260408083209383529290522055565b600101610b4f565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f13792a4a0000000000000000000000000000000000000000000000000000000014806101cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f42de1418000000000000000000000000000000000000000000000000000000001492915050565b6040805160a0810182526000808252602082018190526060928201839052828201839052608082019290925290600390843560e81c610d67868487610d5585836133d6565b92610d6293929190613581565b611d5a565b9094509150610d7681846133d6565b602085015190935073ffffffffffffffffffffffffffffffffffffffff16610dca576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600182019160609086013560f81c8067ffffffffffffffff811115610df257610df2612dc9565b604051908082528060200260200182016040528015610e6657816020015b610e536040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b815260200190600190039081610e105790505b50915060005b8160ff16811015610fe557610eba6040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b610ec589898861236b565b9650905060008080610ed88c8c8b612482565b9b50919450925090506000610eec856124d5565b6040805160008082526020820180845284905260ff86169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f44573d6000803e3d6000fd5b5050506020604051035190508b6020015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505080848381518110610fd157610fd16132b9565b602090810291909101015250600101610e6c565b5060008160ff16118015610ff7575082155b1561102e576040517feb62520400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600061103e6040890189613251565b905090508067ffffffffffffffff81111561105b5761105b612dc9565b60405190808252806020026020018201604052801561109457816020015b611081612c23565b8152602001906001900390816110795790505b50608086015260005b81811015611263576110ad612c23565b8589013560f81c608081161580158352600190970196611131578451607f8216908110611106576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b858160ff168151811061111b5761111b6132b9565b602002602001015183606001819052505061113b565b60ff811660408301525b506000808061114b8c8c8b612482565b809c508194508295508396505050505060006111988e80604001906111709190613251565b88818110611180576111806132b9565b905060200281019061119291906132e8565b8f6124ee565b60408051600081526020810180835283905260ff851691810191909152606081018690526080810185905290915060019060a0016020604051602081039080840390855afa1580156111ee573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff16602087015250505050608088015180518392508490811061124f5761124f6132b9565b60209081029190910101525060010161109d565b50505050509392505050565b815173ffffffffffffffffffffffffffffffffffffffff8481169116146112df576040517fc1e84ed600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b6112ef60a0860160808701613326565b15611326576040517faa25f2ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113308382612566565b1561137f576040517fd33f19e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016112d6565b61139561138f60208701876133bb565b82612566565b156113f2576113a760208601866133bb565b6040517fd33f19e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016112d6565b60208501351561142e576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143d60208701876133bb565b73ffffffffffffffffffffffffffffffffffffffff1663c58ab92d8685896040518463ffffffff1660e01b81526004016114799392919061374c565b602060405180830381865afa158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061384b565b905060006114c8848761266f565b9050808214611503576040517f0881ad5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b6115466040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b6115876040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001606081525090565b60005b855181101561160c578673ffffffffffffffffffffffffffffffffffffffff168682815181106115bc576115bc6132b9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1603611604578581815181106115f5576115f56132b9565b6020026020010151915061160c565b60010161158a565b50805173ffffffffffffffffffffffffffffffffffffffff16611673576040517fc1e84ed600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024016112d6565b6040810151158015906116895750806040015142115b156116c85780604001516040517fb1bbfdd50000000000000000000000000000000000000000000000000000000081526004016112d691815260200190565b366116d660408b018b613251565b8a8181106116e6576116e66132b9565b90506020028101906116f891906132e8565b905061170a60a0820160808301613326565b15611741576040517faa25f2ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061174f60208301836133bb565b73ffffffffffffffffffffffffffffffffffffffff160361182a57600061177960408301836133e9565b61178891600491600091613581565b61179191613864565b90506000826020013511806117e857507fffffffff0000000000000000000000000000000000000000000000000000000081167f42de14180000000000000000000000000000000000000000000000000000000014155b1561181f576040517f540733ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b849350505050611954565b8160600151518560ff161061186b576040517f3f904dc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082606001518660ff1681518110611886576118866132b9565b602002602001015190506000806118a483858d8d8b6020015161074d565b91509150816118df576040517f868a64de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808801829052840135156119095783602001358760400181815161190591906133d6565b9052505b84602001518760400151111561194b576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86955050505050505b979650505050505050565b805115611d56573061197460208401846133bb565b73ffffffffffffffffffffffffffffffffffffffff1614158061199c575060c0820135600114155b156119d2576040517e2a700a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8251811015611a47578281815181106119f1576119f16132b9565b6020026020010151602001515182611a0991906133d6565b91506000838281518110611a1f57611a1f6132b9565b6020026020010151604001511115611a3f5781611a3b81613370565b9250505b6001016119d6565b5060008167ffffffffffffffff811115611a6357611a63612dc9565b604051908082528060200260200182016040528015611aa857816020015b6040805180820190915260008082526020820152815260200190600190039081611a815790505b5090506000805b8451811015611c4f5760005b858281518110611acd57611acd6132b9565b60200260200101516020015151811015611b4957858281518110611af357611af36132b9565b6020026020010151602001518181518110611b1057611b106132b9565b6020026020010151848480611b2490613370565b955081518110611b3657611b366132b9565b6020908102919091010152600101611abb565b506000858281518110611b5e57611b5e6132b9565b6020026020010151604001511115611c47576040518060400160405280868381518110611b8d57611b8d6132b9565b60200260200101516000015173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604051602001611be192919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604051602081830303815290604052805190602001208152602001868381518110611c0e57611c0e6132b9565b602002602001015160400151815250838380611c2990613370565b945081518110611c3b57611c3b6132b9565b60200260200101819052505b600101611aaf565b5060006342de141860e01b83604051602401611c6b91906138ca565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093178352815190922090925090600090611cff908901896133e9565b604051611d0d9291906138dd565b60405180910390209050818114611d4f576040517e2a700a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505b5050565b6040805160a08101825260008082526020820152606091810182905281810182905260808101919091526000808080611d9460568761391c565b90508067ffffffffffffffff811115611daf57611daf612dc9565b604051908082528060200260200182016040528015611e2157816020015b611e0e6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001606081525090565b815260200190600190039081611dcd5790505b506060860152505b8482101561235857600182019186013560f881901c9060fc1c80611f2f57611e886040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001606081525090565b888501803560601c8252601481013560208301526034013560408201526054850194611eb58a8a8861270d565b606084019190915295506000611ed5611ed088848d8f613581565b6127cd565b8951909150611ee45780611ef5565b885160009081526020829052604090205b8952506060880151829086611f0981613370565b975081518110611f1b57611f1b6132b9565b602002602001018190525050505050611e29565b60018103611f68578551602085019489013590611f4c5780611f5d565b865160009081526020829052604090205b875250611e29915050565b6002810361215157600f8216848101946001600890920291821b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01908a0135610100929092039190911c166000611fc082876133d6565b9050600080611fda8c8c8a908692610d6293929190613581565b91509150829750801561202e57881561201f576040517feb62520400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080830151908b0152600198505b602082015173ffffffffffffffffffffffffffffffffffffffff16156120c15760208a015173ffffffffffffffffffffffffffffffffffffffff16156120a0576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208083015173ffffffffffffffffffffffffffffffffffffffff16908b01525b60005b82606001515181101561212457826060015181815181106120e7576120e76132b9565b60200260200101518b6060015189806120ff90613370565b9a5081518110612111576121116132b9565b60209081029190910101526001016120c4565b508951612132578151612143565b895182516000918252602052604090205b8a5250611e29945050505050565b6003810361229a578415612191576040517feb62520400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019450600f808316908190036121af5750600284019388013560f01c5b848167ffffffffffffffff8111156121c9576121c9612dc9565b6040519080825280602002602001820160405280156121f2578160200160208202803683370190505b50604089015260005b8281101561225657868b013560601c601488018a604001518381518110612224576122246132b9565b73ffffffffffffffffffffffffffffffffffffffff9093166020938402919091019092019190915296506001016121fb565b50600061226d61226888848d8f613581565b6127e4565b895190915061227c578061228d565b885160009081526020829052604090205b895250611e299350505050565b6004810361232357602086015173ffffffffffffffffffffffffffffffffffffffff16156122f4576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8784013560601c60208701819052601490940193600090612314906127fc565b8751909150611f4c5780611f5d565b6040517f0ad99790000000000000000000000000000000000000000000000000000000008152600481018290526024016112d6565b60608401805191825252505b9250929050565b6123ae6040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b8382018035606090811c83527fffffffff00000000000000000000000000000000000000000000000000000000601483013516602084015260188201356040840152603882013590830152605b8301906058013560e81c85828661241284836133d6565b9261241f93929190613581565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050608084015261246281836133d6565b915061246f868684612875565b60a0850191909152915050935093915050565b828101803590602001357f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811690600090604085019060ff81901c6124c881601b613930565b9350505093509350935093565b60006124e0826128f5565b805190602001209050919050565b60006125006040830160208401613326565b61250a574661250d565b60005b60608301356080840135612528612523876139d7565b61294f565b6040805160208101959095528401929092526060830152608082015260a0015b60405160208183030381529060405280519060200120905092915050565b6000806000905060006001845161257d9190613a6f565b90505b80821361266457600060026125958484613a6f565b61259f9190613a8f565b6125a99084613af7565b905060008582815181106125bf576125bf6132b9565b602002602001015190508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126095760019450505050506101cd565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16101561264f57612648826001613af7565b935061265d565b61265a600183613a6f565b92505b5050612580565b506000949350505050565b6040517f616363657074496d706c696369745265717565737400000000000000000000006020820152600090603501604051602081830303815290604052805190602001208284606001518560400151604051602001612548949392919093845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208401526034830152605482015260740190565b600181019060609060009085013560f81c8067ffffffffffffffff81111561273757612737612dc9565b60405190808252806020026020018201604052801561277d57816020015b6040805180820190915260008152606060208201528152602001906001900390816127555790505b50925060005b818110156127c0576127968787876129fe565b8583815181106127a8576127a86132b9565b60209081029190910101919091529450600101612783565b5083915050935093915050565b600080838360405160200161254893929190613b1f565b60006003838360405160200161254893929190613b1f565b6040517f040000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660218201526000906035015b604051602081830303815290604052805190602001209050919050565b604080516020810190915260608152600382018483013560e81c85828661289c84836133d6565b926128a993929190613581565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908452506128ea81836133d6565b915050935093915050565b6060816000015182602001518360400151846060015185608001515186608001516129238860a00151612c07565b6040516020016129399796959493929190613b5e565b6040516020818303038152906040529050919050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161285898979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b60408051808201909152606060208201819052848301803590911c82526015909201916000906014013560f81c8067ffffffffffffffff811115612a4457612a44612dc9565b604051908082528060200260200182016040528015612abb57816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612a625790505b50602084015260005b818110156127c057602084015180516001808801978a013560f81c9290831615159184908110612af657612af66132b9565b60209081029190910101519015159052607f600182901c166003811115612b1f57612b1f61344e565b85602001518381518110612b3557612b356132b9565b6020026020010151602001906003811115612b5257612b5261344e565b90816003811115612b6557612b6561344e565b905250858801356020870186602001518481518110612b8657612b866132b9565b6020908102919091018101516040019290925296508887013590870186602001518481518110612bb857612bb86132b9565b6020908102919091018101516060019290925296508887013590870186602001518481518110612bea57612bea6132b9565b602090810291909101015160800191909152955050600101612ac4565b805180516040516060926129399291602001613c22565b905290565b604080516080810182526000808252602082018190529181019190915260608101612c1e6040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b600060208284031215612c9957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612cc957600080fd5b9392505050565b600080600060408486031215612ce557600080fd5b833567ffffffffffffffff811115612cfc57600080fd5b84016101208187031215612d0f57600080fd5b9250602084013567ffffffffffffffff811115612d2b57600080fd5b8401601f81018613612d3c57600080fd5b803567ffffffffffffffff811115612d5357600080fd5b866020828401011115612d6557600080fd5b939660209190910195509293505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d9a57600080fd5b919050565b60008060408385031215612db257600080fd5b612dbb83612d76565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612e1b57612e1b612dc9565b60405290565b60405160a0810167ffffffffffffffff81118282101715612e1b57612e1b612dc9565b60405160e0810167ffffffffffffffff81118282101715612e1b57612e1b612dc9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612eae57612eae612dc9565b604052919050565b600067ffffffffffffffff821115612ed057612ed0612dc9565b5060051b60200190565b80358015158114612d9a57600080fd5b600060e08284031215612efc57600080fd5b50919050565b600082601f830112612f1357600080fd5b8135612f26612f2182612eb6565b612e67565b8082825260208201915060208360061b860101925085831115612f4857600080fd5b602085015b83811015612f8b5760408188031215612f6557600080fd5b612f6d612df8565b81358152602080830135818301529084529290920191604001612f4d565b5095945050505050565b600080600080600060a08688031215612fad57600080fd5b853567ffffffffffffffff811115612fc457600080fd5b860160408189031215612fd657600080fd5b612fde612df8565b612fe782612d76565b8152602082013567ffffffffffffffff81111561300357600080fd5b80830192505088601f83011261301857600080fd5b8135613026612f2182612eb6565b80828252602082019150602060a0840286010192508b83111561304857600080fd5b6020850194505b828510156130c65760a0858d03121561306757600080fd5b61306f612e21565b61307886612eda565b815260208601356004811061308c57600080fd5b60208281019190915260408781013590830152606080880135908301526080808801359083015290835260a090950194919091019061304f565b8060208501525050508096505050602086013567ffffffffffffffff8111156130ee57600080fd5b6130fa88828901612eea565b94505061310960408701612d76565b925061311760608701612d76565b9150608086013567ffffffffffffffff81111561313357600080fd5b61313f88828901612f02565b9150509295509295909350565b600081518084526020840193506020830160005b8281101561318a578151805187526020908101518188015260409096019590910190600101613160565b5093949350505050565b82151581526040602082015260006131af604083018461314c565b949350505050565b600080602083850312156131ca57600080fd5b823567ffffffffffffffff8111156131e157600080fd5b8301601f810185136131f257600080fd5b803567ffffffffffffffff81111561320957600080fd5b8560208260061b840101111561321e57600080fd5b6020919091019590945092505050565b60006020828403121561324057600080fd5b813560ff81168114612cc957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261328657600080fd5b83018035915067ffffffffffffffff8211156132a157600080fd5b6020019150600581901b360382131561236457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2183360301811261331c57600080fd5b9190910192915050565b60006020828403121561333857600080fd5b612cc982612eda565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133a1576133a1613341565b5060010190565b818103818111156101cd576101cd613341565b6000602082840312156133cd57600080fd5b612cc982612d76565b808201808211156101cd576101cd613341565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261341e57600080fd5b83018035915067ffffffffffffffff82111561343957600080fd5b60200191503681900382131561236457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600060a0820173ffffffffffffffffffffffffffffffffffffffff855116606084015260208501516040608085015281815180845260c086019150602083019350600092505b8083101561356c57835180511515835260208101516004811061352f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b806020850152506040810151604084015260608101516060840152608081015160808401525060a0820191506020840193506001830192506134e3565b50809350505050826040830152949350505050565b6000808585111561359157600080fd5b8386111561359e57600080fd5b5050820193919092039150565b60005b838110156135c65781810151838201526020016135ae565b50506000910152565b600081518084526135e78160208601602086016135ab565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61368082612d76565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126136c557600080fd5b820160208101903567ffffffffffffffff8111156136e257600080fd5b8036038213156136f157600080fd5b60e0604086015261370660e086018284613619565b606085810135908701529150613720905060808401612eda565b1515608085015261373360a08401612eda565b151560a085015260c09283013592909301919091525090565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c08201526000608084015160c060e08401526137e56101208401826135cf565b905060a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa084830301610100850152805190506020825261382c60208301826135cf565b91505082810360408401526138418185613662565b9695505050505050565b60006020828403121561385d57600080fd5b5051919050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156138c3577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b602081526000612cc9602083018461314c565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261392b5761392b6138ed565b500490565b60ff81811683821601908111156101cd576101cd613341565b600082601f83011261395a57600080fd5b813567ffffffffffffffff81111561397457613974612dc9565b6139a560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e67565b8181528460208386010111156139ba57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156139e957600080fd5b6139f1612e44565b6139fa83612d76565b815260208381013590820152604083013567ffffffffffffffff811115613a2057600080fd5b613a2c36828601613949565b60408301525060608381013590820152613a4860808401612eda565b6080820152613a5960a08401612eda565b60a082015260c092830135928101929092525090565b81810360008312801583831316838312821617156138c3576138c3613341565b600082613a9e57613a9e6138ed565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615613af257613af2613341565b500590565b8082018281126000831280158216821582161715613b1757613b17613341565b505092915050565b7fff000000000000000000000000000000000000000000000000000000000000008460f81b168152818360018301376000910160010190815292915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1681527fffffffff00000000000000000000000000000000000000000000000000000000871660148201528560188201528460388201527fffffff00000000000000000000000000000000000000000000000000000000008460e81b16605882015260008351613bfa81605b8501602088016135ab565b835190830190613c1181605b8401602088016135ab565b01605b019998505050505050505050565b7fffffff00000000000000000000000000000000000000000000000000000000008360e81b16815260008251613c5f8160038501602087016135ab565b91909101600301939250505056fea26469706673582212204f84e231d3bc870fa7a57b5f2c198a25ba59284a3e4e0e6f58415837bd2db27764736f6c634300081b0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100725760003560e01c8063313dade711610050578063313dade71461010157806342de141814610122578063f916f3b21461013757600080fd5b806301ffc9a71461007757806313792a4a1461009f57806323b3713e146100c0575b600080fd5b61008a610085366004612c87565b610177565b60405190151581526020015b60405180910390f35b6100b26100ad366004612cd0565b6101d3565b604051908152602001610096565b6100b26100ce366004612d9f565b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b61011461010f366004612f95565b61074d565b604051610096929190613194565b6101356101303660046131b7565b610b4b565b005b61015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f13792a4a0000000000000000000000000000000000000000000000000000000014806101cd57506101cd82610c78565b92915050565b6000806101e3602086018661322e565b60ff161461021d576040517f7205212000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61022a6040850185613251565b9050600003610265576040517f542f0af500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610272858585610d10565b90503360006102846040880188613251565b905067ffffffffffffffff81111561029e5761029e612dc9565b60405190808252806020026020018201604052801561030957816020015b6102f66040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b8152602001906001900390816102bc5790505b50905060005b61031c6040890189613251565b90508110156105b0573661033360408a018a613251565b83818110610343576103436132b9565b905060200281019061035591906132e8565b905061036760a0820160808301613326565b1561039e576040517faa25f2ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000856080015183815181106103b6576103b66132b9565b602002602001015190508060000151156103e8576103e38286836020015184606001518a6040015161126f565b6105a6565b6104226040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b60005b855181101561056857600073ffffffffffffffffffffffffffffffffffffffff16868281518110610458576104586132b9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff16036104eb5760208381015173ffffffffffffffffffffffffffffffffffffffff168352604080516000808252928101909152906104d9565b60408051808201909152600080825260208201528152602001906001900390816104b25790505b50602083015260006040830152610568565b826020015173ffffffffffffffffffffffffffffffffffffffff16868281518110610518576105186132b9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff160361056057858181518110610551576105516132b9565b60200260200101519150610568565b600101610425565b6105838c868986602001518c6060015188604001518861150c565b915081868281518110610598576105986132b9565b602002602001018190525050505b505060010161030f565b506000815167ffffffffffffffff8111156105cd576105cd612dc9565b60405190808252806020026020018201604052801561063857816020015b6106256040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b8152602001906001900390816105eb5790505b5090506000805b83518110156106e557600084828151811061065c5761065c6132b9565b60200260200101516020015151118061069257506000848281518110610684576106846132b9565b602002602001015160400151115b156106dd578381815181106106a9576106a96132b9565b60200260200101518383815181106106c3576106c36132b9565b602002602001018190525081806106d990613370565b9250505b60010161063f565b50808252366106f760408b018b613251565b600161070660408e018e613251565b6107119291506133a8565b818110610720576107206132b9565b905060200281019061073291906132e8565b905061073e818461195f565b50509251979650505050505050565b6000606061075e60208701876133bb565b73ffffffffffffffffffffffffffffffffffffffff16876000015173ffffffffffffffffffffffffffffffffffffffff161461079f57506000905081610b41565b86602001515183516107b191906133d6565b67ffffffffffffffff8111156107c9576107c9612dc9565b60405190808252806020026020018201604052801561080e57816020015b60408051808201909152600080825260208201528152602001906001900390816107e75790505b50905060005b835181101561085c5783818151811061082f5761082f6132b9565b6020026020010151828281518110610849576108496132b9565b6020908102919091010152600101610814565b50825160005b886020015151811015610b3957600089602001518281518110610887576108876132b9565b6020026020010151905060006108b182606001518b80604001906108ab91906133e9565b50013590565b608083015183519116915015610a485760405181906000906108db908b908f90889060200161347d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012083830190925260008084529083018190529092509060005b89518110156109f5576000801b8a8281518110610948576109486132b9565b602002602001015160000151036109a157604051806040016040528085815260200160008152509150818a8281518110610984576109846132b9565b602090810291909101015261099a8160016133d6565b98506109f5565b838a82815181106109b4576109b46132b9565b602002602001015160000151036109ed578981815181106109d7576109d76132b9565b60200260200101519150816020015192506109f5565b600101610929565b5081600003610a305773ffffffffffffffffffffffffffffffffffffffff8d1660009081526020818152604080832086845290915290205491505b610a3a82856133d6565b602090910181905293505050505b600082602001516003811115610a6057610a6061344e565b03610a855781604001518114610a80576000879550955050505050610b41565b610b2f565b600382602001516003811115610a9d57610a9d61344e565b03610abe576040820151811115610a80576000879550955050505050610b41565b600182602001516003811115610ad657610ad661344e565b03610af65781604001518103610a80576000879550955050505050610b41565b600282602001516003811115610b0e57610b0e61344e565b03610b2f576040820151811015610b2f576000879550955050505050610b41565b5050600101610862565b508152600191505b9550959350505050565b3360005b82811015610c7257610baa82858584818110610b6d57610b6d6132b9565b9050604002016000013573ffffffffffffffffffffffffffffffffffffffff91909116600090815260208181526040808320938352929052205490565b848483818110610bbc57610bbc6132b9565b905060400201602001351015610bfd576040517e2a700a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c6a82858584818110610c1357610c136132b9565b90506040020160000135868685818110610c2f57610c2f6132b9565b9050604002016020013573ffffffffffffffffffffffffffffffffffffffff9092166000908152602081815260408083209383529290522055565b600101610b4f565b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f13792a4a0000000000000000000000000000000000000000000000000000000014806101cd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f42de1418000000000000000000000000000000000000000000000000000000001492915050565b6040805160a0810182526000808252602082018190526060928201839052828201839052608082019290925290600390843560e81c610d67868487610d5585836133d6565b92610d6293929190613581565b611d5a565b9094509150610d7681846133d6565b602085015190935073ffffffffffffffffffffffffffffffffffffffff16610dca576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600182019160609086013560f81c8067ffffffffffffffff811115610df257610df2612dc9565b604051908082528060200260200182016040528015610e6657816020015b610e536040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b815260200190600190039081610e105790505b50915060005b8160ff16811015610fe557610eba6040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b610ec589898861236b565b9650905060008080610ed88c8c8b612482565b9b50919450925090506000610eec856124d5565b6040805160008082526020820180845284905260ff86169282019290925260608101879052608081018690529192509060019060a0016020604051602081039080840390855afa158015610f44573d6000803e3d6000fd5b5050506020604051035190508b6020015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505080848381518110610fd157610fd16132b9565b602090810291909101015250600101610e6c565b5060008160ff16118015610ff7575082155b1561102e576040517feb62520400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600061103e6040890189613251565b905090508067ffffffffffffffff81111561105b5761105b612dc9565b60405190808252806020026020018201604052801561109457816020015b611081612c23565b8152602001906001900390816110795790505b50608086015260005b81811015611263576110ad612c23565b8589013560f81c608081161580158352600190970196611131578451607f8216908110611106576040517fbd8ba84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b858160ff168151811061111b5761111b6132b9565b602002602001015183606001819052505061113b565b60ff811660408301525b506000808061114b8c8c8b612482565b809c508194508295508396505050505060006111988e80604001906111709190613251565b88818110611180576111806132b9565b905060200281019061119291906132e8565b8f6124ee565b60408051600081526020810180835283905260ff851691810191909152606081018690526080810185905290915060019060a0016020604051602081039080840390855afa1580156111ee573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015173ffffffffffffffffffffffffffffffffffffffff16602087015250505050608088015180518392508490811061124f5761124f6132b9565b60209081029190910101525060010161109d565b50505050509392505050565b815173ffffffffffffffffffffffffffffffffffffffff8481169116146112df576040517fc1e84ed600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024015b60405180910390fd5b6112ef60a0860160808701613326565b15611326576040517faa25f2ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113308382612566565b1561137f576040517fd33f19e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024016112d6565b61139561138f60208701876133bb565b82612566565b156113f2576113a760208601866133bb565b6040517fd33f19e700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911660048201526024016112d6565b60208501351561142e576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061143d60208701876133bb565b73ffffffffffffffffffffffffffffffffffffffff1663c58ab92d8685896040518463ffffffff1660e01b81526004016114799392919061374c565b602060405180830381865afa158015611496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ba919061384b565b905060006114c8848761266f565b9050808214611503576040517f0881ad5d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050505050565b6115466040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081525090565b6115876040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001606081525090565b60005b855181101561160c578673ffffffffffffffffffffffffffffffffffffffff168682815181106115bc576115bc6132b9565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1603611604578581815181106115f5576115f56132b9565b6020026020010151915061160c565b60010161158a565b50805173ffffffffffffffffffffffffffffffffffffffff16611673576040517fc1e84ed600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871660048201526024016112d6565b6040810151158015906116895750806040015142115b156116c85780604001516040517fb1bbfdd50000000000000000000000000000000000000000000000000000000081526004016112d691815260200190565b366116d660408b018b613251565b8a8181106116e6576116e66132b9565b90506020028101906116f891906132e8565b905061170a60a0820160808301613326565b15611741576040517faa25f2ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3061174f60208301836133bb565b73ffffffffffffffffffffffffffffffffffffffff160361182a57600061177960408301836133e9565b61178891600491600091613581565b61179191613864565b90506000826020013511806117e857507fffffffff0000000000000000000000000000000000000000000000000000000081167f42de14180000000000000000000000000000000000000000000000000000000014155b1561181f576040517f540733ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b849350505050611954565b8160600151518560ff161061186b576040517f3f904dc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082606001518660ff1681518110611886576118866132b9565b602002602001015190506000806118a483858d8d8b6020015161074d565b91509150816118df576040517f868a64de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020808801829052840135156119095783602001358760400181815161190591906133d6565b9052505b84602001518760400151111561194b576040517faa7feadc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86955050505050505b979650505050505050565b805115611d56573061197460208401846133bb565b73ffffffffffffffffffffffffffffffffffffffff1614158061199c575060c0820135600114155b156119d2576040517e2a700a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b8251811015611a47578281815181106119f1576119f16132b9565b6020026020010151602001515182611a0991906133d6565b91506000838281518110611a1f57611a1f6132b9565b6020026020010151604001511115611a3f5781611a3b81613370565b9250505b6001016119d6565b5060008167ffffffffffffffff811115611a6357611a63612dc9565b604051908082528060200260200182016040528015611aa857816020015b6040805180820190915260008082526020820152815260200190600190039081611a815790505b5090506000805b8451811015611c4f5760005b858281518110611acd57611acd6132b9565b60200260200101516020015151811015611b4957858281518110611af357611af36132b9565b6020026020010151602001518181518110611b1057611b106132b9565b6020026020010151848480611b2490613370565b955081518110611b3657611b366132b9565b6020908102919091010152600101611abb565b506000858281518110611b5e57611b5e6132b9565b6020026020010151604001511115611c47576040518060400160405280868381518110611b8d57611b8d6132b9565b60200260200101516000015173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee604051602001611be192919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b604051602081830303815290604052805190602001208152602001868381518110611c0e57611c0e6132b9565b602002602001015160400151815250838380611c2990613370565b945081518110611c3b57611c3b6132b9565b60200260200101819052505b600101611aaf565b5060006342de141860e01b83604051602401611c6b91906138ca565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093178352815190922090925090600090611cff908901896133e9565b604051611d0d9291906138dd565b60405180910390209050818114611d4f576040517e2a700a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505b5050565b6040805160a08101825260008082526020820152606091810182905281810182905260808101919091526000808080611d9460568761391c565b90508067ffffffffffffffff811115611daf57611daf612dc9565b604051908082528060200260200182016040528015611e2157816020015b611e0e6040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001606081525090565b815260200190600190039081611dcd5790505b506060860152505b8482101561235857600182019186013560f881901c9060fc1c80611f2f57611e886040518060800160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001606081525090565b888501803560601c8252601481013560208301526034013560408201526054850194611eb58a8a8861270d565b606084019190915295506000611ed5611ed088848d8f613581565b6127cd565b8951909150611ee45780611ef5565b885160009081526020829052604090205b8952506060880151829086611f0981613370565b975081518110611f1b57611f1b6132b9565b602002602001018190525050505050611e29565b60018103611f68578551602085019489013590611f4c5780611f5d565b865160009081526020829052604090205b875250611e29915050565b6002810361215157600f8216848101946001600890920291821b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01908a0135610100929092039190911c166000611fc082876133d6565b9050600080611fda8c8c8a908692610d6293929190613581565b91509150829750801561202e57881561201f576040517feb62520400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080830151908b0152600198505b602082015173ffffffffffffffffffffffffffffffffffffffff16156120c15760208a015173ffffffffffffffffffffffffffffffffffffffff16156120a0576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208083015173ffffffffffffffffffffffffffffffffffffffff16908b01525b60005b82606001515181101561212457826060015181815181106120e7576120e76132b9565b60200260200101518b6060015189806120ff90613370565b9a5081518110612111576121116132b9565b60209081029190910101526001016120c4565b508951612132578151612143565b895182516000918252602052604090205b8a5250611e29945050505050565b6003810361229a578415612191576040517feb62520400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60019450600f808316908190036121af5750600284019388013560f01c5b848167ffffffffffffffff8111156121c9576121c9612dc9565b6040519080825280602002602001820160405280156121f2578160200160208202803683370190505b50604089015260005b8281101561225657868b013560601c601488018a604001518381518110612224576122246132b9565b73ffffffffffffffffffffffffffffffffffffffff9093166020938402919091019092019190915296506001016121fb565b50600061226d61226888848d8f613581565b6127e4565b895190915061227c578061228d565b885160009081526020829052604090205b895250611e299350505050565b6004810361232357602086015173ffffffffffffffffffffffffffffffffffffffff16156122f4576040517f9e5c658b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8784013560601c60208701819052601490940193600090612314906127fc565b8751909150611f4c5780611f5d565b6040517f0ad99790000000000000000000000000000000000000000000000000000000008152600481018290526024016112d6565b60608401805191825252505b9250929050565b6123ae6040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b8382018035606090811c83527fffffffff00000000000000000000000000000000000000000000000000000000601483013516602084015260188201356040840152603882013590830152605b8301906058013560e81c85828661241284836133d6565b9261241f93929190613581565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050608084015261246281836133d6565b915061246f868684612875565b60a0850191909152915050935093915050565b828101803590602001357f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811690600090604085019060ff81901c6124c881601b613930565b9350505093509350935093565b60006124e0826128f5565b805190602001209050919050565b60006125006040830160208401613326565b61250a574661250d565b60005b60608301356080840135612528612523876139d7565b61294f565b6040805160208101959095528401929092526060830152608082015260a0015b60405160208183030381529060405280519060200120905092915050565b6000806000905060006001845161257d9190613a6f565b90505b80821361266457600060026125958484613a6f565b61259f9190613a8f565b6125a99084613af7565b905060008582815181106125bf576125bf6132b9565b602002602001015190508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126095760019450505050506101cd565b8673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16101561264f57612648826001613af7565b935061265d565b61265a600183613a6f565b92505b5050612580565b506000949350505050565b6040517f616363657074496d706c696369745265717565737400000000000000000000006020820152600090603501604051602081830303815290604052805190602001208284606001518560400151604051602001612548949392919093845260609290921b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660208401526034830152605482015260740190565b600181019060609060009085013560f81c8067ffffffffffffffff81111561273757612737612dc9565b60405190808252806020026020018201604052801561277d57816020015b6040805180820190915260008152606060208201528152602001906001900390816127555790505b50925060005b818110156127c0576127968787876129fe565b8583815181106127a8576127a86132b9565b60209081029190910101919091529450600101612783565b5083915050935093915050565b600080838360405160200161254893929190613b1f565b60006003838360405160200161254893929190613b1f565b6040517f040000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606083901b1660218201526000906035015b604051602081830303815290604052805190602001209050919050565b604080516020810190915260608152600382018483013560e81c85828661289c84836133d6565b926128a993929190613581565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908452506128ea81836133d6565b915050935093915050565b6060816000015182602001518360400151846060015185608001515186608001516129238860a00151612c07565b6040516020016129399796959493929190613b5e565b6040516020818303038152906040529050919050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161285898979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b60408051808201909152606060208201819052848301803590911c82526015909201916000906014013560f81c8067ffffffffffffffff811115612a4457612a44612dc9565b604051908082528060200260200182016040528015612abb57816020015b6040805160a0810182526000808252602080830182905292820181905260608201819052608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612a625790505b50602084015260005b818110156127c057602084015180516001808801978a013560f81c9290831615159184908110612af657612af66132b9565b60209081029190910101519015159052607f600182901c166003811115612b1f57612b1f61344e565b85602001518381518110612b3557612b356132b9565b6020026020010151602001906003811115612b5257612b5261344e565b90816003811115612b6557612b6561344e565b905250858801356020870186602001518481518110612b8657612b866132b9565b6020908102919091018101516040019290925296508887013590870186602001518481518110612bb857612bb86132b9565b6020908102919091018101516060019290925296508887013590870186602001518481518110612bea57612bea6132b9565b602090810291909101015160800191909152955050600101612ac4565b805180516040516060926129399291602001613c22565b905290565b604080516080810182526000808252602082018190529181019190915260608101612c1e6040805160c0810182526000808252602080830182905282840182905260608084019290925260808301829052835190810190935282529060a082015290565b600060208284031215612c9957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612cc957600080fd5b9392505050565b600080600060408486031215612ce557600080fd5b833567ffffffffffffffff811115612cfc57600080fd5b84016101208187031215612d0f57600080fd5b9250602084013567ffffffffffffffff811115612d2b57600080fd5b8401601f81018613612d3c57600080fd5b803567ffffffffffffffff811115612d5357600080fd5b866020828401011115612d6557600080fd5b939660209190910195509293505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d9a57600080fd5b919050565b60008060408385031215612db257600080fd5b612dbb83612d76565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715612e1b57612e1b612dc9565b60405290565b60405160a0810167ffffffffffffffff81118282101715612e1b57612e1b612dc9565b60405160e0810167ffffffffffffffff81118282101715612e1b57612e1b612dc9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612eae57612eae612dc9565b604052919050565b600067ffffffffffffffff821115612ed057612ed0612dc9565b5060051b60200190565b80358015158114612d9a57600080fd5b600060e08284031215612efc57600080fd5b50919050565b600082601f830112612f1357600080fd5b8135612f26612f2182612eb6565b612e67565b8082825260208201915060208360061b860101925085831115612f4857600080fd5b602085015b83811015612f8b5760408188031215612f6557600080fd5b612f6d612df8565b81358152602080830135818301529084529290920191604001612f4d565b5095945050505050565b600080600080600060a08688031215612fad57600080fd5b853567ffffffffffffffff811115612fc457600080fd5b860160408189031215612fd657600080fd5b612fde612df8565b612fe782612d76565b8152602082013567ffffffffffffffff81111561300357600080fd5b80830192505088601f83011261301857600080fd5b8135613026612f2182612eb6565b80828252602082019150602060a0840286010192508b83111561304857600080fd5b6020850194505b828510156130c65760a0858d03121561306757600080fd5b61306f612e21565b61307886612eda565b815260208601356004811061308c57600080fd5b60208281019190915260408781013590830152606080880135908301526080808801359083015290835260a090950194919091019061304f565b8060208501525050508096505050602086013567ffffffffffffffff8111156130ee57600080fd5b6130fa88828901612eea565b94505061310960408701612d76565b925061311760608701612d76565b9150608086013567ffffffffffffffff81111561313357600080fd5b61313f88828901612f02565b9150509295509295909350565b600081518084526020840193506020830160005b8281101561318a578151805187526020908101518188015260409096019590910190600101613160565b5093949350505050565b82151581526040602082015260006131af604083018461314c565b949350505050565b600080602083850312156131ca57600080fd5b823567ffffffffffffffff8111156131e157600080fd5b8301601f810185136131f257600080fd5b803567ffffffffffffffff81111561320957600080fd5b8560208260061b840101111561321e57600080fd5b6020919091019590945092505050565b60006020828403121561324057600080fd5b813560ff81168114612cc957600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261328657600080fd5b83018035915067ffffffffffffffff8211156132a157600080fd5b6020019150600581901b360382131561236457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2183360301811261331c57600080fd5b9190910192915050565b60006020828403121561333857600080fd5b612cc982612eda565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036133a1576133a1613341565b5060010190565b818103818111156101cd576101cd613341565b6000602082840312156133cd57600080fd5b612cc982612d76565b808201808211156101cd576101cd613341565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261341e57600080fd5b83018035915067ffffffffffffffff82111561343957600080fd5b60200191503681900382131561236457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600060a0820173ffffffffffffffffffffffffffffffffffffffff855116606084015260208501516040608085015281815180845260c086019150602083019350600092505b8083101561356c57835180511515835260208101516004811061352f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b806020850152506040810151604084015260608101516060840152608081015160808401525060a0820191506020840193506001830192506134e3565b50809350505050826040830152949350505050565b6000808585111561359157600080fd5b8386111561359e57600080fd5b5050820193919092039150565b60005b838110156135c65781810151838201526020016135ae565b50506000910152565b600081518084526135e78160208601602086016135ab565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff61368082612d76565b1682526020818101359083015260006040820135368390037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe10181126136c557600080fd5b820160208101903567ffffffffffffffff8111156136e257600080fd5b8036038213156136f157600080fd5b60e0604086015261370660e086018284613619565b606085810135908701529150613720905060808401612eda565b1515608085015261373360a08401612eda565b151560a085015260c09283013592909301919091525090565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015273ffffffffffffffffffffffffffffffffffffffff83511660608201527fffffffff000000000000000000000000000000000000000000000000000000006020840151166080820152604083015160a0820152606083015160c08201526000608084015160c060e08401526137e56101208401826135cf565b905060a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa084830301610100850152805190506020825261382c60208301826135cf565b91505082810360408401526138418185613662565b9695505050505050565b60006020828403121561385d57600080fd5b5051919050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081169060048410156138c3577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b602081526000612cc9602083018461314c565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261392b5761392b6138ed565b500490565b60ff81811683821601908111156101cd576101cd613341565b600082601f83011261395a57600080fd5b813567ffffffffffffffff81111561397457613974612dc9565b6139a560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612e67565b8181528460208386010111156139ba57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082360312156139e957600080fd5b6139f1612e44565b6139fa83612d76565b815260208381013590820152604083013567ffffffffffffffff811115613a2057600080fd5b613a2c36828601613949565b60408301525060608381013590820152613a4860808401612eda565b6080820152613a5960a08401612eda565b60a082015260c092830135928101929092525090565b81810360008312801583831316838312821617156138c3576138c3613341565b600082613a9e57613a9e6138ed565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615613af257613af2613341565b500590565b8082018281126000831280158216821582161715613b1757613b17613341565b505092915050565b7fff000000000000000000000000000000000000000000000000000000000000008460f81b168152818360018301376000910160010190815292915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008860601b1681527fffffffff00000000000000000000000000000000000000000000000000000000871660148201528560188201528460388201527fffffff00000000000000000000000000000000000000000000000000000000008460e81b16605882015260008351613bfa81605b8501602088016135ab565b835190830190613c1181605b8401602088016135ab565b01605b019998505050505050505050565b7fffffff00000000000000000000000000000000000000000000000000000000008360e81b16815260008251613c5f8160038501602087016135ab565b91909101600301939250505056fea26469706673582212204f84e231d3bc870fa7a57b5f2c198a25ba59284a3e4e0e6f58415837bd2db27764736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionSig.sol/SessionSig.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionSig.sol/SessionSig.json new file mode 100644 index 000000000..4f7b2025b --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/SessionSig.sol/SessionSig.json @@ -0,0 +1,156 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SessionSig", + "sourceName": "src/extensions/sessions/SessionSig.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call", + "name": "call", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "payload", + "type": "tuple" + } + ], + "name": "hashCallWithReplayProtection", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x610446610039600b82828239805160001a607314602c57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806391195a2a1461003a575b600080fd5b61004d6100483660046101a2565b61005f565b60405190815260200160405180910390f35b6000610071604083016020840161022d565b61007b574661007e565b60005b6060830135608084013561009961009487610378565b6100d6565b6040805160208101959095528401929092526060830152608082015260a00160405160208183030381529060405280519060200120905092915050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161018598979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b604051602081830303815290604052805190602001209050919050565b600080604083850312156101b557600080fd5b823567ffffffffffffffff8111156101cc57600080fd5b830160e081860312156101de57600080fd5b9150602083013567ffffffffffffffff8111156101fa57600080fd5b8301610120818603121561020d57600080fd5b809150509250929050565b8035801515811461022857600080fd5b919050565b60006020828403121561023f57600080fd5b61024882610218565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156102a1576102a161024f565b60405290565b803573ffffffffffffffffffffffffffffffffffffffff8116811461022857600080fd5b600082601f8301126102dc57600080fd5b813567ffffffffffffffff8111156102f6576102f661024f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff811182821017156103435761034361024f565b60405281815283820160200185101561035b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561038a57600080fd5b61039261027e565b61039b836102a7565b815260208381013590820152604083013567ffffffffffffffff8111156103c157600080fd5b6103cd368286016102cb565b604083015250606083810135908201526103e960808401610218565b60808201526103fa60a08401610218565b60a082015260c09283013592810192909252509056fea2646970667358221220d5c29436ab283c755ff5d9e8be0c8b9230ecbbf964e7292bcfba984662fa878b64736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806391195a2a1461003a575b600080fd5b61004d6100483660046101a2565b61005f565b60405190815260200160405180910390f35b6000610071604083016020840161022d565b61007b574661007e565b60005b6060830135608084013561009961009487610378565b6100d6565b6040805160208101959095528401929092526060830152608082015260a00160405160208183030381529060405280519060200120905092915050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161018598979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b604051602081830303815290604052805190602001209050919050565b600080604083850312156101b557600080fd5b823567ffffffffffffffff8111156101cc57600080fd5b830160e081860312156101de57600080fd5b9150602083013567ffffffffffffffff8111156101fa57600080fd5b8301610120818603121561020d57600080fd5b809150509250929050565b8035801515811461022857600080fd5b919050565b60006020828403121561023f57600080fd5b61024882610218565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156102a1576102a161024f565b60405290565b803573ffffffffffffffffffffffffffffffffffffffff8116811461022857600080fd5b600082601f8301126102dc57600080fd5b813567ffffffffffffffff8111156102f6576102f661024f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810167ffffffffffffffff811182821017156103435761034361024f565b60405281815283820160200185101561035b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e0823603121561038a57600080fd5b61039261027e565b61039b836102a7565b815260208381013590820152604083013567ffffffffffffffff8111156103c157600080fd5b6103cd368286016102cb565b604083015250606083810135908201526103e960808401610218565b60808201526103fa60a08401610218565b60a082015260c09283013592810192909252509056fea2646970667358221220d5c29436ab283c755ff5d9e8be0c8b9230ecbbf964e7292bcfba984662fa878b64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/ExplicitSessionManager.sol/ExplicitSessionManager.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/ExplicitSessionManager.sol/ExplicitSessionManager.json new file mode 100644 index 000000000..494d29ae9 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/ExplicitSessionManager.sol/ExplicitSessionManager.json @@ -0,0 +1,241 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ExplicitSessionManager", + "sourceName": "src/extensions/sessions/explicit/ExplicitSessionManager.sol", + "abi": [ + { + "inputs": [], + "name": "InvalidLimitUsageIncrement", + "type": "error" + }, + { + "inputs": [], + "name": "VALUE_TRACKING_ADDRESS", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + } + ], + "name": "getLimitUsage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "limits", + "type": "tuple[]" + } + ], + "name": "incrementUsageLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "cumulative", + "type": "bool" + }, + { + "internalType": "enum ParameterOperation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "value", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mask", + "type": "bytes32" + } + ], + "internalType": "struct ParameterRule[]", + "name": "rules", + "type": "tuple[]" + } + ], + "internalType": "struct Permission", + "name": "permission", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call", + "name": "call", + "type": "tuple" + }, + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "usageLimits", + "type": "tuple[]" + } + ], + "name": "validatePermission", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "newUsageLimits", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/IExplicitSessionManager.sol/IExplicitSessionManager.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/IExplicitSessionManager.sol/IExplicitSessionManager.json new file mode 100644 index 000000000..0b2e94b7d --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/IExplicitSessionManager.sol/IExplicitSessionManager.json @@ -0,0 +1,36 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IExplicitSessionManager", + "sourceName": "src/extensions/sessions/explicit/IExplicitSessionManager.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "limits", + "type": "tuple[]" + } + ], + "name": "incrementUsageLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/Permission.sol/LibPermission.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/Permission.sol/LibPermission.json new file mode 100644 index 000000000..98cefb3ec --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/Permission.sol/LibPermission.json @@ -0,0 +1,16 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibPermission", + "sourceName": "src/extensions/sessions/explicit/Permission.sol", + "abi": [ + { + "inputs": [], + "name": "RulesLengthExceedsMax", + "type": "error" + } + ], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122075c72ea1bc320353b145bf9080f259ae67bb565e1b4a2162c95df7e4e3271f5364736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122075c72ea1bc320353b145bf9080f259ae67bb565e1b4a2162c95df7e4e3271f5364736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/PermissionValidator.sol/PermissionValidator.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/PermissionValidator.sol/PermissionValidator.json new file mode 100644 index 000000000..bd60f26ad --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/explicit/PermissionValidator.sol/PermissionValidator.json @@ -0,0 +1,179 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PermissionValidator", + "sourceName": "src/extensions/sessions/explicit/PermissionValidator.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + } + ], + "name": "getLimitUsage", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "components": [ + { + "internalType": "bool", + "name": "cumulative", + "type": "bool" + }, + { + "internalType": "enum ParameterOperation", + "name": "operation", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "value", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "mask", + "type": "bytes32" + } + ], + "internalType": "struct ParameterRule[]", + "name": "rules", + "type": "tuple[]" + } + ], + "internalType": "struct Permission", + "name": "permission", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call", + "name": "call", + "type": "tuple" + }, + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "usageLimits", + "type": "tuple[]" + } + ], + "name": "validatePermission", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "usageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "usageAmount", + "type": "uint256" + } + ], + "internalType": "struct UsageLimit[]", + "name": "newUsageLimits", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/Attestation.sol/LibAttestation.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/Attestation.sol/LibAttestation.json new file mode 100644 index 000000000..52c5d42f0 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/Attestation.sol/LibAttestation.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibAttestation", + "sourceName": "src/extensions/sessions/implicit/Attestation.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b4d1399f29f56130d4c7296b9a377d8493b344959a2f8a5a3463059f2020fd2b64736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b4d1399f29f56130d4c7296b9a377d8493b344959a2f8a5a3463059f2020fd2b64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/ISignalsImplicitMode.sol/ISignalsImplicitMode.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/ISignalsImplicitMode.sol/ISignalsImplicitMode.json new file mode 100644 index 000000000..a70a7ec51 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/ISignalsImplicitMode.sol/ISignalsImplicitMode.json @@ -0,0 +1,116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ISignalsImplicitMode", + "sourceName": "src/extensions/sessions/implicit/ISignalsImplicitMode.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "wallet", + "type": "address" + }, + { + "components": [ + { + "internalType": "address", + "name": "approvedSigner", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "identityType", + "type": "bytes4" + }, + { + "internalType": "bytes32", + "name": "issuerHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "audienceHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "applicationData", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "string", + "name": "redirectUrl", + "type": "string" + } + ], + "internalType": "struct AuthData", + "name": "authData", + "type": "tuple" + } + ], + "internalType": "struct Attestation", + "name": "attestation", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call", + "name": "call", + "type": "tuple" + } + ], + "name": "acceptImplicitRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/ImplicitSessionManager.sol/ImplicitSessionManager.json b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/ImplicitSessionManager.sol/ImplicitSessionManager.json new file mode 100644 index 000000000..21f29083b --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/extensions/sessions/implicit/ImplicitSessionManager.sol/ImplicitSessionManager.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ImplicitSessionManager", + "sourceName": "src/extensions/sessions/implicit/ImplicitSessionManager.sol", + "abi": [], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Calls.sol/Calls.json b/testchain/artifacts/wallet-contracts-v3/modules/Calls.sol/Calls.json new file mode 100644 index 000000000..74458299e --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Calls.sol/Calls.json @@ -0,0 +1,1116 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Calls", + "sourceName": "src/modules/Calls.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_current", + "type": "uint256" + } + ], + "name": "BadNonce", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_gasLeft", + "type": "uint256" + } + ], + "name": "NotEnoughGas", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "Reverted", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallAborted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_returnData", + "type": "bytes" + } + ], + "name": "CallFailed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSkipped", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_index", + "type": "uint256" + } + ], + "name": "CallSucceeded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_newNonce", + "type": "uint256" + } + ], + "name": "NonceChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + } + ], + "name": "readNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_payload", + "type": "bytes" + } + ], + "name": "selfExecute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/Hooks.json b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/Hooks.json new file mode 100644 index 000000000..244d5ed1b --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/Hooks.json @@ -0,0 +1,256 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Hooks", + "sourceName": "src/modules/Hooks.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookAlreadyExists", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "HookDoesNotExist", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "DefinedHook", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "addHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "readHook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "signature", + "type": "bytes4" + } + ], + "name": "removeHook", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "tokenReceived", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b506109cf8061001f6000396000f3fe6080604052600436106100745760003560e01c80638943ec021161004e5780638943ec0214610211578063b93ea7ad14610232578063bc197c8114610245578063f23a6e611461028d5761007b565b8063150b7a021461013e5780631a9b2337146101b95780634fcf3eca146101fe5761007b565b3661007b57005b6004361061013c57600061009761009236836105df565b6102d3565b905073ffffffffffffffffffffffffffffffffffffffff81161561013a576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516100e0929190610645565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091508161013257805160208201fd5b805160208201f35b505b005b34801561014a57600080fd5b506101836101593660046106c7565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156101c557600080fd5b506101d96101d4366004610766565b610327565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61013c61020c366004610766565b610332565b34801561021d57600080fd5b5061013c61022c366004610788565b50505050565b61013c6102403660046107e2565b6103fc565b34801561025157600080fd5b5061018361026036600461085a565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561029957600080fd5b506101836102a8366004610921565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006103217fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff0000000000000000000000000000000000000000000000000000000084166104c1565b92915050565b6000610321826102d3565b333014610372576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b600061037d826102d3565b73ffffffffffffffffffffffffffffffffffffffff16036103ee576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610369565b6103f981600061051f565b50565b333014610437576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610369565b6000610442836102d3565b73ffffffffffffffffffffffffffffffffffffffff16146104b3576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610369565b6104bd828261051f565b5050565b60008083836040516020016104e0929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811690600484101561063e577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b8183823760009101908152919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067957600080fd5b919050565b60008083601f84011261069057600080fd5b50813567ffffffffffffffff8111156106a857600080fd5b6020830191508360208285010111156106c057600080fd5b9250929050565b6000806000806000608086880312156106df57600080fd5b6106e886610655565b94506106f660208701610655565b935060408601359250606086013567ffffffffffffffff81111561071957600080fd5b6107258882890161067e565b969995985093965092949392505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461067957600080fd5b60006020828403121561077857600080fd5b61078182610736565b9392505050565b6000806000806060858703121561079e57600080fd5b6107a785610655565b935060208501359250604085013567ffffffffffffffff8111156107ca57600080fd5b6107d68782880161067e565b95989497509550505050565b600080604083850312156107f557600080fd5b6107fe83610736565b915061080c60208401610655565b90509250929050565b60008083601f84011261082757600080fd5b50813567ffffffffffffffff81111561083f57600080fd5b6020830191508360208260051b85010111156106c057600080fd5b60008060008060008060008060a0898b03121561087657600080fd5b61087f89610655565b975061088d60208a01610655565b9650604089013567ffffffffffffffff8111156108a957600080fd5b6108b58b828c01610815565b909750955050606089013567ffffffffffffffff8111156108d557600080fd5b6108e18b828c01610815565b909550935050608089013567ffffffffffffffff81111561090157600080fd5b61090d8b828c0161067e565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561093a57600080fd5b61094387610655565b955061095160208801610655565b94506040870135935060608701359250608087013567ffffffffffffffff81111561097b57600080fd5b61098789828a0161067e565b979a969950949750929593949250505056fea26469706673582212207401ad4ec542e2cf3e76158237f91d283186cc551ec49e40776d68dc127e999464736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106100745760003560e01c80638943ec021161004e5780638943ec0214610211578063b93ea7ad14610232578063bc197c8114610245578063f23a6e611461028d5761007b565b8063150b7a021461013e5780631a9b2337146101b95780634fcf3eca146101fe5761007b565b3661007b57005b6004361061013c57600061009761009236836105df565b6102d3565b905073ffffffffffffffffffffffffffffffffffffffff81161561013a576000808273ffffffffffffffffffffffffffffffffffffffff166000366040516100e0929190610645565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091508161013257805160208201fd5b805160208201f35b505b005b34801561014a57600080fd5b506101836101593660046106c7565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156101c557600080fd5b506101d96101d4366004610766565b610327565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61013c61020c366004610766565b610332565b34801561021d57600080fd5b5061013c61022c366004610788565b50505050565b61013c6102403660046107e2565b6103fc565b34801561025157600080fd5b5061018361026036600461085a565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b34801561029957600080fd5b506101836102a8366004610921565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60006103217fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1207fffffffff0000000000000000000000000000000000000000000000000000000084166104c1565b92915050565b6000610321826102d3565b333014610372576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b600061037d826102d3565b73ffffffffffffffffffffffffffffffffffffffff16036103ee576040517f1c3812cc0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000082166004820152602401610369565b6103f981600061051f565b50565b333014610437576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610369565b6000610442836102d3565b73ffffffffffffffffffffffffffffffffffffffff16146104b3576040517f5b4d6d6a0000000000000000000000000000000000000000000000000000000081527fffffffff0000000000000000000000000000000000000000000000000000000083166004820152602401610369565b6104bd828261051f565b5050565b60008083836040516020016104e0929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b604080517fbe27a319efc8734e89e26ba4bc95f5c788584163b959f03fa04e2d7ab4b9a1206020808301919091527fffffffff000000000000000000000000000000000000000000000000000000008516828401819052835180840385018152606084018086528151919093012073ffffffffffffffffffffffffffffffffffffffff8616908190559152608082015290517f0d7fc113eaf016db4681a1ba86d083ce3e0961f321062a75ac2b0aeb33deeed19181900360a00190a15050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811690600484101561063e577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b8183823760009101908152919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461067957600080fd5b919050565b60008083601f84011261069057600080fd5b50813567ffffffffffffffff8111156106a857600080fd5b6020830191508360208285010111156106c057600080fd5b9250929050565b6000806000806000608086880312156106df57600080fd5b6106e886610655565b94506106f660208701610655565b935060408601359250606086013567ffffffffffffffff81111561071957600080fd5b6107258882890161067e565b969995985093965092949392505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461067957600080fd5b60006020828403121561077857600080fd5b61078182610736565b9392505050565b6000806000806060858703121561079e57600080fd5b6107a785610655565b935060208501359250604085013567ffffffffffffffff8111156107ca57600080fd5b6107d68782880161067e565b95989497509550505050565b600080604083850312156107f557600080fd5b6107fe83610736565b915061080c60208401610655565b90509250929050565b60008083601f84011261082757600080fd5b50813567ffffffffffffffff81111561083f57600080fd5b6020830191508360208260051b85010111156106c057600080fd5b60008060008060008060008060a0898b03121561087657600080fd5b61087f89610655565b975061088d60208a01610655565b9650604089013567ffffffffffffffff8111156108a957600080fd5b6108b58b828c01610815565b909750955050606089013567ffffffffffffffff8111156108d557600080fd5b6108e18b828c01610815565b909550935050608089013567ffffffffffffffff81111561090157600080fd5b61090d8b828c0161067e565b999c989b5096995094979396929594505050565b60008060008060008060a0878903121561093a57600080fd5b61094387610655565b955061095160208801610655565b94506040870135935060608701359250608087013567ffffffffffffffff81111561097b57600080fd5b61098789828a0161067e565b979a969950949750929593949250505056fea26469706673582212207401ad4ec542e2cf3e76158237f91d283186cc551ec49e40776d68dc127e999464736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC1155Receiver.json b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC1155Receiver.json new file mode 100644 index 000000000..cbcdb348d --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC1155Receiver.json @@ -0,0 +1,89 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IERC1155Receiver", + "sourceName": "src/modules/Hooks.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC223Receiver.json b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC223Receiver.json new file mode 100644 index 000000000..7c0dd6fb5 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC223Receiver.json @@ -0,0 +1,34 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IERC223Receiver", + "sourceName": "src/modules/Hooks.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "tokenReceived", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC721Receiver.json b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC721Receiver.json new file mode 100644 index 000000000..7a10bb21a --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Hooks.sol/IERC721Receiver.json @@ -0,0 +1,45 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IERC721Receiver", + "sourceName": "src/modules/Hooks.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Implementation.sol/Implementation.json b/testchain/artifacts/wallet-contracts-v3/modules/Implementation.sol/Implementation.json new file mode 100644 index 000000000..47444ac14 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Implementation.sol/Implementation.json @@ -0,0 +1,61 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Implementation", + "sourceName": "src/modules/Implementation.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b506101a28061001f6000396000f3fe6080604052600436106100295760003560e01c8063025b22bc1461002e578063aaf10f4214610043575b600080fd5b61004161003c36600461012f565b610081565b005b34801561004f57600080fd5b506100586100cc565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3330146100c0576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240160405180910390fd5b6100c9816100db565b50565b60006100d6305490565b905090565b6100e3813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039060200160405180910390a150565b60006020828403121561014157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461016557600080fd5b939250505056fea2646970667358221220005823243d8e8c607d6060c61090a2e432eb1bd21affd4071a30c7f60e2b02c064736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106100295760003560e01c8063025b22bc1461002e578063aaf10f4214610043575b600080fd5b61004161003c36600461012f565b610081565b005b34801561004f57600080fd5b506100586100cc565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3330146100c0576040517fa19dbf0000000000000000000000000000000000000000000000000000000000815233600482015260240160405180910390fd5b6100c9816100db565b50565b60006100d6305490565b905090565b6100e3813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039060200160405180910390a150565b60006020828403121561014157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461016557600080fd5b939250505056fea2646970667358221220005823243d8e8c607d6060c61090a2e432eb1bd21affd4071a30c7f60e2b02c064736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Nonce.sol/Nonce.json b/testchain/artifacts/wallet-contracts-v3/modules/Nonce.sol/Nonce.json new file mode 100644 index 000000000..67c6ae2aa --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Nonce.sol/Nonce.json @@ -0,0 +1,70 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Nonce", + "sourceName": "src/modules/Nonce.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_provided", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_current", + "type": "uint256" + } + ], + "name": "BadNonce", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_newNonce", + "type": "uint256" + } + ], + "name": "NonceChange", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + } + ], + "name": "readNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b506101298061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80638c3f556314602d575b600080fd5b603c603836600460db565b604e565b60405190815260200160405180910390f35b600060787f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83607e565b92915050565b6000808383604051602001609c929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60006020828403121560ec57600080fd5b503591905056fea2646970667358221220860e9a09ba5fd84e76ae122b612b61370ba556f8d39966c4c2da5f4380d22a7264736f6c634300081b0033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c80638c3f556314602d575b600080fd5b603c603836600460db565b604e565b60405190815260200160405180910390f35b600060787f8d0bf1fd623d628c741362c1289948e57b3e2905218c676d3e69abee36d6ae2e83607e565b92915050565b6000808383604051602001609c929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60006020828403121560ec57600080fd5b503591905056fea2646970667358221220860e9a09ba5fd84e76ae122b612b61370ba556f8d39966c4c2da5f4380d22a7264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Payload.sol/Payload.json b/testchain/artifacts/wallet-contracts-v3/modules/Payload.sol/Payload.json new file mode 100644 index 000000000..84e5efaf2 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Payload.sol/Payload.json @@ -0,0 +1,113 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Payload", + "sourceName": "src/modules/Payload.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [], + "name": "BEHAVIOR_ABORT_ON_ERROR", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BEHAVIOR_IGNORE_ERROR", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BEHAVIOR_REVERT_ON_ERROR", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "KIND_CONFIG_UPDATE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "KIND_DIGEST", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "KIND_MESSAGE", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "KIND_TRANSACTIONS", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x60eb610038600b82828239805160001a607314602b57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610607e5760003560e01c8063420b0c2511605f578063420b0c251460835780634a7d2aa01460a05780634e5f57151460a7578063b570180a1460ae57600080fd5b80630739d59a146083578063075a3d2d1460a05780633d5c1f9b1460a7575b600080fd5b608a600281565b60405160ff909116815260200160405180910390f35b608a600081565b608a600181565b608a60038156fea2646970667358221220f3fce63aa6991f22d43e5e0808a092b0d29d70a05abc865453439bfc9b8ed95864736f6c634300081b0033", + "deployedBytecode": "0x7300000000000000000000000000000000000000003014608060405260043610607e5760003560e01c8063420b0c2511605f578063420b0c251460835780634a7d2aa01460a05780634e5f57151460a7578063b570180a1460ae57600080fd5b80630739d59a146083578063075a3d2d1460a05780633d5c1f9b1460a7575b600080fd5b608a600281565b60405160ff909116815260200160405180910390f35b608a600081565b608a600181565b608a60038156fea2646970667358221220f3fce63aa6991f22d43e5e0808a092b0d29d70a05abc865453439bfc9b8ed95864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/Storage.sol/Storage.json b/testchain/artifacts/wallet-contracts-v3/modules/Storage.sol/Storage.json new file mode 100644 index 000000000..b09eb6a61 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/Storage.sol/Storage.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Storage", + "sourceName": "src/modules/Storage.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201f4d29faace7c5917dc9eba9634961e06a727964fafce214043fef8b39ba3cb964736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212201f4d29faace7c5917dc9eba9634961e06a727964fafce214043fef8b39ba3cb964736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/auth/BaseAuth.sol/BaseAuth.json b/testchain/artifacts/wallet-contracts-v3/modules/auth/BaseAuth.sol/BaseAuth.json new file mode 100644 index 000000000..42081ac1c --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/auth/BaseAuth.sol/BaseAuth.json @@ -0,0 +1,628 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BaseAuth", + "sourceName": "src/modules/auth/BaseAuth.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/auth/BaseSig.sol/BaseSig.json b/testchain/artifacts/wallet-contracts-v3/modules/auth/BaseSig.sol/BaseSig.json new file mode 100644 index 000000000..74a3ef146 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/auth/BaseSig.sol/BaseSig.json @@ -0,0 +1,103 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BaseSig", + "sourceName": "src/modules/auth/BaseSig.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + } + ], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206b13ed3431d39321c0cfb308a4ada0663b68746a040b1c24cf1730ea61c6983864736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206b13ed3431d39321c0cfb308a4ada0663b68746a040b1c24cf1730ea61c6983864736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/auth/SelfAuth.sol/SelfAuth.json b/testchain/artifacts/wallet-contracts-v3/modules/auth/SelfAuth.sol/SelfAuth.json new file mode 100644 index 000000000..7a12c1835 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/auth/SelfAuth.sol/SelfAuth.json @@ -0,0 +1,22 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "SelfAuth", + "sourceName": "src/modules/auth/SelfAuth.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea264697066735822122025a1b61388a0387df434129bcca8531d7e46b38791d4ab8bf7409e3304fa83b764736f6c634300081b0033", + "deployedBytecode": "0x6080604052600080fdfea264697066735822122025a1b61388a0387df434129bcca8531d7e46b38791d4ab8bf7409e3304fa83b764736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/auth/Stage1Auth.sol/Stage1Auth.json b/testchain/artifacts/wallet-contracts-v3/modules/auth/Stage1Auth.sol/Stage1Auth.json new file mode 100644 index 000000000..e33742ae8 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/auth/Stage1Auth.sol/Stage1Auth.json @@ -0,0 +1,751 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Stage1Auth", + "sourceName": "src/modules/auth/Stage1Auth.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_factory", + "type": "address" + }, + { + "internalType": "address", + "name": "_stage2", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ImageHashIsZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes1", + "name": "_type", + "type": "bytes1" + } + ], + "name": "InvalidSignatureType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "newImageHash", + "type": "bytes32" + } + ], + "name": "ImageHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "inputs": [], + "name": "FACTORY", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INIT_CODE_HASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "STAGE_2_IMPLEMENTATION", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x60e060405234801561001057600080fd5b50604051612f8e380380612f8e83398101604081905261002f916100ab565b60006040518060600160405280602c8152602001612f62602c913960405161005c919030906020016100de565b60408051601f198184030181529190528051602090910120608052506001600160a01b0391821660a0521660c052610110565b80516001600160a01b03811681146100a657600080fd5b919050565b600080604083850312156100be57600080fd5b6100c78361008f565b91506100d56020840161008f565b90509250929050565b6000835160005b818110156100ff57602081870181015185830152016100e5565b509190910191825250602001919050565b60805160a05160c051612e00610162600039600081816102650152610b7b0152600081816101c0015281816106380152610a2401526000818161016c015281816106690152610a550152612e006000f3fe6080604052600436106100bc5760003560e01c80632dd3100011610074578063aaf10f421161004e578063aaf10f4214610287578063ad55366b1461029c578063f727ef1c146102ef57600080fd5b80632dd31000146101ae57806392dcb3fc146102075780639f69ef541461025357600080fd5b80631626ba7e116100a55780631626ba7e14610109578063257671f51461015a578063295614261461018e57600080fd5b8063025b22bc146100c157806313792a4a146100d6575b600080fd5b6100d46100cf366004612334565b61030f565b005b3480156100e257600080fd5b506100f66100f13660046126d8565b61035b565b6040519081526020015b60405180910390f35b34801561011557600080fd5b5061012961012436600461281f565b6104c6565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610100565b34801561016657600080fd5b506100f67f000000000000000000000000000000000000000000000000000000000000000081565b34801561019a57600080fd5b506100d46101a9366004612852565b61055d565b3480156101ba57600080fd5b506101e27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b34801561021357600080fd5b50610227610222366004612852565b6105a1565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610100565b34801561025f57600080fd5b506101e27f000000000000000000000000000000000000000000000000000000000000000081565b34801561029357600080fd5b506101e26105b6565b3480156102a857600080fd5b506102bc6102b73660046126d8565b6105c5565b604080519687526020870195909552921515938501939093526060840152608083019190915260a082015260c001610100565b3480156102fb57600080fd5b506100d461030a36600461286b565b6106f6565b33301461034f576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b610358816107b1565b50565b60008084610100015151600161037191906128bc565b67ffffffffffffffff8111156103895761038961234f565b6040519080825280602002602001820160405280156103b2578160200160208202803683370190505b50905060005b856101000151518110156104245785610100015181815181106103dd576103dd6128f6565b60200260200101518282815181106103f7576103f76128f6565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016103b8565b503381866101000151518151811061043e5761043e6128f6565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261010085018190526000610478868686610805565b509050806104b8578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161034693929190612ba8565b5060019150505b9392505050565b604080516101208101825260006020820181905260609282018390528282018190526080820181905260a0820183905260c082018190526101008201929092526003815260e08101859052600061051e828686610805565b509050806105325750600091506104bf9050565b507f20c13b0b0000000000000000000000000000000000000000000000000000000095945050505050565b333014610598576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610346565b61035881610ae3565b6000806105ad83610b9f565b91509150915091565b60006105c0305490565b905090565b6000806000806000806105dc898989600080610beb565b9399509197509450925090506106e8836040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b166021820152603581018290527f000000000000000000000000000000000000000000000000000000000000000060558201526000903090607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012073ffffffffffffffffffffffffffffffffffffffff161492915050565b935093975093979195509350565b333014610731576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610346565b61074a8383836bffffffffffffffffffffffff16610f10565b6040805184815273ffffffffffffffffffffffffffffffffffffffff841660208201526bffffffffffffffffffffffff83168183015290517febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19181900360600190a1505050565b6107b9813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039060200160405180910390a150565b60008060008484600081811061081d5761081d6128f6565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f800000000000000000000000000000000000000000000000000000000000000090811690036109725761087a86610f9f565b915060008061088884610b9f565b915091504281116108cf576040517ff95b6ab70000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610346565b73ffffffffffffffffffffffffffffffffffffffff82161580159061090a575073ffffffffffffffffffffffffffffffffffffffff82163314155b15610966576040517f8945c3130000000000000000000000000000000000000000000000000000000081526004810185905233602482015273ffffffffffffffffffffffffffffffffffffffff83166044820152606401610346565b60019450505050610adb565b6000806000610985898989600080610beb565b9850929550909350915050828210156109d4576040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610346565b610ad4816040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b166021820152603581018290527f000000000000000000000000000000000000000000000000000000000000000060558201526000903090607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012073ffffffffffffffffffffffffffffffffffffffff161492915050565b9550505050505b935093915050565b80610b1a576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b437fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9060200160405180910390a16103587f00000000000000000000000000000000000000000000000000000000000000006107b1565b60008080610bcd7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868561101a565b606081901c956bffffffffffffffffffffffff909116945092505050565b6040805180820182526000808252602082018190529182918291829182918a3560f81c91600191808416148015610c36575073ffffffffffffffffffffffffffffffffffffffff8916155b15610d52578b82013560601c985060149091019089610d525760038201918c013560e81c60008d848e610c6985836128bc565b92610c7693929190612bd8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517fccce3bc80000000000000000000000000000000000000000000000000000000081529293505073ffffffffffffffffffffffffffffffffffffffff8d169163ccce3bc89150610d019030908590600401612c02565b6040805180830381865afa158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d419190612c39565b9250610d4d82856128bc565b935050505b82600116600103610d8c57610d7a8d8a838f8f87908092610d7593929190612bd8565b611078565b97509750975097509750505050610f03565b6002838116811460208f015283901c60071660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e850135610100929092039190911c16838201909650925060009050610df76001600586901c8116906128bc565b60016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018f860135610100929092039190911c1699509092019150610e428d610f9f565b9350610e608d858e8e86908092610e5b93929190612bd8565b6112bc565b600090815260208a815260408083208352888252808320835273ffffffffffffffffffffffffffffffffffffffff8d1690915290208251919850965015801590610eab575080518614155b8015610ebb575080602001518511155b15610eff576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528151600482015260208201516024820152604401610346565b5050505b9550955095509550959050565b610f9a7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86847fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166bffffffffffffffffffffffff8516176040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b505050565b600080610fb0836020015130611c4e565b90506000610fbd84611d1c565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101849052604281018290529091506062015b6040516020818303038152906040528051906020012092505050919050565b6000808383604051602001611039929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60008060008060006110da604051806101200160405280600060ff168152602001600015158152602001606081526020016000815260200160008152602001606081526020016000801916815260200160008019168152602001606081525090565b6002815260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b888210156112645760038201916000908b013560e81c61112284826128bc565b9150600090508a8214611136576000611138565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036111905761117f8f8d8d8790869261117793929190612bd8565b600185610beb565b939d50919b509950975095506111b2565b6111a6858d8d8790869261117793929190612bd8565b50929c50909a50985096505b898910156111fe576111c682858d8f612bd8565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016103469493929190612c8a565b819350878d60000151036112115760008d525b828710611254576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810188905260248101849052604401610346565b50505060c0820185905283611102565b8a511580159061127857508a602001518511155b15610eff576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528b51600482015260208c01516024820152604401610346565b60008060005b83811015611c4457600181019085013560f881901c9060fc1c806113df57600f821660008190036112fa5750600183019287013560f81c5b60408051600080825260208281018085528d9052601b8c89019182013560ff81811c928301908116868801529235606086018190527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166080870181905296909a0199959094919390929160019060a0015b6020604051602081039080840390855afa15801561138f573d6000803e3d6000fd5b5050506020604051035190508660ff168c019b5060006113b2828960ff16611f88565b90508b6113bf57806113ce565b60008c81526020829052604090205b9b50505050505050505050506112c2565b6001810361144357600f821660008190036114015750600183019287013560f81c5b601484019388013560601c600061141b8260ff8516611f88565b9050866114285780611437565b60008781526020829052604090205b965050505050506112c2565b60028103611638576003821660008190036114655750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168288018098508192505050600081880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261152393929190612bd8565b6040518463ffffffff1660e01b815260040161154193929190612cb1565b602060405180830381865afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190612ccb565b7fffffffff0000000000000000000000000000000000000000000000000000000016146115f3578c848d8d8b9085926115bd93929190612bd8565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016103469493929190612d0d565b8097508460ff168a019950600061160d858760ff16611f88565b90508961161a5780611629565b60008a81526020829052604090205b995050505050505050506112c2565b6003810361166c576020830192870135846116535780611662565b60008581526020829052604090205b94505050506112c2565b6004810361170f57600f8216600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018a870135610100929092039190911c168583018096508192505050600081860190506000806116e18e8e8e8e8c908892610e5b93929190612bd8565b91509150829750818a019950611701898260009182526020526040902090565b9850505050505050506112c2565b600681036117d9576003600283901c1660008190036117355750600183019287013560f81c5b60038316600081900361174f5750600284019388013560f01c5b6000858a013560e81c600387018162ffffff16915080975081925050506000818701905060008061178d8f8f8f8f8d908892610e5b93929190612bd8565b915091508298508482106117a057998501995b60006117ad828789611fef565b90508a6117ba57806117c9565b60008b81526020829052604090205b9a505050505050505050506112c2565b60058103611846576020830192870135888103611814577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b600061181f82612053565b90508561182c578061183b565b60008681526020829052604090205b9550505050506112c2565b6007810361194c57600f821660008190036118685750600183019287013560f81c5b600080858a0135602087019650915089860135602087016040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018e905290975090915060ff82901c907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690601b830190600090600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff851690820152606081018890526080810185905260a00161136d565b600881036119a057602083019287013560006119688b826120a7565b9050808203611995577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b600061141b82612122565b60098103611ad8576003821660008190036119c25750600183019287013560f81c5b60008489013560601c601486019550905060006003600286901c1660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168188018098508193505050506000818701905060008373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792611a5c93929190612bd8565b6040518463ffffffff1660e01b8152600401611a7a93929190612ba8565b602060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abb9190612d43565b90508197508460ff168a019950600061160d858760ff168461215d565b600a8103611c0f57600382166000819003611afa5750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c1682880180985081925050506000818801905060008473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792611b9393929190612bd8565b6040518463ffffffff1660e01b8152600401611bb193929190612cb1565b602060405180830381865afa158015611bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf29190612d43565b90508198508560ff168b019a5060006117ad868860ff168461215d565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610346565b5094509492505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de85611cbe5746611cc1565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c0015b6040516020818303038152906040528051906020012090505b92915050565b600080826101000151604051602001611d359190612d5c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff16611dde576000611d8684604001516121cb565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c001610ffb565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611e6e5760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ede5760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001611e50565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01611f4e5760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001611e50565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610346565b6040517f53657175656e6365207369676e65723a0a00000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b16603182015260458101829052600090606501611cfd565b6040517f53657175656e6365206e657374656420636f6e6669673a0a000000000000000060208201526038810184905260588101839052607881018290526000906098015b6040516020818303038152906040528051906020012090509392505050565b6040517f53657175656e636520737461746963206469676573743a0a00000000000000006020820152603881018290526000906058015b604051602081830303815290604052805190602001209050919050565b6000806120b8846020015184611c4e565b905060006120c585611d1c565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810184905260428101829052909150606201604051602081830303815290604052805190602001209250505092915050565b604080517f53657175656e636520616e792061646472657373207375626469676573743a0a602082015290810182905260009060600161208a565b6040517f53657175656e63652073617069656e7420636f6e6669673a0a0000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166039820152604d8101839052606d8101829052600090608d01612034565b6000606060005b835181101561224d5760006121ff8583815181106121f2576121f26128f6565b602002602001015161225c565b90508281604051602001612214929190612da8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529250506001016121d2565b50805160209091012092915050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161208a98979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461232f57600080fd5b919050565b60006020828403121561234657600080fd5b6104bf8261230b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156123a1576123a161234f565b60405290565b604051610120810167ffffffffffffffff811182821017156123a1576123a161234f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124125761241261234f565b604052919050565b803560ff8116811461232f57600080fd5b8035801515811461232f57600080fd5b600067ffffffffffffffff8211156124555761245561234f565b5060051b60200190565b600082601f83011261247057600080fd5b813567ffffffffffffffff81111561248a5761248a61234f565b6124bb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016123cb565b8181528460208386010111156124d057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126124fe57600080fd5b813561251161250c8261243b565b6123cb565b8082825260208201915060208360051b86010192508583111561253357600080fd5b602085015b8381101561262057803567ffffffffffffffff81111561255757600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561258b57600080fd5b61259361237e565b61259f6020830161230b565b815260408201356020820152606082013567ffffffffffffffff8111156125c557600080fd5b6125d48a60208386010161245f565b604083015250608082013560608201526125f060a0830161242b565b608082015261260160c0830161242b565b60a082015260e0919091013560c0820152835260209283019201612538565b5095945050505050565b600082601f83011261263b57600080fd5b813561264961250c8261243b565b8082825260208201915060208360051b86010192508583111561266b57600080fd5b602085015b83811015612620576126818161230b565b835260209283019201612670565b60008083601f8401126126a157600080fd5b50813567ffffffffffffffff8111156126b957600080fd5b6020830191508360208285010111156126d157600080fd5b9250929050565b6000806000604084860312156126ed57600080fd5b833567ffffffffffffffff81111561270457600080fd5b8401610120818703121561271757600080fd5b61271f6123a7565b6127288261241a565b81526127366020830161242b565b6020820152604082013567ffffffffffffffff81111561275557600080fd5b612761888285016124ed565b604083015250606082810135908201526080808301359082015260a082013567ffffffffffffffff81111561279557600080fd5b6127a18882850161245f565b60a08301525060c0828101359082015260e0808301359082015261010082013567ffffffffffffffff8111156127d657600080fd5b6127e28882850161262a565b61010083015250935050602084013567ffffffffffffffff81111561280657600080fd5b6128128682870161268f565b9497909650939450505050565b60008060006040848603121561283457600080fd5b83359250602084013567ffffffffffffffff81111561280657600080fd5b60006020828403121561286457600080fd5b5035919050565b60008060006060848603121561288057600080fd5b833592506128906020850161230b565b915060408401356bffffffffffffffffffffffff811681146128b157600080fd5b809150509250925092565b80820180821115611d16577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811015612940578181015183820152602001612928565b50506000910152565b60008151808452612961816020860160208601612925565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b83811015612a63577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852815173ffffffffffffffffffffffffffffffffffffffff815116845260208101516020850152604081015160e06040860152612a1f60e0860182612949565b6060838101519087015260808084015115159087015260a08084015115159087015260c09283015192909501919091525060209788019791909101906001016129b1565b50909695505050505050565b600081518084526020840193506020830160005b82811015612ab757815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101612a83565b5093949350505050565b805160ff16825260006020820151612add602085018215159052565b5060408201516101206040850152612af9610120850182612993565b9050606083015160608501526080830151608085015260a083015184820360a0860152612b268282612949565b91505060c083015160c085015260e083015160e0850152610100830151848203610100860152612b568282612a6f565b95945050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612bbb6040830186612ac1565b8281036020840152612bce818587612b5f565b9695505050505050565b60008085851115612be857600080fd5b83861115612bf557600080fd5b5050820193919092039150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000612c316040830184612949565b949350505050565b60006040828403128015612c4c57600080fd5b506040805190810167ffffffffffffffff81118282101715612c7057612c7061234f565b604052825181526020928301519281019290925250919050565b606081526000612c9e606083018688612b5f565b6020830194909452506040015292915050565b838152604060208201526000612b56604083018486612b5f565b600060208284031215612cdd57600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146104bf57600080fd5b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000612bce606083018486612b5f565b600060208284031215612d5557600080fd5b5051919050565b8151600090829060208501835b82811015612d9d57815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101612d69565b509195945050505050565b60008351612dba818460208801612925565b919091019182525060200191905056fea2646970667358221220495637c0653d9c6ae874bc236c551853ce5caad8e10d3446078722fe1280a1ef64736f6c634300081b0033603e600e3d39601e805130553df33d3d34601c57363d3d373d363d30545af43d82803e903d91601c57fd5bf3", + "deployedBytecode": "0x6080604052600436106100bc5760003560e01c80632dd3100011610074578063aaf10f421161004e578063aaf10f4214610287578063ad55366b1461029c578063f727ef1c146102ef57600080fd5b80632dd31000146101ae57806392dcb3fc146102075780639f69ef541461025357600080fd5b80631626ba7e116100a55780631626ba7e14610109578063257671f51461015a578063295614261461018e57600080fd5b8063025b22bc146100c157806313792a4a146100d6575b600080fd5b6100d46100cf366004612334565b61030f565b005b3480156100e257600080fd5b506100f66100f13660046126d8565b61035b565b6040519081526020015b60405180910390f35b34801561011557600080fd5b5061012961012436600461281f565b6104c6565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610100565b34801561016657600080fd5b506100f67f000000000000000000000000000000000000000000000000000000000000000081565b34801561019a57600080fd5b506100d46101a9366004612852565b61055d565b3480156101ba57600080fd5b506101e27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610100565b34801561021357600080fd5b50610227610222366004612852565b6105a1565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610100565b34801561025f57600080fd5b506101e27f000000000000000000000000000000000000000000000000000000000000000081565b34801561029357600080fd5b506101e26105b6565b3480156102a857600080fd5b506102bc6102b73660046126d8565b6105c5565b604080519687526020870195909552921515938501939093526060840152608083019190915260a082015260c001610100565b3480156102fb57600080fd5b506100d461030a36600461286b565b6106f6565b33301461034f576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b610358816107b1565b50565b60008084610100015151600161037191906128bc565b67ffffffffffffffff8111156103895761038961234f565b6040519080825280602002602001820160405280156103b2578160200160208202803683370190505b50905060005b856101000151518110156104245785610100015181815181106103dd576103dd6128f6565b60200260200101518282815181106103f7576103f76128f6565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016103b8565b503381866101000151518151811061043e5761043e6128f6565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015261010085018190526000610478868686610805565b509050806104b8578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161034693929190612ba8565b5060019150505b9392505050565b604080516101208101825260006020820181905260609282018390528282018190526080820181905260a0820183905260c082018190526101008201929092526003815260e08101859052600061051e828686610805565b509050806105325750600091506104bf9050565b507f20c13b0b0000000000000000000000000000000000000000000000000000000095945050505050565b333014610598576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610346565b61035881610ae3565b6000806105ad83610b9f565b91509150915091565b60006105c0305490565b905090565b6000806000806000806105dc898989600080610beb565b9399509197509450925090506106e8836040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b166021820152603581018290527f000000000000000000000000000000000000000000000000000000000000000060558201526000903090607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012073ffffffffffffffffffffffffffffffffffffffff161492915050565b935093975093979195509350565b333014610731576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610346565b61074a8383836bffffffffffffffffffffffff16610f10565b6040805184815273ffffffffffffffffffffffffffffffffffffffff841660208201526bffffffffffffffffffffffff83168183015290517febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19181900360600190a1505050565b6107b9813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca039060200160405180910390a150565b60008060008484600081811061081d5761081d6128f6565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f800000000000000000000000000000000000000000000000000000000000000090811690036109725761087a86610f9f565b915060008061088884610b9f565b915091504281116108cf576040517ff95b6ab70000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610346565b73ffffffffffffffffffffffffffffffffffffffff82161580159061090a575073ffffffffffffffffffffffffffffffffffffffff82163314155b15610966576040517f8945c3130000000000000000000000000000000000000000000000000000000081526004810185905233602482015273ffffffffffffffffffffffffffffffffffffffff83166044820152606401610346565b60019450505050610adb565b6000806000610985898989600080610beb565b9850929550909350915050828210156109d4576040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610346565b610ad4816040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b166021820152603581018290527f000000000000000000000000000000000000000000000000000000000000000060558201526000903090607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012073ffffffffffffffffffffffffffffffffffffffff161492915050565b9550505050505b935093915050565b80610b1a576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b437fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa9060200160405180910390a16103587f00000000000000000000000000000000000000000000000000000000000000006107b1565b60008080610bcd7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e868561101a565b606081901c956bffffffffffffffffffffffff909116945092505050565b6040805180820182526000808252602082018190529182918291829182918a3560f81c91600191808416148015610c36575073ffffffffffffffffffffffffffffffffffffffff8916155b15610d52578b82013560601c985060149091019089610d525760038201918c013560e81c60008d848e610c6985836128bc565b92610c7693929190612bd8565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517fccce3bc80000000000000000000000000000000000000000000000000000000081529293505073ffffffffffffffffffffffffffffffffffffffff8d169163ccce3bc89150610d019030908590600401612c02565b6040805180830381865afa158015610d1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d419190612c39565b9250610d4d82856128bc565b935050505b82600116600103610d8c57610d7a8d8a838f8f87908092610d7593929190612bd8565b611078565b97509750975097509750505050610f03565b6002838116811460208f015283901c60071660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e850135610100929092039190911c16838201909650925060009050610df76001600586901c8116906128bc565b60016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018f860135610100929092039190911c1699509092019150610e428d610f9f565b9350610e608d858e8e86908092610e5b93929190612bd8565b6112bc565b600090815260208a815260408083208352888252808320835273ffffffffffffffffffffffffffffffffffffffff8d1690915290208251919850965015801590610eab575080518614155b8015610ebb575080602001518511155b15610eff576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528151600482015260208201516024820152604401610346565b5050505b9550955095509550959050565b610f9a7fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86847fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166bffffffffffffffffffffffff8516176040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b505050565b600080610fb0836020015130611c4e565b90506000610fbd84611d1c565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101849052604281018290529091506062015b6040516020818303038152906040528051906020012092505050919050565b6000808383604051602001611039929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b60008060008060006110da604051806101200160405280600060ff168152602001600015158152602001606081526020016000815260200160008152602001606081526020016000801916815260200160008019168152602001606081525090565b6002815260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b888210156112645760038201916000908b013560e81c61112284826128bc565b9150600090508a8214611136576000611138565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83036111905761117f8f8d8d8790869261117793929190612bd8565b600185610beb565b939d50919b509950975095506111b2565b6111a6858d8d8790869261117793929190612bd8565b50929c50909a50985096505b898910156111fe576111c682858d8f612bd8565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016103469493929190612c8a565b819350878d60000151036112115760008d525b828710611254576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810188905260248101849052604401610346565b50505060c0820185905283611102565b8a511580159061127857508a602001518511155b15610eff576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528b51600482015260208c01516024820152604401610346565b60008060005b83811015611c4457600181019085013560f881901c9060fc1c806113df57600f821660008190036112fa5750600183019287013560f81c5b60408051600080825260208281018085528d9052601b8c89019182013560ff81811c928301908116868801529235606086018190527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166080870181905296909a0199959094919390929160019060a0015b6020604051602081039080840390855afa15801561138f573d6000803e3d6000fd5b5050506020604051035190508660ff168c019b5060006113b2828960ff16611f88565b90508b6113bf57806113ce565b60008c81526020829052604090205b9b50505050505050505050506112c2565b6001810361144357600f821660008190036114015750600183019287013560f81c5b601484019388013560601c600061141b8260ff8516611f88565b9050866114285780611437565b60008781526020829052604090205b965050505050506112c2565b60028103611638576003821660008190036114655750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168288018098508192505050600081880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d90879261152393929190612bd8565b6040518463ffffffff1660e01b815260040161154193929190612cb1565b602060405180830381865afa15801561155e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115829190612ccb565b7fffffffff0000000000000000000000000000000000000000000000000000000016146115f3578c848d8d8b9085926115bd93929190612bd8565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016103469493929190612d0d565b8097508460ff168a019950600061160d858760ff16611f88565b90508961161a5780611629565b60008a81526020829052604090205b995050505050505050506112c2565b6003810361166c576020830192870135846116535780611662565b60008581526020829052604090205b94505050506112c2565b6004810361170f57600f8216600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018a870135610100929092039190911c168583018096508192505050600081860190506000806116e18e8e8e8e8c908892610e5b93929190612bd8565b91509150829750818a019950611701898260009182526020526040902090565b9850505050505050506112c2565b600681036117d9576003600283901c1660008190036117355750600183019287013560f81c5b60038316600081900361174f5750600284019388013560f01c5b6000858a013560e81c600387018162ffffff16915080975081925050506000818701905060008061178d8f8f8f8f8d908892610e5b93929190612bd8565b915091508298508482106117a057998501995b60006117ad828789611fef565b90508a6117ba57806117c9565b60008b81526020829052604090205b9a505050505050505050506112c2565b60058103611846576020830192870135888103611814577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b600061181f82612053565b90508561182c578061183b565b60008681526020829052604090205b9550505050506112c2565b6007810361194c57600f821660008190036118685750600183019287013560f81c5b600080858a0135602087019650915089860135602087016040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018e905290975090915060ff82901c907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690601b830190600090600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff851690820152606081018890526080810185905260a00161136d565b600881036119a057602083019287013560006119688b826120a7565b9050808203611995577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b600061141b82612122565b60098103611ad8576003821660008190036119c25750600183019287013560f81c5b60008489013560601c601486019550905060006003600286901c1660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168188018098508193505050506000818701905060008373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c908792611a5c93929190612bd8565b6040518463ffffffff1660e01b8152600401611a7a93929190612ba8565b602060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abb9190612d43565b90508197508460ff168a019950600061160d858760ff168461215d565b600a8103611c0f57600382166000819003611afa5750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c1682880180985081925050506000818801905060008473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d908792611b9393929190612bd8565b6040518463ffffffff1660e01b8152600401611bb193929190612cb1565b602060405180830381865afa158015611bce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf29190612d43565b90508198508560ff168b019a5060006117ad868860ff168461215d565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610346565b5094509492505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de85611cbe5746611cc1565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c0015b6040516020818303038152906040528051906020012090505b92915050565b600080826101000151604051602001611d359190612d5c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff16611dde576000611d8684604001516121cb565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c001610ffb565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611e6e5760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611ede5760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001611e50565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01611f4e5760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001611e50565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610346565b6040517f53657175656e6365207369676e65723a0a00000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b16603182015260458101829052600090606501611cfd565b6040517f53657175656e6365206e657374656420636f6e6669673a0a000000000000000060208201526038810184905260588101839052607881018290526000906098015b6040516020818303038152906040528051906020012090509392505050565b6040517f53657175656e636520737461746963206469676573743a0a00000000000000006020820152603881018290526000906058015b604051602081830303815290604052805190602001209050919050565b6000806120b8846020015184611c4e565b905060006120c585611d1c565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810184905260428101829052909150606201604051602081830303815290604052805190602001209250505092915050565b604080517f53657175656e636520616e792061646472657373207375626469676573743a0a602082015290810182905260009060600161208a565b6040517f53657175656e63652073617069656e7420636f6e6669673a0a0000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166039820152604d8101839052606d8101829052600090608d01612034565b6000606060005b835181101561224d5760006121ff8583815181106121f2576121f26128f6565b602002602001015161225c565b90508281604051602001612214929190612da8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529250506001016121d2565b50805160209091012092915050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c0015160405160200161208a98979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461232f57600080fd5b919050565b60006020828403121561234657600080fd5b6104bf8261230b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156123a1576123a161234f565b60405290565b604051610120810167ffffffffffffffff811182821017156123a1576123a161234f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124125761241261234f565b604052919050565b803560ff8116811461232f57600080fd5b8035801515811461232f57600080fd5b600067ffffffffffffffff8211156124555761245561234f565b5060051b60200190565b600082601f83011261247057600080fd5b813567ffffffffffffffff81111561248a5761248a61234f565b6124bb60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016123cb565b8181528460208386010111156124d057600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f8301126124fe57600080fd5b813561251161250c8261243b565b6123cb565b8082825260208201915060208360051b86010192508583111561253357600080fd5b602085015b8381101561262057803567ffffffffffffffff81111561255757600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561258b57600080fd5b61259361237e565b61259f6020830161230b565b815260408201356020820152606082013567ffffffffffffffff8111156125c557600080fd5b6125d48a60208386010161245f565b604083015250608082013560608201526125f060a0830161242b565b608082015261260160c0830161242b565b60a082015260e0919091013560c0820152835260209283019201612538565b5095945050505050565b600082601f83011261263b57600080fd5b813561264961250c8261243b565b8082825260208201915060208360051b86010192508583111561266b57600080fd5b602085015b83811015612620576126818161230b565b835260209283019201612670565b60008083601f8401126126a157600080fd5b50813567ffffffffffffffff8111156126b957600080fd5b6020830191508360208285010111156126d157600080fd5b9250929050565b6000806000604084860312156126ed57600080fd5b833567ffffffffffffffff81111561270457600080fd5b8401610120818703121561271757600080fd5b61271f6123a7565b6127288261241a565b81526127366020830161242b565b6020820152604082013567ffffffffffffffff81111561275557600080fd5b612761888285016124ed565b604083015250606082810135908201526080808301359082015260a082013567ffffffffffffffff81111561279557600080fd5b6127a18882850161245f565b60a08301525060c0828101359082015260e0808301359082015261010082013567ffffffffffffffff8111156127d657600080fd5b6127e28882850161262a565b61010083015250935050602084013567ffffffffffffffff81111561280657600080fd5b6128128682870161268f565b9497909650939450505050565b60008060006040848603121561283457600080fd5b83359250602084013567ffffffffffffffff81111561280657600080fd5b60006020828403121561286457600080fd5b5035919050565b60008060006060848603121561288057600080fd5b833592506128906020850161230b565b915060408401356bffffffffffffffffffffffff811681146128b157600080fd5b809150509250925092565b80820180821115611d16577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b83811015612940578181015183820152602001612928565b50506000910152565b60008151808452612961816020860160208601612925565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b83811015612a63577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852815173ffffffffffffffffffffffffffffffffffffffff815116845260208101516020850152604081015160e06040860152612a1f60e0860182612949565b6060838101519087015260808084015115159087015260a08084015115159087015260c09283015192909501919091525060209788019791909101906001016129b1565b50909695505050505050565b600081518084526020840193506020830160005b82811015612ab757815173ffffffffffffffffffffffffffffffffffffffff16865260209586019590910190600101612a83565b5093949350505050565b805160ff16825260006020820151612add602085018215159052565b5060408201516101206040850152612af9610120850182612993565b9050606083015160608501526080830151608085015260a083015184820360a0860152612b268282612949565b91505060c083015160c085015260e083015160e0850152610100830151848203610100860152612b568282612a6f565b95945050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612bbb6040830186612ac1565b8281036020840152612bce818587612b5f565b9695505050505050565b60008085851115612be857600080fd5b83861115612bf557600080fd5b5050820193919092039150565b73ffffffffffffffffffffffffffffffffffffffff83168152604060208201526000612c316040830184612949565b949350505050565b60006040828403128015612c4c57600080fd5b506040805190810167ffffffffffffffff81118282101715612c7057612c7061234f565b604052825181526020928301519281019290925250919050565b606081526000612c9e606083018688612b5f565b6020830194909452506040015292915050565b838152604060208201526000612b56604083018486612b5f565b600060208284031215612cdd57600080fd5b81517fffffffff00000000000000000000000000000000000000000000000000000000811681146104bf57600080fd5b84815273ffffffffffffffffffffffffffffffffffffffff84166020820152606060408201526000612bce606083018486612b5f565b600060208284031215612d5557600080fd5b5051919050565b8151600090829060208501835b82811015612d9d57815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101612d69565b509195945050505050565b60008351612dba818460208801612925565b919091019182525060200191905056fea2646970667358221220495637c0653d9c6ae874bc236c551853ce5caad8e10d3446078722fe1280a1ef64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/auth/Stage2Auth.sol/Stage2Auth.json b/testchain/artifacts/wallet-contracts-v3/modules/auth/Stage2Auth.sol/Stage2Auth.json new file mode 100644 index 000000000..90b8b5b76 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/auth/Stage2Auth.sol/Stage2Auth.json @@ -0,0 +1,698 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Stage2Auth", + "sourceName": "src/modules/auth/Stage2Auth.sol", + "abi": [ + { + "inputs": [], + "name": "ImageHashIsZero", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_signer", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidERC1271Signature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + } + ], + "name": "InvalidKind", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "InvalidSapientSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_flag", + "type": "uint256" + } + ], + "name": "InvalidSignatureFlag", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "InvalidSignatureWeight", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_expires", + "type": "uint256" + } + ], + "name": "InvalidStaticSignatureExpired", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_caller", + "type": "address" + }, + { + "internalType": "address", + "name": "_expectedCaller", + "type": "address" + } + ], + "name": "InvalidStaticSignatureWrongCaller", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_weight", + "type": "uint256" + } + ], + "name": "LowWeightChainedSignature", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_sender", + "type": "address" + } + ], + "name": "OnlySelf", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "_snapshot", + "type": "tuple" + } + ], + "name": "UnusedSnapshot", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_nextCheckpoint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_checkpoint", + "type": "uint256" + } + ], + "name": "WrongChainedCheckpointOrder", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "newImageHash", + "type": "bytes32" + } + ], + "name": "ImageHashUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "ImplementationUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "StaticSignatureSet", + "type": "event" + }, + { + "inputs": [], + "name": "getImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + } + ], + "name": "getStaticSignature", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "imageHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_address", + "type": "address" + }, + { + "internalType": "uint96", + "name": "_timestamp", + "type": "uint96" + } + ], + "name": "setStaticSignature", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_imageHash", + "type": "bytes32" + } + ], + "name": "updateImageHash", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_implementation", + "type": "address" + } + ], + "name": "updateImplementation", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b50612b9a8061001f6000396000f3fe6080604052600436106100965760003560e01c806351605d8011610069578063aaf10f421161004e578063aaf10f42146101b5578063ad55366b146101ef578063f727ef1c1461024257600080fd5b806351605d801461015457806392dcb3fc1461016957600080fd5b8063025b22bc1461009b57806313792a4a146100b05780631626ba7e146100e35780632956142614610134575b600080fd5b6100ae6100a93660046120ce565b610262565b005b3480156100bc57600080fd5b506100d06100cb366004612472565b6102ae565b6040519081526020015b60405180910390f35b3480156100ef57600080fd5b506101036100fe3660046125b9565b610419565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100da565b34801561014057600080fd5b506100ae61014f3660046125ec565b6104b0565b34801561016057600080fd5b506100d06104f4565b34801561017557600080fd5b506101896101843660046125ec565b610523565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016100da565b3480156101c157600080fd5b506101ca610538565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100da565b3480156101fb57600080fd5b5061020f61020a366004612472565b610542565b604080519687526020870195909552921515938501939093526060840152608083019190915260a082015260c0016100da565b34801561024e57600080fd5b506100ae61025d366004612605565b61057c565b3330146102a2576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6102ab81610637565b50565b6000808461010001515160016102c49190612656565b67ffffffffffffffff8111156102dc576102dc6120e9565b604051908082528060200260200182016040528015610305578160200160208202803683370190505b50905060005b8561010001515181101561037757856101000151818151811061033057610330612690565b602002602001015182828151811061034a5761034a612690565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161030b565b503381866101000151518151811061039157610391612690565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152610100850181905260006103cb86868661068c565b5090508061040b578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161029993929190612942565b5060019150505b9392505050565b604080516101208101825260006020820181905260609282018390528282018190526080820181905260a0820183905260c082018190526101008201929092526003815260e08101859052600061047182868661068c565b509050806104855750600091506104129050565b507f20c13b0b0000000000000000000000000000000000000000000000000000000095945050505050565b3330146104eb576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610299565b6102ab81610873565b600061051e7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b60008061052f83610903565b91509150915091565b600061051e305490565b60008060008060008061055989898960008061094f565b93995091975094509250905061056e83610c74565b935093975093979195509350565b3330146105b7576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610299565b6105d08383836bffffffffffffffffffffffff16610cab565b6040805184815273ffffffffffffffffffffffffffffffffffffffff841660208201526bffffffffffffffffffffffff83168183015290517febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19181900360600190a1505050565b61063f813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b6000806000848460008181106106a4576106a4612690565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f800000000000000000000000000000000000000000000000000000000000000090811690036107f95761070186610d3a565b915060008061070f84610903565b91509150428111610756576040517ff95b6ab70000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610299565b73ffffffffffffffffffffffffffffffffffffffff821615801590610791575073ffffffffffffffffffffffffffffffffffffffff82163314155b156107ed576040517f8945c3130000000000000000000000000000000000000000000000000000000081526004810185905233602482015273ffffffffffffffffffffffffffffffffffffffff83166044820152606401610299565b6001945050505061086b565b600080600061080c89898960008061094f565b98509295509093509150508282101561085b576040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610299565b61086481610c74565b9550505050505b935093915050565b806108aa576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d37fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001610681565b600080806109317fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8685610db5565b606081901c956bffffffffffffffffffffffff909116945092505050565b6040805180820182526000808252602082018190529182918291829182918a3560f81c9160019180841614801561099a575073ffffffffffffffffffffffffffffffffffffffff8916155b15610ab6578b82013560601c985060149091019089610ab65760038201918c013560e81c60008d848e6109cd8583612656565b926109da93929190612972565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517fccce3bc80000000000000000000000000000000000000000000000000000000081529293505073ffffffffffffffffffffffffffffffffffffffff8d169163ccce3bc89150610a65903090859060040161299c565b6040805180830381865afa158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa591906129d3565b9250610ab18285612656565b935050505b82600116600103610af057610ade8d8a838f8f87908092610ad993929190612972565b610e13565b97509750975097509750505050610c67565b6002838116811460208f015283901c60071660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e850135610100929092039190911c16838201909650925060009050610b5b6001600586901c811690612656565b60016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018f860135610100929092039190911c1699509092019150610ba68d610d3a565b9350610bc48d858e8e86908092610bbf93929190612972565b611057565b600090815260208a815260408083208352888252808320835273ffffffffffffffffffffffffffffffffffffffff8d1690915290208251919850965015801590610c0f575080518614155b8015610c1f575080602001518511155b15610c63576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528151600482015260208201516024820152604401610299565b5050505b9550955095509550959050565b60008115801590610ca557507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85482145b92915050565b610d357fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86847fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166bffffffffffffffffffffffff8516176040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b505050565b600080610d4b8360200151306119e9565b90506000610d5884611ab6565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101849052604281018290529091506062015b6040516020818303038152906040528051906020012092505050919050565b6000808383604051602001610dd4929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b6000806000806000610e75604051806101200160405280600060ff168152602001600015158152602001606081526020016000815260200160008152602001606081526020016000801916815260200160008019168152602001606081525090565b6002815260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b88821015610fff5760038201916000908b013560e81c610ebd8482612656565b9150600090508a8214610ed1576000610ed3565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303610f2b57610f1a8f8d8d87908692610f1293929190612972565b60018561094f565b939d50919b50995097509550610f4d565b610f41858d8d87908692610f1293929190612972565b50929c50909a50985096505b89891015610f9957610f6182858d8f612972565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016102999493929190612a24565b819350878d6000015103610fac5760008d525b828710610fef576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810188905260248101849052604401610299565b50505060c0820185905283610e9d565b8a511580159061101357508a602001518511155b15610c63576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528b51600482015260208c01516024820152604401610299565b60008060005b838110156119df57600181019085013560f881901c9060fc1c8061117a57600f821660008190036110955750600183019287013560f81c5b60408051600080825260208281018085528d9052601b8c89019182013560ff81811c928301908116868801529235606086018190527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166080870181905296909a0199959094919390929160019060a0015b6020604051602081039080840390855afa15801561112a573d6000803e3d6000fd5b5050506020604051035190508660ff168c019b50600061114d828960ff16611d22565b90508b61115a5780611169565b60008c81526020829052604090205b9b505050505050505050505061105d565b600181036111de57600f8216600081900361119c5750600183019287013560f81c5b601484019388013560601c60006111b68260ff8516611d22565b9050866111c357806111d2565b60008781526020829052604090205b9650505050505061105d565b600281036113d3576003821660008190036112005750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168288018098508192505050600081880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d9087926112be93929190612972565b6040518463ffffffff1660e01b81526004016112dc93929190612a4b565b602060405180830381865afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d9190612a65565b7fffffffff00000000000000000000000000000000000000000000000000000000161461138e578c848d8d8b90859261135893929190612972565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016102999493929190612aa7565b8097508460ff168a01995060006113a8858760ff16611d22565b9050896113b557806113c4565b60008a81526020829052604090205b9950505050505050505061105d565b60038103611407576020830192870135846113ee57806113fd565b60008581526020829052604090205b945050505061105d565b600481036114aa57600f8216600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018a870135610100929092039190911c1685830180965081925050506000818601905060008061147c8e8e8e8e8c908892610bbf93929190612972565b91509150829750818a01995061149c898260009182526020526040902090565b98505050505050505061105d565b60068103611574576003600283901c1660008190036114d05750600183019287013560f81c5b6003831660008190036114ea5750600284019388013560f01c5b6000858a013560e81c600387018162ffffff1691508097508192505050600081870190506000806115288f8f8f8f8d908892610bbf93929190612972565b9150915082985084821061153b57998501995b6000611548828789611d89565b90508a6115555780611564565b60008b81526020829052604090205b9a5050505050505050505061105d565b600581036115e15760208301928701358881036115af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b60006115ba82611ded565b9050856115c757806115d6565b60008681526020829052604090205b95505050505061105d565b600781036116e757600f821660008190036116035750600183019287013560f81c5b600080858a0135602087019650915089860135602087016040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018e905290975090915060ff82901c907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690601b830190600090600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff851690820152606081018890526080810185905260a001611108565b6008810361173b57602083019287013560006117038b82611e41565b9050808203611730577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b60006111b682611ebc565b600981036118735760038216600081900361175d5750600183019287013560f81c5b60008489013560601c601486019550905060006003600286901c1660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168188018098508193505050506000818701905060008373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c9087926117f793929190612972565b6040518463ffffffff1660e01b815260040161181593929190612942565b602060405180830381865afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190612add565b90508197508460ff168a01995060006113a8858760ff1684611ef7565b600a81036119aa576003821660008190036118955750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c1682880180985081925050506000818801905060008473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d90879261192e93929190612972565b6040518463ffffffff1660e01b815260040161194c93929190612a4b565b602060405180830381865afa158015611969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198d9190612add565b90508198508560ff168b019a506000611548868860ff1684611ef7565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610299565b5094509492505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de85611a595746611a5c565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c0015b60405160208183030381529060405280519060200120905092915050565b600080826101000151604051602001611acf9190612af6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff16611b78576000611b208460400151611f65565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c001610d96565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c085760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c785760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001611bea565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01611ce85760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001611bea565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610299565b6040517f53657175656e6365207369676e65723a0a00000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b16603182015260458101829052600090606501611a98565b6040517f53657175656e6365206e657374656420636f6e6669673a0a000000000000000060208201526038810184905260588101839052607881018290526000906098015b6040516020818303038152906040528051906020012090509392505050565b6040517f53657175656e636520737461746963206469676573743a0a00000000000000006020820152603881018290526000906058015b604051602081830303815290604052805190602001209050919050565b600080611e528460200151846119e9565b90506000611e5f85611ab6565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810184905260428101829052909150606201604051602081830303815290604052805190602001209250505092915050565b604080517f53657175656e636520616e792061646472657373207375626469676573743a0a6020820152908101829052600090606001611e24565b6040517f53657175656e63652073617069656e7420636f6e6669673a0a0000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166039820152604d8101839052606d8101829052600090608d01611dce565b6000606060005b8351811015611fe7576000611f99858381518110611f8c57611f8c612690565b6020026020010151611ff6565b90508281604051602001611fae929190612b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052925050600101611f6c565b50805160209091012092915050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c00151604051602001611e2498979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b803573ffffffffffffffffffffffffffffffffffffffff811681146120c957600080fd5b919050565b6000602082840312156120e057600080fd5b610412826120a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561213b5761213b6120e9565b60405290565b604051610120810167ffffffffffffffff8111828210171561213b5761213b6120e9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156121ac576121ac6120e9565b604052919050565b803560ff811681146120c957600080fd5b803580151581146120c957600080fd5b600067ffffffffffffffff8211156121ef576121ef6120e9565b5060051b60200190565b600082601f83011261220a57600080fd5b813567ffffffffffffffff811115612224576122246120e9565b61225560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612165565b81815284602083860101111561226a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261229857600080fd5b81356122ab6122a6826121d5565b612165565b8082825260208201915060208360051b8601019250858311156122cd57600080fd5b602085015b838110156123ba57803567ffffffffffffffff8111156122f157600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561232557600080fd5b61232d612118565b612339602083016120a5565b815260408201356020820152606082013567ffffffffffffffff81111561235f57600080fd5b61236e8a6020838601016121f9565b6040830152506080820135606082015261238a60a083016121c5565b608082015261239b60c083016121c5565b60a082015260e0919091013560c08201528352602092830192016122d2565b5095945050505050565b600082601f8301126123d557600080fd5b81356123e36122a6826121d5565b8082825260208201915060208360051b86010192508583111561240557600080fd5b602085015b838110156123ba5761241b816120a5565b83526020928301920161240a565b60008083601f84011261243b57600080fd5b50813567ffffffffffffffff81111561245357600080fd5b60208301915083602082850101111561246b57600080fd5b9250929050565b60008060006040848603121561248757600080fd5b833567ffffffffffffffff81111561249e57600080fd5b840161012081870312156124b157600080fd5b6124b9612141565b6124c2826121b4565b81526124d0602083016121c5565b6020820152604082013567ffffffffffffffff8111156124ef57600080fd5b6124fb88828501612287565b604083015250606082810135908201526080808301359082015260a082013567ffffffffffffffff81111561252f57600080fd5b61253b888285016121f9565b60a08301525060c0828101359082015260e0808301359082015261010082013567ffffffffffffffff81111561257057600080fd5b61257c888285016123c4565b61010083015250935050602084013567ffffffffffffffff8111156125a057600080fd5b6125ac86828701612429565b9497909650939450505050565b6000806000604084860312156125ce57600080fd5b83359250602084013567ffffffffffffffff8111156125a057600080fd5b6000602082840312156125fe57600080fd5b5035919050565b60008060006060848603121561261a57600080fd5b8335925061262a602085016120a5565b915060408401356bffffffffffffffffffffffff8116811461264b57600080fd5b809150509250925092565b80820180821115610ca5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b838110156126da5781810151838201526020016126c2565b50506000910152565b600081518084526126fb8160208601602086016126bf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b838110156127fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852815173ffffffffffffffffffffffffffffffffffffffff815116845260208101516020850152604081015160e060408601526127b960e08601826126e3565b6060838101519087015260808084015115159087015260a08084015115159087015260c092830151929095019190915250602097880197919091019060010161274b565b50909695505050505050565b600081518084526020840193506020830160005b8281101561285157815173ffffffffffffffffffffffffffffffffffffffff1686526020958601959091019060010161281d565b5093949350505050565b805160ff16825260006020820151612877602085018215159052565b506040820151610120604085015261289361012085018261272d565b9050606083015160608501526080830151608085015260a083015184820360a08601526128c082826126e3565b91505060c083015160c085015260e083015160e08501526101008301518482036101008601526128f08282612809565b95945050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612955604083018661285b565b82810360208401526129688185876128f9565b9695505050505050565b6000808585111561298257600080fd5b8386111561298f57600080fd5b5050820193919092039150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006129cb60408301846126e3565b949350505050565b600060408284031280156129e657600080fd5b506040805190810167ffffffffffffffff81118282101715612a0a57612a0a6120e9565b604052825181526020928301519281019290925250919050565b606081526000612a386060830186886128f9565b6020830194909452506040015292915050565b8381526040602082015260006128f06040830184866128f9565b600060208284031215612a7757600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461041257600080fd5b84815273ffffffffffffffffffffffffffffffffffffffff841660208201526060604082015260006129686060830184866128f9565b600060208284031215612aef57600080fd5b5051919050565b8151600090829060208501835b82811015612b3757815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101612b03565b509195945050505050565b60008351612b548184602088016126bf565b919091019182525060200191905056fea26469706673582212200740f74ffe3bb3a2baa83f05055f31efc15f84a392b895de79af282daafa822264736f6c634300081b0033", + "deployedBytecode": "0x6080604052600436106100965760003560e01c806351605d8011610069578063aaf10f421161004e578063aaf10f42146101b5578063ad55366b146101ef578063f727ef1c1461024257600080fd5b806351605d801461015457806392dcb3fc1461016957600080fd5b8063025b22bc1461009b57806313792a4a146100b05780631626ba7e146100e35780632956142614610134575b600080fd5b6100ae6100a93660046120ce565b610262565b005b3480156100bc57600080fd5b506100d06100cb366004612472565b6102ae565b6040519081526020015b60405180910390f35b3480156100ef57600080fd5b506101036100fe3660046125b9565b610419565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016100da565b34801561014057600080fd5b506100ae61014f3660046125ec565b6104b0565b34801561016057600080fd5b506100d06104f4565b34801561017557600080fd5b506101896101843660046125ec565b610523565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152016100da565b3480156101c157600080fd5b506101ca610538565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100da565b3480156101fb57600080fd5b5061020f61020a366004612472565b610542565b604080519687526020870195909552921515938501939093526060840152608083019190915260a082015260c0016100da565b34801561024e57600080fd5b506100ae61025d366004612605565b61057c565b3330146102a2576040517fa19dbf000000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6102ab81610637565b50565b6000808461010001515160016102c49190612656565b67ffffffffffffffff8111156102dc576102dc6120e9565b604051908082528060200260200182016040528015610305578160200160208202803683370190505b50905060005b8561010001515181101561037757856101000151818151811061033057610330612690565b602002602001015182828151811061034a5761034a612690565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161030b565b503381866101000151518151811061039157610391612690565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152610100850181905260006103cb86868661068c565b5090508061040b578585856040517ff58cc8b500000000000000000000000000000000000000000000000000000000815260040161029993929190612942565b5060019150505b9392505050565b604080516101208101825260006020820181905260609282018390528282018190526080820181905260a0820183905260c082018190526101008201929092526003815260e08101859052600061047182868661068c565b509050806104855750600091506104129050565b507f20c13b0b0000000000000000000000000000000000000000000000000000000095945050505050565b3330146104eb576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610299565b6102ab81610873565b600061051e7fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85490565b905090565b60008061052f83610903565b91509150915091565b600061051e305490565b60008060008060008061055989898960008061094f565b93995091975094509250905061056e83610c74565b935093975093979195509350565b3330146105b7576040517fa19dbf00000000000000000000000000000000000000000000000000000000008152336004820152602401610299565b6105d08383836bffffffffffffffffffffffff16610cab565b6040805184815273ffffffffffffffffffffffffffffffffffffffff841660208201526bffffffffffffffffffffffff83168183015290517febf265acfac1c01de588ed7ef49743b9c3ce8d6d1edeaf510a1f5453228515b19181900360600190a1505050565b61063f813055565b60405173ffffffffffffffffffffffffffffffffffffffff821681527f310ba5f1d2ed074b51e2eccd052a47ae9ab7c6b800d1fca3db3999d6a592ca03906020015b60405180910390a150565b6000806000848460008181106106a4576106a4612690565b7fff000000000000000000000000000000000000000000000000000000000000009201359182169250507f800000000000000000000000000000000000000000000000000000000000000090811690036107f95761070186610d3a565b915060008061070f84610903565b91509150428111610756576040517ff95b6ab70000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610299565b73ffffffffffffffffffffffffffffffffffffffff821615801590610791575073ffffffffffffffffffffffffffffffffffffffff82163314155b156107ed576040517f8945c3130000000000000000000000000000000000000000000000000000000081526004810185905233602482015273ffffffffffffffffffffffffffffffffffffffff83166044820152606401610299565b6001945050505061086b565b600080600061080c89898960008061094f565b98509295509093509150508282101561085b576040517ffd41fcba0000000000000000000000000000000000000000000000000000000081526004810184905260248101839052604401610299565b61086481610c74565b9550505050505b935093915050565b806108aa576040517f4294d12700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108d37fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf8829055565b6040518181527f307ed6bd941ee9fc80f369c94af5fa11e25bab5102a6140191756c5474a30bfa90602001610681565b600080806109317fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e8685610db5565b606081901c956bffffffffffffffffffffffff909116945092505050565b6040805180820182526000808252602082018190529182918291829182918a3560f81c9160019180841614801561099a575073ffffffffffffffffffffffffffffffffffffffff8916155b15610ab6578b82013560601c985060149091019089610ab65760038201918c013560e81c60008d848e6109cd8583612656565b926109da93929190612972565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040517fccce3bc80000000000000000000000000000000000000000000000000000000081529293505073ffffffffffffffffffffffffffffffffffffffff8d169163ccce3bc89150610a65903090859060040161299c565b6040805180830381865afa158015610a81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa591906129d3565b9250610ab18285612656565b935050505b82600116600103610af057610ade8d8a838f8f87908092610ad993929190612972565b610e13565b97509750975097509750505050610c67565b6002838116811460208f015283901c60071660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018e850135610100929092039190911c16838201909650925060009050610b5b6001600586901c811690612656565b60016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018f860135610100929092039190911c1699509092019150610ba68d610d3a565b9350610bc48d858e8e86908092610bbf93929190612972565b611057565b600090815260208a815260408083208352888252808320835273ffffffffffffffffffffffffffffffffffffffff8d1690915290208251919850965015801590610c0f575080518614155b8015610c1f575080602001518511155b15610c63576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528151600482015260208201516024820152604401610299565b5050505b9550955095509550959050565b60008115801590610ca557507fea7157fa25e3aa17d0ae2d5280fa4e24d421c61842aa85e45194e1145aa72bf85482145b92915050565b610d357fc852adf5e97c2fc3b38f405671e91b7af1697ef0287577f227ef10494c2a8e86847fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166bffffffffffffffffffffffff8516176040805160208082019590955280820193909352805180840382018152606090930190528151919092012055565b505050565b600080610d4b8360200151306119e9565b90506000610d5884611ab6565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101849052604281018290529091506062015b6040516020818303038152906040528051906020012092505050919050565b6000808383604051602001610dd4929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012054949350505050565b6000806000806000610e75604051806101200160405280600060ff168152602001600015158152602001606081526020016000815260200160008152602001606081526020016000801916815260200160008019168152602001606081525090565b6002815260007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b88821015610fff5760038201916000908b013560e81c610ebd8482612656565b9150600090508a8214610ed1576000610ed3565b8d5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8303610f2b57610f1a8f8d8d87908692610f1293929190612972565b60018561094f565b939d50919b50995097509550610f4d565b610f41858d8d87908692610f1293929190612972565b50929c50909a50985096505b89891015610f9957610f6182858d8f612972565b8b8b6040517fb006aba00000000000000000000000000000000000000000000000000000000081526004016102999493929190612a24565b819350878d6000015103610fac5760008d525b828710610fef576040517f37daf62b0000000000000000000000000000000000000000000000000000000081526004810188905260248101849052604401610299565b50505060c0820185905283610e9d565b8a511580159061101357508a602001518511155b15610c63576040517fccbb534f0000000000000000000000000000000000000000000000000000000081528b51600482015260208c01516024820152604401610299565b60008060005b838110156119df57600181019085013560f881901c9060fc1c8061117a57600f821660008190036110955750600183019287013560f81c5b60408051600080825260208281018085528d9052601b8c89019182013560ff81811c928301908116868801529235606086018190527f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82166080870181905296909a0199959094919390929160019060a0015b6020604051602081039080840390855afa15801561112a573d6000803e3d6000fd5b5050506020604051035190508660ff168c019b50600061114d828960ff16611d22565b90508b61115a5780611169565b60008c81526020829052604090205b9b505050505050505050505061105d565b600181036111de57600f8216600081900361119c5750600183019287013560f81c5b601484019388013560601c60006111b68260ff8516611d22565b9050866111c357806111d2565b60008781526020829052604090205b9650505050505061105d565b600281036113d3576003821660008190036112005750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168288018098508192505050600081880190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168473ffffffffffffffffffffffffffffffffffffffff16631626ba7e8f8f8f8d9087926112be93929190612972565b6040518463ffffffff1660e01b81526004016112dc93929190612a4b565b602060405180830381865afa1580156112f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131d9190612a65565b7fffffffff00000000000000000000000000000000000000000000000000000000161461138e578c848d8d8b90859261135893929190612972565b6040517fb2fed7ae0000000000000000000000000000000000000000000000000000000081526004016102999493929190612aa7565b8097508460ff168a01995060006113a8858760ff16611d22565b9050896113b557806113c4565b60008a81526020829052604090205b9950505050505050505061105d565b60038103611407576020830192870135846113ee57806113fd565b60008581526020829052604090205b945050505061105d565b600481036114aa57600f8216600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018a870135610100929092039190911c1685830180965081925050506000818601905060008061147c8e8e8e8e8c908892610bbf93929190612972565b91509150829750818a01995061149c898260009182526020526040902090565b98505050505050505061105d565b60068103611574576003600283901c1660008190036114d05750600183019287013560f81c5b6003831660008190036114ea5750600284019388013560f01c5b6000858a013560e81c600387018162ffffff1691508097508192505050600081870190506000806115288f8f8f8f8d908892610bbf93929190612972565b9150915082985084821061153b57998501995b6000611548828789611d89565b90508a6115555780611564565b60008b81526020829052604090205b9a5050505050505050505061105d565b600581036115e15760208301928701358881036115af577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff95505b60006115ba82611ded565b9050856115c757806115d6565b60008681526020829052604090205b95505050505061105d565b600781036116e757600f821660008190036116035750600183019287013560f81c5b600080858a0135602087019650915089860135602087016040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c81018e905290975090915060ff82901c907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690601b830190600090600190605c01604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600084529083018083525260ff851690820152606081018890526080810185905260a001611108565b6008810361173b57602083019287013560006117038b82611e41565b9050808203611730577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff96505b60006111b682611ebc565b600981036118735760038216600081900361175d5750600183019287013560f81c5b60008489013560601c601486019550905060006003600286901c1660016008820290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c168188018098508193505050506000818701905060008373ffffffffffffffffffffffffffffffffffffffff166313792a4a8f8e8e8c9087926117f793929190612972565b6040518463ffffffff1660e01b815260040161181593929190612942565b602060405180830381865afa158015611832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118569190612add565b90508197508460ff168a01995060006113a8858760ff1684611ef7565b600a81036119aa576003821660008190036118955750600183019287013560f81c5b60008489013560601c60148601955090506003600285901c16600060016008830290811b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018c890135610100929092039190911c1682880180985081925050506000818801905060008473ffffffffffffffffffffffffffffffffffffffff1663898bd9218f8f8f8d90879261192e93929190612972565b6040518463ffffffff1660e01b815260040161194c93929190612a4b565b602060405180830381865afa158015611969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198d9190612add565b90508198508560ff168b019a506000611548868860ff1684611ef7565b6040517fb2505f7c00000000000000000000000000000000000000000000000000000000815260048101829052602401610299565b5094509492505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f4aa45ca7ad825ceb1bf35643f0a58c295239df563b1b565c2485f96477c563187f2a80e1ef1d7842f27f2e6be0972bb708b9a135c38860dbe73c27c3486c34f4de85611a595746611a5c565b60005b6040805160208101959095528401929092526060830152608082015273ffffffffffffffffffffffffffffffffffffffff831660a082015260c0015b60405160208183030381529060405280519060200120905092915050565b600080826101000151604051602001611acf9190612af6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120835190915060ff16611b78576000611b208460400151611f65565b606080860151608080880151604080517f11e1e4079a79a66e4ade50033cfe2678cdd5341d2dfe5ef9513edb1a0be147a260208201529081018690529384019290925282015260a0810184905290915060c001610d96565b825160ff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01611c085760a08301518051602091820120604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46693810193909352820152606081018290526080015b60405160208183030381529060405280519060200120915050919050565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01611c785760c0830151604080517f11fdeb7e8373a1aa96bfac8d0ea91526b2c5d15e5cee20e0543e780258f3e8e460208201529081019190915260608101829052608001611bea565b825160ff167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd01611ce85760e0830151604080517fe19a3b94fc3c7ece3f890d98a99bc422615537a08dea0603fa8425867d87d46660208201529081019190915260608101829052608001611bea565b82516040517f0481832000000000000000000000000000000000000000000000000000000000815260ff9091166004820152602401610299565b6040517f53657175656e6365207369676e65723a0a00000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b16603182015260458101829052600090606501611a98565b6040517f53657175656e6365206e657374656420636f6e6669673a0a000000000000000060208201526038810184905260588101839052607881018290526000906098015b6040516020818303038152906040528051906020012090509392505050565b6040517f53657175656e636520737461746963206469676573743a0a00000000000000006020820152603881018290526000906058015b604051602081830303815290604052805190602001209050919050565b600080611e528460200151846119e9565b90506000611e5f85611ab6565b6040517f190100000000000000000000000000000000000000000000000000000000000060208201526022810184905260428101829052909150606201604051602081830303815290604052805190602001209250505092915050565b604080517f53657175656e636520616e792061646472657373207375626469676573743a0a6020820152908101829052600090606001611e24565b6040517f53657175656e63652073617069656e7420636f6e6669673a0a0000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606085901b166039820152604d8101839052606d8101829052600090608d01611dce565b6000606060005b8351811015611fe7576000611f99858381518110611f8c57611f8c612690565b6020026020010151611ff6565b90508281604051602001611fae929190612b42565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052925050600101611f6c565b50805160209091012092915050565b60007f0603985259a953da1f65a522f589c17bd1d0117ec1d3abb7c0788aef251ef43782600001518360200151846040015180519060200120856060015186608001518760a001518860c00151604051602001611e2498979695949392919097885273ffffffffffffffffffffffffffffffffffffffff969096166020880152604087019490945260608601929092526080850152151560a0840152151560c083015260e08201526101000190565b803573ffffffffffffffffffffffffffffffffffffffff811681146120c957600080fd5b919050565b6000602082840312156120e057600080fd5b610412826120a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561213b5761213b6120e9565b60405290565b604051610120810167ffffffffffffffff8111828210171561213b5761213b6120e9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156121ac576121ac6120e9565b604052919050565b803560ff811681146120c957600080fd5b803580151581146120c957600080fd5b600067ffffffffffffffff8211156121ef576121ef6120e9565b5060051b60200190565b600082601f83011261220a57600080fd5b813567ffffffffffffffff811115612224576122246120e9565b61225560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612165565b81815284602083860101111561226a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261229857600080fd5b81356122ab6122a6826121d5565b612165565b8082825260208201915060208360051b8601019250858311156122cd57600080fd5b602085015b838110156123ba57803567ffffffffffffffff8111156122f157600080fd5b860160e08189037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001121561232557600080fd5b61232d612118565b612339602083016120a5565b815260408201356020820152606082013567ffffffffffffffff81111561235f57600080fd5b61236e8a6020838601016121f9565b6040830152506080820135606082015261238a60a083016121c5565b608082015261239b60c083016121c5565b60a082015260e0919091013560c08201528352602092830192016122d2565b5095945050505050565b600082601f8301126123d557600080fd5b81356123e36122a6826121d5565b8082825260208201915060208360051b86010192508583111561240557600080fd5b602085015b838110156123ba5761241b816120a5565b83526020928301920161240a565b60008083601f84011261243b57600080fd5b50813567ffffffffffffffff81111561245357600080fd5b60208301915083602082850101111561246b57600080fd5b9250929050565b60008060006040848603121561248757600080fd5b833567ffffffffffffffff81111561249e57600080fd5b840161012081870312156124b157600080fd5b6124b9612141565b6124c2826121b4565b81526124d0602083016121c5565b6020820152604082013567ffffffffffffffff8111156124ef57600080fd5b6124fb88828501612287565b604083015250606082810135908201526080808301359082015260a082013567ffffffffffffffff81111561252f57600080fd5b61253b888285016121f9565b60a08301525060c0828101359082015260e0808301359082015261010082013567ffffffffffffffff81111561257057600080fd5b61257c888285016123c4565b61010083015250935050602084013567ffffffffffffffff8111156125a057600080fd5b6125ac86828701612429565b9497909650939450505050565b6000806000604084860312156125ce57600080fd5b83359250602084013567ffffffffffffffff8111156125a057600080fd5b6000602082840312156125fe57600080fd5b5035919050565b60008060006060848603121561261a57600080fd5b8335925061262a602085016120a5565b915060408401356bffffffffffffffffffffffff8116811461264b57600080fd5b809150509250925092565b80820180821115610ca5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60005b838110156126da5781810151838201526020016126c2565b50506000910152565b600081518084526126fb8160208601602086016126bf565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b838110156127fd577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0858403018852815173ffffffffffffffffffffffffffffffffffffffff815116845260208101516020850152604081015160e060408601526127b960e08601826126e3565b6060838101519087015260808084015115159087015260a08084015115159087015260c092830151929095019190915250602097880197919091019060010161274b565b50909695505050505050565b600081518084526020840193506020830160005b8281101561285157815173ffffffffffffffffffffffffffffffffffffffff1686526020958601959091019060010161281d565b5093949350505050565b805160ff16825260006020820151612877602085018215159052565b506040820151610120604085015261289361012085018261272d565b9050606083015160608501526080830151608085015260a083015184820360a08601526128c082826126e3565b91505060c083015160c085015260e083015160e08501526101008301518482036101008601526128f08282612809565b95945050505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b604081526000612955604083018661285b565b82810360208401526129688185876128f9565b9695505050505050565b6000808585111561298257600080fd5b8386111561298f57600080fd5b5050820193919092039150565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260006129cb60408301846126e3565b949350505050565b600060408284031280156129e657600080fd5b506040805190810167ffffffffffffffff81118282101715612a0a57612a0a6120e9565b604052825181526020928301519281019290925250919050565b606081526000612a386060830186886128f9565b6020830194909452506040015292915050565b8381526040602082015260006128f06040830184866128f9565b600060208284031215612a7757600080fd5b81517fffffffff000000000000000000000000000000000000000000000000000000008116811461041257600080fd5b84815273ffffffffffffffffffffffffffffffffffffffff841660208201526060604082015260006129686060830184866128f9565b600060208284031215612aef57600080fd5b5051919050565b8151600090829060208501835b82811015612b3757815173ffffffffffffffffffffffffffffffffffffffff16845260209384019390910190600101612b03565b509195945050505050565b60008351612b548184602088016126bf565b919091019182525060200191905056fea26469706673582212200740f74ffe3bb3a2baa83f05055f31efc15f84a392b895de79af282daafa822264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IAuth.sol/IAuth.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IAuth.sol/IAuth.json new file mode 100644 index 000000000..155c61e92 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IAuth.sol/IAuth.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IAuth", + "sourceName": "src/modules/interfaces/IAuth.sol", + "abi": [], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ICheckpointer.sol/ICheckpointer.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ICheckpointer.sol/ICheckpointer.json new file mode 100644 index 000000000..ba3eab8b6 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ICheckpointer.sol/ICheckpointer.json @@ -0,0 +1,47 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ICheckpointer", + "sourceName": "src/modules/interfaces/ICheckpointer.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_wallet", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_proof", + "type": "bytes" + } + ], + "name": "snapshotFor", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + } + ], + "internalType": "struct Snapshot", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IDelegatedExtension.sol/IDelegatedExtension.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IDelegatedExtension.sol/IDelegatedExtension.json new file mode 100644 index 000000000..f30ebdd86 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IDelegatedExtension.sol/IDelegatedExtension.json @@ -0,0 +1,49 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IDelegatedExtension", + "sourceName": "src/modules/interfaces/IDelegatedExtension.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_opHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "_startingGas", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_numCalls", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_space", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "handleSequenceDelegateCall", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IERC1271.sol/IERC1271.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IERC1271.sol/IERC1271.json new file mode 100644 index 000000000..9de8dfa98 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IERC1271.sol/IERC1271.json @@ -0,0 +1,35 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IERC1271", + "sourceName": "src/modules/interfaces/IERC1271.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_hash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "isValidSignature", + "outputs": [ + { + "internalType": "bytes4", + "name": "magicValue", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IPartialAuth.sol/IPartialAuth.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IPartialAuth.sol/IPartialAuth.json new file mode 100644 index 000000000..fbcb55e57 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/IPartialAuth.sol/IPartialAuth.json @@ -0,0 +1,144 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "IPartialAuth", + "sourceName": "src/modules/interfaces/IPartialAuth.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverPartialSignature", + "outputs": [ + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isValidImage", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "checkpoint", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "opHash", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ISapient.sol/ISapient.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ISapient.sol/ISapient.json new file mode 100644 index 000000000..31c4e1edd --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ISapient.sol/ISapient.json @@ -0,0 +1,119 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ISapient", + "sourceName": "src/modules/interfaces/ISapient.sol", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "kind", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "noChainId", + "type": "bool" + }, + { + "components": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "delegateCall", + "type": "bool" + }, + { + "internalType": "bool", + "name": "onlyFallback", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "behaviorOnError", + "type": "uint256" + } + ], + "internalType": "struct Payload.Call[]", + "name": "calls", + "type": "tuple[]" + }, + { + "internalType": "uint256", + "name": "space", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "imageHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + }, + { + "internalType": "address[]", + "name": "parentWallets", + "type": "address[]" + } + ], + "internalType": "struct Payload.Decoded", + "name": "_payload", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignature", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ISapient.sol/ISapientCompact.json b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ISapient.sol/ISapientCompact.json new file mode 100644 index 000000000..ed7ebb3b4 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/modules/interfaces/ISapient.sol/ISapientCompact.json @@ -0,0 +1,35 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ISapientCompact", + "sourceName": "src/modules/interfaces/ISapient.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_digest", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "_signature", + "type": "bytes" + } + ], + "name": "recoverSapientSignatureCompact", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/utils/Base64.sol/Base64.json b/testchain/artifacts/wallet-contracts-v3/utils/Base64.sol/Base64.json new file mode 100644 index 000000000..3c9018741 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/utils/Base64.sol/Base64.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Base64", + "sourceName": "src/utils/Base64.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d7ec529b2f2f0e2393ae8baae4a44ccdf658337d47622a322a709183eeb5b5d264736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220d7ec529b2f2f0e2393ae8baae4a44ccdf658337d47622a322a709183eeb5b5d264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/utils/LibBytes.sol/LibBytes.json b/testchain/artifacts/wallet-contracts-v3/utils/LibBytes.sol/LibBytes.json new file mode 100644 index 000000000..3a72a8efe --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/utils/LibBytes.sol/LibBytes.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibBytes", + "sourceName": "src/utils/LibBytes.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122098c0ae915ada559387bd5cb3d91109fea23751fe5e8821d6dd5625896820c44664736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122098c0ae915ada559387bd5cb3d91109fea23751fe5e8821d6dd5625896820c44664736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/utils/LibBytesPointer.sol/LibBytesPointer.json b/testchain/artifacts/wallet-contracts-v3/utils/LibBytesPointer.sol/LibBytesPointer.json new file mode 100644 index 000000000..c194495c2 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/utils/LibBytesPointer.sol/LibBytesPointer.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibBytesPointer", + "sourceName": "src/utils/LibBytesPointer.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122028d9a4df33bbc23d43998c03578a9fd64462c8bbfc40568e5c8c4d80b522d84264736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122028d9a4df33bbc23d43998c03578a9fd64462c8bbfc40568e5c8c4d80b522d84264736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/utils/LibOptim.sol/LibOptim.json b/testchain/artifacts/wallet-contracts-v3/utils/LibOptim.sol/LibOptim.json new file mode 100644 index 000000000..64b0e5dc7 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/utils/LibOptim.sol/LibOptim.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "LibOptim", + "sourceName": "src/utils/LibOptim.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122021276e91029dcb0d5798f662865c094a573f0515da3f012be161a38682bbb0a764736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122021276e91029dcb0d5798f662865c094a573f0515da3f012be161a38682bbb0a764736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/utils/P256.sol/P256.json b/testchain/artifacts/wallet-contracts-v3/utils/P256.sol/P256.json new file mode 100644 index 000000000..238bd3930 --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/utils/P256.sol/P256.json @@ -0,0 +1,16 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "P256", + "sourceName": "src/utils/P256.sol", + "abi": [ + { + "inputs": [], + "name": "P256VerificationFailed", + "type": "error" + } + ], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ef32a8f6b0fad2e9a5a572f36791dcf0a8761e2cfc7d01aa6c7bee63738c28e664736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220ef32a8f6b0fad2e9a5a572f36791dcf0a8761e2cfc7d01aa6c7bee63738c28e664736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/artifacts/wallet-contracts-v3/utils/WebAuthn.sol/WebAuthn.json b/testchain/artifacts/wallet-contracts-v3/utils/WebAuthn.sol/WebAuthn.json new file mode 100644 index 000000000..5d634112d --- /dev/null +++ b/testchain/artifacts/wallet-contracts-v3/utils/WebAuthn.sol/WebAuthn.json @@ -0,0 +1,10 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "WebAuthn", + "sourceName": "src/utils/WebAuthn.sol", + "abi": [], + "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122028675157bc20595ec091afcd3375bbd8e92f27ebdba2bedaa69cc392aba957ea64736f6c634300081b0033", + "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122028675157bc20595ec091afcd3375bbd8e92f27ebdba2bedaa69cc392aba957ea64736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/testchain/hardhat.config.js b/testchain/hardhat.config.js index 34e50c9a0..4d8eb5451 100644 --- a/testchain/hardhat.config.js +++ b/testchain/hardhat.config.js @@ -1,6 +1,6 @@ // see https://hardhat.org/hardhat-network/docs/reference#config module.exports = { - solidity: "0.8.17", + solidity: "0.8.28", networks: { hardhat: { diff --git a/testchain/package.json b/testchain/package.json index d1d06427b..65aea4285 100644 --- a/testchain/package.json +++ b/testchain/package.json @@ -6,24 +6,24 @@ "scripts": { "start:hardhat": "hardhat node --hostname 0.0.0.0", "start:hardhat:verbose": "hardhat --verbose node --hostname 0.0.0.0", - "start:geth": "docker run -p 8545:8545 --log-driver none --rm ethereum/client-go:v1.10.16 --dev --dev.period 2 --networkid ${npm_package_config_ganacheChainID} --miner.gaslimit 15000000 --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs --verbosity 1", - "start:geth:verbose": "docker run -p 8545:8545 --rm ethereum/client-go:v1.10.16 --dev --dev.period 2 --networkid ${npm_package_config_ganacheChainID} --miner.gaslimit 15000000 --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs", - "wait:server": "wait-on -t 120000 http-get://127.0.0.1:8545/", - "test": "ts-node ./tests/index.ts" + "start:geth": "docker run -p 8545:8545 --rm ethereum/client-go:v1.15.11 --networkid ${npm_package_config_testchainChainID} --dev --dev.period 1 --dev.gaslimit ${npm_package_config_testchainGasLimit} --miner.gaslimit ${npm_package_config_testchainGasLimit} --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs --verbosity 1", + "start:geth:verbose": "docker run -p 8545:8545 --rm ethereum/client-go:v1.15.11 --networkid ${npm_package_config_testchainChainID} --dev --dev.period 1 --dev.gaslimit ${npm_package_config_testchainGasLimit} --miner.gaslimit ${npm_package_config_testchainGasLimit} --miner.gasprice 1 --http --http.addr 0.0.0.0 --rpc.allow-unprotected-txs", + "start:anvil": "anvil --mnemonic \"${npm_package_config_mnemonic}\" --block-time 1 --balance ${npm_package_config_etherBalance} --host 0.0.0.0 --chain-id ${npm_package_config_testchainChainID} --gas-limit ${npm_package_config_testchainGasLimit} --gas-price ${npm_package_config_testchainGasPrice}", + "start:anvil:verbose": "anvil --mnemonic \"${npm_package_config_mnemonic}\" --block-time 1 --balance ${npm_package_config_etherBalance} --host 0.0.0.0 --chain-id ${npm_package_config_testchainChainID} --gas-limit ${npm_package_config_testchainGasLimit} --gas-price ${npm_package_config_testchainGasPrice} -vvv", + "install:anvil": "curl -L https://foundry.paradigm.xyz | bash; foundryup", + "wait:server": "wait-on -t 120000 tcp:127.0.0.1:8545" }, "devDependencies": { - "concurrently": "^8.0.1", - "ethers": "^6.6.0", - "hardhat": "^2.13.0", - "ts-node": "^10.9.1", - "typescript": "^5.1.3", - "wait-on": "^7.0.1" + "concurrently": "^9.1.2", + "hardhat": "^2.24.1", + "wait-on": "^8.0.3" }, "config": { - "ganacheChainID": 1337, - "ganachePort": 8545, - "ganacheGasLimit": "0xfffffffffff", - "ganacheGasPrice": "20000000000", + "mnemonic": "major danger this key only test please avoid main net use okay", + "testchainChainID": 31337, + "testchainPort": 8545, + "testchainGasLimit": "15000000", + "testchainGasPrice": "20000000000", "etherBalance": "100000", "extra": "" }, diff --git a/testchain/pnpm-lock.yaml b/testchain/pnpm-lock.yaml new file mode 100644 index 000000000..e5699ebd1 --- /dev/null +++ b/testchain/pnpm-lock.yaml @@ -0,0 +1,2071 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +overrides: + elliptic: ^6.6.0 + +importers: + + .: + dependencies: + '@openzeppelin/contracts': + specifier: ^4.9.2 + version: 4.9.6 + devDependencies: + concurrently: + specifier: ^9.1.2 + version: 9.1.2 + hardhat: + specifier: ^2.24.1 + version: 2.24.3 + wait-on: + specifier: ^8.0.3 + version: 8.0.3 + +packages: + + '@ethereumjs/rlp@5.0.2': + resolution: {integrity: sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==} + engines: {node: '>=18'} + hasBin: true + + '@ethereumjs/util@9.1.0': + resolution: {integrity: sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==} + engines: {node: '>=18'} + + '@ethersproject/abi@5.8.0': + resolution: {integrity: sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==} + + '@ethersproject/abstract-provider@5.8.0': + resolution: {integrity: sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==} + + '@ethersproject/abstract-signer@5.8.0': + resolution: {integrity: sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==} + + '@ethersproject/address@5.8.0': + resolution: {integrity: sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==} + + '@ethersproject/base64@5.8.0': + resolution: {integrity: sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==} + + '@ethersproject/bignumber@5.8.0': + resolution: {integrity: sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==} + + '@ethersproject/bytes@5.8.0': + resolution: {integrity: sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==} + + '@ethersproject/constants@5.8.0': + resolution: {integrity: sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==} + + '@ethersproject/hash@5.8.0': + resolution: {integrity: sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==} + + '@ethersproject/keccak256@5.8.0': + resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} + + '@ethersproject/logger@5.8.0': + resolution: {integrity: sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==} + + '@ethersproject/networks@5.8.0': + resolution: {integrity: sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==} + + '@ethersproject/properties@5.8.0': + resolution: {integrity: sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==} + + '@ethersproject/rlp@5.8.0': + resolution: {integrity: sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==} + + '@ethersproject/signing-key@5.8.0': + resolution: {integrity: sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==} + + '@ethersproject/strings@5.8.0': + resolution: {integrity: sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==} + + '@ethersproject/transactions@5.8.0': + resolution: {integrity: sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==} + + '@ethersproject/web@5.8.0': + resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/curves@1.8.2': + resolution: {integrity: sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.2.0': + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.7.2': + resolution: {integrity: sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@nomicfoundation/edr-darwin-arm64@0.11.1': + resolution: {integrity: sha512-vjca7gkl1o0yYqMjwxQpMEtdsb20nWHBnnxDO8ZBCTD5IwfYT5LiMxFaJo8NUJ7ODIRkF/zuEtAF3W7+ZlC5RA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-darwin-x64@0.11.1': + resolution: {integrity: sha512-0aGStHq9XePXX9UqdU1w60HGO9AfYCgkNEir5sBpntU5E0TvZEK6jwyYr667+s90n2mihdeP97QSA0O/6PT6PA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-gnu@0.11.1': + resolution: {integrity: sha512-OWhCETc03PVdtzatW/c2tpOPx+GxlBfBaLmMuGRD1soAr1nMOmg2WZAlo4i6Up9fkQYl+paiYMMFVat1meaMvQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-musl@0.11.1': + resolution: {integrity: sha512-p0qvtIvDA2eZ8pQ5XUKnWdW1IrwFzSrjyrO88oYx6Lkw8nYwf2JEeETo5o5W84DDfimfoBGP7RWPTPcTBKCaLQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-gnu@0.11.1': + resolution: {integrity: sha512-V4Us7Q0E8kng3O/czd5GRcxmZxWX+USgqz9yQ3o7DVq7FP96idaKvtcbMQp64tjHf2zNtX2y77sGzgbVau7Bww==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-musl@0.11.1': + resolution: {integrity: sha512-lCSXsF10Kjjvs5duGbM6pi1WciWHXFNWkMgDAY4pg6ZRIy4gh+uGC6CONMfP4BDZwfrALo2p6+LwyotrJEqpyg==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-win32-x64-msvc@0.11.1': + resolution: {integrity: sha512-sNSmmRTURAd1sdKuyO5tqrFiJvHHVPZLM4HB53F21makGoyInFGhejdo3qZrkoinM8k0ewEJDbUp0YuMEgMOhQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr@0.11.1': + resolution: {integrity: sha512-P97XwcD9DdMMZm9aqw89+mzqzlKmqzSPM3feBES2WVRm5/LOiBYorhpeAX+ANj0X8532SKgxoZK/CN5OWv9vZA==} + engines: {node: '>= 18'} + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer@0.1.2': + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} + engines: {node: '>= 12'} + + '@openzeppelin/contracts@4.9.6': + resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + + '@scure/bip32@1.1.5': + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip39@1.1.1': + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@sentry/core@5.30.0': + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + + '@sentry/hub@5.30.0': + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + + '@sentry/minimal@5.30.0': + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + + '@sentry/node@5.30.0': + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + + '@sentry/tracing@5.30.0': + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + + '@sentry/types@5.30.0': + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + + '@sentry/utils@5.30.0': + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@types/bn.js@5.2.0': + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} + + '@types/lru-cache@5.1.1': + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + + '@types/node@24.0.3': + resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} + + adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + axios@1.10.0: + resolution: {integrity: sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concurrently@9.1.2: + resolution: {integrity: sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ==} + engines: {node: '>=18'} + hasBin: true + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@4.0.3: + resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} + engines: {node: '>= 6'} + + fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + hardhat@2.24.3: + resolution: {integrity: sha512-2dhniQ1wW8/Wh3mP91kKcEnVva93mWYRaYLkV+a0ATkUEKrByGF2P5hCrlNHbqYP//D7L0CGYLtDjPQY6ILaVA==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + micro-eth-signer@0.14.0: + resolution: {integrity: sha512-5PLLzHiVYPWClEvZIXXFu5yutzpadb73rnQCpUqIHu3No3coFuWQNfE5tkBQJ7djuLYl6aRLaS0MgWJYGoqiBw==} + + micro-packed@0.7.3: + resolution: {integrity: sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + + mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + obliterator@2.0.5: + resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} + hasBin: true + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stacktrace-parser@0.1.11: + resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==} + engines: {node: '>=6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + wait-on@8.0.3: + resolution: {integrity: sha512-nQFqAFzZDeRxsu7S3C7LbuxslHhk+gnJZHyethuGKAn2IVleIbTB9I3vJSQiSR+DifUqmdzfPMoMPJfLqMF2vw==} + engines: {node: '>=12.0.0'} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ethereumjs/rlp@5.0.2': {} + + '@ethereumjs/util@9.1.0': + dependencies: + '@ethereumjs/rlp': 5.0.2 + ethereum-cryptography: 2.2.1 + + '@ethersproject/abi@5.8.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/hash': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/abstract-provider@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/networks': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/transactions': 5.8.0 + '@ethersproject/web': 5.8.0 + + '@ethersproject/abstract-signer@5.8.0': + dependencies: + '@ethersproject/abstract-provider': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + + '@ethersproject/address@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/rlp': 5.8.0 + + '@ethersproject/base64@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + + '@ethersproject/bignumber@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + bn.js: 5.2.2 + + '@ethersproject/bytes@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/constants@5.8.0': + dependencies: + '@ethersproject/bignumber': 5.8.0 + + '@ethersproject/hash@5.8.0': + dependencies: + '@ethersproject/abstract-signer': 5.8.0 + '@ethersproject/address': 5.8.0 + '@ethersproject/base64': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@ethersproject/keccak256@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.8.0': {} + + '@ethersproject/networks@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/properties@5.8.0': + dependencies: + '@ethersproject/logger': 5.8.0 + + '@ethersproject/rlp@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/signing-key@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + bn.js: 5.2.2 + elliptic: 6.6.1 + hash.js: 1.1.7 + + '@ethersproject/strings@5.8.0': + dependencies: + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/logger': 5.8.0 + + '@ethersproject/transactions@5.8.0': + dependencies: + '@ethersproject/address': 5.8.0 + '@ethersproject/bignumber': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/constants': 5.8.0 + '@ethersproject/keccak256': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/rlp': 5.8.0 + '@ethersproject/signing-key': 5.8.0 + + '@ethersproject/web@5.8.0': + dependencies: + '@ethersproject/base64': 5.8.0 + '@ethersproject/bytes': 5.8.0 + '@ethersproject/logger': 5.8.0 + '@ethersproject/properties': 5.8.0 + '@ethersproject/strings': 5.8.0 + + '@fastify/busboy@2.1.1': {} + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/curves@1.8.2': + dependencies: + '@noble/hashes': 1.7.2 + + '@noble/hashes@1.2.0': {} + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.7.2': {} + + '@noble/secp256k1@1.7.1': {} + + '@nomicfoundation/edr-darwin-arm64@0.11.1': {} + + '@nomicfoundation/edr-darwin-x64@0.11.1': {} + + '@nomicfoundation/edr-linux-arm64-gnu@0.11.1': {} + + '@nomicfoundation/edr-linux-arm64-musl@0.11.1': {} + + '@nomicfoundation/edr-linux-x64-gnu@0.11.1': {} + + '@nomicfoundation/edr-linux-x64-musl@0.11.1': {} + + '@nomicfoundation/edr-win32-x64-msvc@0.11.1': {} + + '@nomicfoundation/edr@0.11.1': + dependencies: + '@nomicfoundation/edr-darwin-arm64': 0.11.1 + '@nomicfoundation/edr-darwin-x64': 0.11.1 + '@nomicfoundation/edr-linux-arm64-gnu': 0.11.1 + '@nomicfoundation/edr-linux-arm64-musl': 0.11.1 + '@nomicfoundation/edr-linux-x64-gnu': 0.11.1 + '@nomicfoundation/edr-linux-x64-musl': 0.11.1 + '@nomicfoundation/edr-win32-x64-msvc': 0.11.1 + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer@0.1.2': + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.2 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 + + '@openzeppelin/contracts@4.9.6': {} + + '@scure/base@1.1.9': {} + + '@scure/base@1.2.6': {} + + '@scure/bip32@1.1.5': + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.9 + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.1.1': + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@sentry/core@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/hub@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/minimal@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sentry/node@5.30.0': + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + + '@sentry/tracing@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/types@5.30.0': {} + + '@sentry/utils@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@types/bn.js@5.2.0': + dependencies: + '@types/node': 24.0.3 + + '@types/lru-cache@5.1.1': {} + + '@types/node@24.0.3': + dependencies: + undici-types: 7.8.0 + + adm-zip@0.4.16: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + asynckit@0.4.0: {} + + axios@1.10.0: + dependencies: + follow-redirects: 1.15.9(debug@4.4.1) + form-data: 4.0.3 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + bn.js@4.12.2: {} + + bn.js@5.2.2: {} + + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + buffer-from@1.1.2: {} + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + camelcase@6.3.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + ci-info@2.0.0: {} + + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + commander@8.3.0: {} + + concurrently@9.1.2: + dependencies: + chalk: 4.1.2 + lodash: 4.17.21 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + cookie@0.4.2: {} + + debug@4.4.1(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + diff@5.2.0: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.2 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-paths@2.2.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + escalade@3.2.0: {} + + escape-string-regexp@4.0.0: {} + + ethereum-cryptography@1.2.0: + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.9(debug@4.4.1): + optionalDependencies: + debug: 4.4.1(supports-color@8.1.1) + + form-data@4.0.3: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + fp-ts@1.19.3: {} + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + hardhat@2.24.3: + dependencies: + '@ethereumjs/util': 9.1.0 + '@ethersproject/abi': 5.8.0 + '@nomicfoundation/edr': 0.11.1 + '@nomicfoundation/solidity-analyzer': 0.1.2 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.2.0 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chokidar: 4.0.3 + ci-info: 2.0.0 + debug: 4.4.1(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + find-up: 5.0.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + immutable: 4.3.7 + io-ts: 1.10.4 + json-stream-stringify: 3.1.6 + keccak: 3.0.4 + lodash: 4.17.21 + micro-eth-signer: 0.14.0 + mnemonist: 0.38.5 + mocha: 10.8.2 + p-map: 4.0.0 + picocolors: 1.1.1 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.4.1) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.11 + tinyglobby: 0.2.14 + tsort: 0.0.1 + undici: 5.29.0 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + immutable@4.3.7: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + io-ts@1.10.4: + dependencies: + fp-ts: 1.19.3 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + js-sha3@0.8.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-stream-stringify@3.1.6: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + lru_map@0.3.3: {} + + math-intrinsics@1.1.0: {} + + memorystream@0.3.1: {} + + micro-eth-signer@0.14.0: + dependencies: + '@noble/curves': 1.8.2 + '@noble/hashes': 1.7.2 + micro-packed: 0.7.3 + + micro-packed@0.7.3: + dependencies: + '@scure/base': 1.2.6 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + mnemonist@0.38.5: + dependencies: + obliterator: 2.0.5 + + mocha@10.8.2: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.1(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + ms@2.1.3: {} + + node-addon-api@2.0.2: {} + + node-gyp-build@4.8.4: {} + + normalize-path@3.0.0: {} + + obliterator@2.0.5: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + os-tmpdir@1.0.2: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + path-exists@4.0.0: {} + + path-parse@1.0.7: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + proxy-from-env@1.1.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + require-directory@2.1.1: {} + + resolve@1.17.0: + dependencies: + path-parse: 1.0.7 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + semver@5.7.2: {} + + semver@6.3.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + setprototypeof@1.2.0: {} + + shell-quote@1.8.3: {} + + solc@0.8.26(debug@4.4.1): + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.9(debug@4.4.1) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + stacktrace-parser@0.1.11: + dependencies: + type-fest: 0.7.1 + + statuses@2.0.1: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + tree-kill@1.2.2: {} + + tslib@1.14.1: {} + + tslib@2.8.1: {} + + tsort@0.0.1: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@0.7.1: {} + + undici-types@7.8.0: {} + + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + + universalify@0.1.2: {} + + unpipe@1.0.0: {} + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + wait-on@8.0.3: + dependencies: + axios: 1.10.0 + joi: 17.13.3 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.2 + transitivePeerDependencies: + - debug + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + workerpool@6.5.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.5.10: {} + + y18n@5.0.8: {} + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yocto-queue@0.1.0: {} diff --git a/testchain/yarn.lock b/testchain/yarn.lock deleted file mode 100644 index 44f34ea1b..000000000 --- a/testchain/yarn.lock +++ /dev/null @@ -1,2508 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@adraffy/ens-normalize@1.9.2": - version "1.9.2" - resolved "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.9.2.tgz" - integrity sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@ethersproject/abi@^5.1.2": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@noble/hashes@1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.2.tgz" - integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== - -"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": - version "1.7.1" - resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@nomicfoundation/ethereumjs-block@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.0.0.tgz" - integrity sha512-bk8uP8VuexLgyIZAHExH1QEovqx0Lzhc9Ntm63nCRKLHXIZkobaFaeCVwTESV7YkPKUk7NiK11s8ryed4CS9yA== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-blockchain@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz" - integrity sha512-pLFEoea6MWd81QQYSReLlLfH7N9v7lH66JC/NMPN848ySPPQA5renWnE7wPByfQFzNrPBuDDRFFULMDmj1C0xw== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-ethash" "^2.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.0.0.tgz" - integrity sha512-WS7qSshQfxoZOpHG/XqlHEGRG1zmyjYrvmATvc4c62+gZXgre1ymYP8ZNgx/3FyZY0TWe9OjFlKOfLqmgOeYwA== - dependencies: - "@nomicfoundation/ethereumjs-util" "^8.0.0" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz" - integrity sha512-WpDvnRncfDUuXdsAXlI4lXbqUDOA+adYRQaEezIkxqDkc+LDyYDbd/xairmY98GnQzo1zIqsIL6GB5MoMSJDew== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz" - integrity sha512-hVS6qRo3V1PLKCO210UfcEQHvlG7GqR8iFzp0yyjTg2TmJQizcChKgWo8KFsdMw6AyoLgLhHGHw4HdlP8a4i+Q== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": - version "4.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz" - integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== - -"@nomicfoundation/ethereumjs-statemanager@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz" - integrity sha512-jCtqFjcd2QejtuAMjQzbil/4NHf5aAWxUc+CvS0JclQpl+7M0bxMofR2AJdtz+P3u0ke2euhYREDiE7iSO31vQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" - -"@nomicfoundation/ethereumjs-trie@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz" - integrity sha512-LIj5XdE+s+t6WSuq/ttegJzZ1vliwg6wlb+Y9f4RlBpuK35B9K02bO7xU+E6Rgg9RGptkWd6TVLdedTI4eNc2A== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.0.0.tgz" - integrity sha512-Gg3Lir2lNUck43Kp/3x6TfBNwcWC9Z1wYue9Nz3v4xjdcv6oDW9QSMJxqsKw9QEGoBBZ+gqwpW7+F05/rs/g1w== - dependencies: - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-util@^8.0.0": - version "8.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.0.tgz" - integrity sha512-2emi0NJ/HmTG+CGY58fa+DQuAoroFeSH9gKu9O6JnwTtlzJtgfTixuoOqLEgyyzZVvwfIpRueuePb8TonL1y+A== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz" - integrity sha512-JMPxvPQ3fzD063Sg3Tp+UdwUkVxMoo1uML6KSzFhMH3hoQi/LMuXBoEHAoW83/vyNS9BxEe6jm6LmT5xdeEJ6w== - dependencies: - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@types/async-eventemitter" "^0.2.1" - async-eventemitter "^0.2.4" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - functional-red-black-tree "^1.0.1" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": - version "0.1.0" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz" - integrity sha512-vEF3yKuuzfMHsZecHQcnkUrqm8mnTWfJeEVFHpg+cO+le96xQA4lAJYdUan8pXZohQxv1fSReQsn4QGNuBNuCw== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.0.tgz#1225f7da647ae1ad25a87125664704ecc0af6ccc" - integrity sha512-dlHeIg0pTL4dB1l9JDwbi/JG6dHQaU1xpDK+ugYO8eJ1kxx9Dh2isEUtA4d02cQAl22cjOHTvifAk96A+ItEHA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.0.tgz#dbc052dcdfd50ae50fd5ae1788b69b4e0fa40040" - integrity sha512-WFCZYMv86WowDA4GiJKnebMQRt3kCcFqHeIomW6NMyqiKqhK1kIZCxSLDYsxqlx396kKLPN1713Q1S8tu68GKg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.0.tgz#e6b2eea633995b557e74e881d2a43eab4760903d" - integrity sha512-DTw6MNQWWlCgc71Pq7CEhEqkb7fZnS7oly13pujs4cMH1sR0JzNk90Mp1zpSCsCs4oKan2ClhMlLKtNat/XRKQ== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.0.tgz#af81107f5afa794f19988a368647727806e18dc4" - integrity sha512-wUpUnR/3GV5Da88MhrxXh/lhb9kxh9V3Jya2NpBEhKDIRCDmtXMSqPMXHZmOR9DfCwCvG6vLFPr/+YrPCnUN0w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.0.tgz#6877e1da1a06a9f08446070ab6e0a5347109f868" - integrity sha512-lR0AxK1x/MeKQ/3Pt923kPvwigmGX3OxeU5qNtQ9pj9iucgk4PzhbS3ruUeSpYhUxG50jN4RkIGwUMoev5lguw== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.0.tgz#bb6cd83a0c259eccef4183796b6329a66cf7ebd9" - integrity sha512-A1he/8gy/JeBD3FKvmI6WUJrGrI5uWJNr5Xb9WdV+DK0F8msuOqpEByLlnTdLkXMwW7nSl3awvLezOs9xBHJEg== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.0.tgz#9d4bca1cc9a1333fde985675083b0b7d165f6076" - integrity sha512-7x5SXZ9R9H4SluJZZP8XPN+ju7Mx+XeUMWZw7ZAqkdhP5mK19I4vz3x0zIWygmfE8RT7uQ5xMap0/9NPsO+ykw== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.0.tgz#0db5bfc6aa952bea4098d8d2c8947b4e5c4337ee" - integrity sha512-m7w3xf+hnE774YRXu+2mGV7RiF3QJtUoiYU61FascCkQhX3QMQavh7saH/vzb2jN5D24nT/jwvaHYX/MAM9zUw== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.0.tgz#2e0f39a2924dcd77db6b419828595e984fabcb33" - integrity sha512-xCuybjY0sLJQnJhupiFAXaek2EqF0AP0eBjgzaalPXSNvCEN6ZYHvUzdA50ENDVeSYFXcUsYf3+FsD3XKaeptA== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.0" - resolved "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.0.tgz" - integrity sha512-xGWAiVCGOycvGiP/qrlf9f9eOn7fpNbyJygcB0P21a1MDuVPlKt0Srp7rvtBEutYQ48ouYnRXm33zlRnlTOPHg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.0" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.0" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.0" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" - -"@openzeppelin/contracts@^4.9.2": - version "4.9.2" - resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.2.tgz" - integrity sha512-mO+y6JaqXjWeMh9glYVzVu8HYPGknAAnWyxTRhGeckOruyXQMNnlcW6w/Dx9ftLeIQk6N+ZJFuVmTwF7lEIFrg== - -"@scure/base@~1.1.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" - integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== - dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/async-eventemitter@^0.2.1": - version "0.2.1" - resolved "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz" - integrity sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg== - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz" - integrity sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g== - dependencies: - "@types/node" "*" - -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/node@*": - version "18.11.10" - resolved "https://registry.npmjs.org/@types/node/-/node-18.11.10.tgz" - integrity sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ== - -"@types/node@18.15.13": - version "18.15.13" - resolved "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz" - integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== - -"@types/pbkdf2@^3.0.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz" - integrity sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.3" - resolved "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== - dependencies: - "@types/node" "*" - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1: - version "8.9.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -aes-js@4.0.0-beta.5: - version "4.0.0-beta.5" - resolved "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz" - integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -async-eventemitter@^0.2.4: - version "0.2.4" - resolved "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.npmjs.org/async/-/async-2.6.4.tgz" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bigint-crypto-utils@^3.0.23: - version "3.1.8" - resolved "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz" - integrity sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw== - dependencies: - bigint-mod-arith "^3.1.0" - -bigint-mod-arith@^3.1.0: - version "3.1.2" - resolved "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz" - integrity sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -bs58@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -camelcase@^6.0.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@3.5.3, chokidar@^3.4.0: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -classic-level@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz" - integrity sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concurrently@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz" - integrity sha512-Sh8bGQMEL0TAmAm2meAXMjcASHZa7V0xXQVDBLknCPa9TPtkY9yYs+0cnGGgfdkW0SV1Mlg+hVGfXcoI8d3MJA== - dependencies: - chalk "^4.1.2" - date-fns "^2.29.3" - lodash "^4.17.21" - rxjs "^7.8.0" - shell-quote "^1.8.0" - spawn-command "0.0.2-1" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.1" - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -date-fns@^2.29.3: - version "2.29.3" - resolved "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz" - integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA== - -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4, elliptic@^6.6.0: - version "6.6.1" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" - integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.0: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethers@^6.6.0: - version "6.6.0" - resolved "https://registry.npmjs.org/ethers/-/ethers-6.6.0.tgz" - integrity sha512-7D2U+n8eZYmh592VZqap9vBu50jN7YUDHqAmwBYTMntmUKC9RVgcqcFbd+3DTCOQ1jMyK6QHv1usbcfgiGaHOA== - dependencies: - "@adraffy/ens-normalize" "1.9.2" - "@noble/hashes" "1.1.2" - "@noble/secp256k1" "1.7.1" - "@types/node" "18.15.13" - aes-js "4.0.0-beta.5" - tslib "2.4.0" - ws "8.5.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -follow-redirects@^1.12.1, follow-redirects@^1.14.9: - version "1.15.2" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" - integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2: - version "1.2.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -hardhat@^2.13.0: - version "2.13.0" - resolved "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz" - integrity sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" - "@nomicfoundation/solidity-analyzer" "^0.1.0" - "@sentry/node" "^5.18.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - keccak "^3.0.2" - lodash "^4.17.11" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - qs "^6.7.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - tsort "0.0.1" - undici "^5.14.0" - uuid "^8.3.2" - ws "^7.4.6" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immutable@^4.0.0-rc.12: - version "4.2.4" - resolved "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz" - integrity sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -joi@^17.7.0: - version "17.7.1" - resolved "https://registry.npmjs.org/joi/-/joi-17.7.1.tgz" - integrity sha512-teoLhIvWE298R6AeJywcjR4sX2hHjB3/xJX4qPjg+gTg+c0mzUDsziYlqPmLomq9gVsfaMcgPaGc7VxtD/9StA== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -js-sha3@0.8.0: - version "0.8.0" - resolved "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -keccak@^3.0.0, keccak@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz" - integrity sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/level/-/level-8.0.0.tgz" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.7: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@^10.0.0: - version "10.2.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.5.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz" - integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -qs@^6.7.0: - version "6.11.0" - resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -raw-body@^2.4.1: - version "2.5.1" - resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3: - version "2.2.7" - resolved "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -rxjs@^7.8.0: - version "7.8.0" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -semver@^5.5.0: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shell-quote@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -source-map-support@^0.5.13: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spawn-command@0.0.2-1: - version "0.0.2-1" - resolved "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz" - integrity sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg== - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-json-comments@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@8.1.1, supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -tmp@0.0.33: - version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0: - version "2.4.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -typescript@^5.1.3: - version "5.1.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz" - integrity sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw== - -undici@^5.14.0: - version "5.20.0" - resolved "https://registry.npmjs.org/undici/-/undici-5.20.0.tgz" - integrity sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g== - dependencies: - busboy "^1.6.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -wait-on@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz" - integrity sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog== - dependencies: - axios "^0.27.2" - joi "^17.7.0" - lodash "^4.17.21" - minimist "^1.2.7" - rxjs "^7.8.0" - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz" - integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== - -ws@^7.4.6: - version "7.5.9" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^17.7.1: - version "17.7.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz" - integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==