From b1ad6485fd206e996f51ceef4e712dacf26779ac Mon Sep 17 00:00:00 2001 From: Marcos Iglesias Date: Mon, 16 Sep 2024 02:45:55 -0300 Subject: [PATCH 1/2] feat: new contract deployed and related changes required applied --- packages/hardhat/contracts/EASOnboarding.sol | 357 ++++++++++-------- .../hardhat/deploy/00_deploy_your_contract.ts | 5 +- .../baseSepolia/EASOnboarding.json | 28 +- .../301ce0e94e99800111e7736a3262e994.json | 48 +++ packages/hardhat/hardhat.config.ts | 2 +- packages/nextjs/app/create-event/page.tsx | 4 +- packages/nextjs/app/create-quiz/page.tsx | 2 +- packages/nextjs/app/event/[eventId]/page.tsx | 13 +- .../app/event/[eventId]/register/page.tsx | 2 +- packages/nextjs/app/page.tsx | 4 +- packages/nextjs/app/profile/page.tsx | 4 +- packages/nextjs/app/quiz/page.tsx | 6 +- packages/nextjs/components/EventCard.tsx | 20 +- packages/nextjs/components/Header.tsx | 1 + packages/nextjs/components/withAuth.tsx | 1 + .../nextjs/contracts/deployedContracts.ts | 15 +- packages/nextjs/utils/scaffold-eth/abi.ts | 26 +- 17 files changed, 346 insertions(+), 192 deletions(-) create mode 100644 packages/hardhat/deployments/baseSepolia/solcInputs/301ce0e94e99800111e7736a3262e994.json diff --git a/packages/hardhat/contracts/EASOnboarding.sol b/packages/hardhat/contracts/EASOnboarding.sol index 778cbbbbc..b7044ef5d 100644 --- a/packages/hardhat/contracts/EASOnboarding.sol +++ b/packages/hardhat/contracts/EASOnboarding.sol @@ -4,155 +4,210 @@ pragma solidity ^0.8.20; import "./lib/Structs.sol"; import "./storage/EASOnboardingStorage.sol"; -contract SEEDtest is EASOnboardingStorage { - constructor() { - deployer = msg.sender; - } - - modifier isMentorAddress(address _mentorAddress) { - require( - isMentor[_mentorAddress] || _mentorAddress == deployer, "Only selected mentor addresses can create quiz" - ); - _; - } - - event EventCreated( - uint256 indexed eventId, string eventName, address indexed mentorAddress, uint256 closingTimestamp - ); - - event AttestationAdded(address indexed studentAddress, uint256 indexed eventId, bytes32 attestation); - event MentorAdded(address indexed mentorAddress); - event OverrideEventFlagToggled(uint256 indexed eventId, bool status); - event MentorRemoved(address indexed mentorAddress); - - function getAttested(uint256 _eventId, uint256 _level, bytes32 _msgHash, bytes memory _signature) - public - returns (bool) - { - // This should take care of failed attempt to getAttested - require( - studentEventMap[msg.sender][_eventId].attestation == bytes32(0), "Student already attested for this event" - ); - require(isVerified(_msgHash, _signature), "Invalid Txn Source"); - require(events[_eventId].isActive || !events[_eventId].overrideClosingTimestamp, "Event is no longer active"); - require( - (events[_eventId].closingTimestamp > block.timestamp) || !events[_eventId].overrideClosingTimestamp, - "Event is past closing timestamp" - ); - attestationProfile[msg.sender].studentLevel = _level; - studentEventMap[msg.sender][_eventId].eventId = _eventId; - studentEventMap[msg.sender][_eventId].eventName = events[_eventId].eventName; - studentEventMap[msg.sender][_eventId].eventDescription = events[_eventId].eventDescription; - studentEventMap[msg.sender][_eventId].mentorName = events[_eventId].mentorName; - studentEventMap[msg.sender][_eventId].mentorAddress = events[_eventId].mentorAddress; - studentEventMap[msg.sender][_eventId].level = _level; - return true; - } - - function addAttestation(bytes32 _attestation, address _studentAddress, uint256 _eventId) public { - require(msg.sender == deployer); - require( - studentEventMap[_studentAddress][_eventId].attestation == bytes32(0), - "Student already attested for this event" - ); - events[_eventId].attendees.push(_studentAddress); - events[_eventId].attendeeCount++; - attestationProfile[_studentAddress].eventsCompleted.push(_eventId); - attestationProfile[_studentAddress].attestations.push(_attestation); - studentEventMap[_studentAddress][_eventId].attestation = _attestation; - - emit AttestationAdded(_studentAddress, _eventId, _attestation); - } - - function toggleOverrideEventFlag(uint256 _eventId, bool _res) public isMentorAddress(msg.sender) { - events[_eventId].overrideClosingTimestamp = _res; - emit OverrideEventFlagToggled(_eventId, _res); - } - - function createEvent( - uint256 _closingTimestamp, - uint256 _level, - uint8 _type, - string memory _eventName, - string memory _eventDescription, - string memory _mentorName, - string memory _badgeUri, - bytes32 _schemaUID - ) public isMentorAddress(msg.sender) { - require(_closingTimestamp > block.timestamp, "Closing timestamp cannot be in the past."); - - events[eventIdCounter].typeOf = _type; - events[eventIdCounter].eventId = eventIdCounter; - events[eventIdCounter].level = _level; - events[eventIdCounter].closingTimestamp = _closingTimestamp; - events[eventIdCounter].attendeeCount = 1; - events[eventIdCounter].eventName = _eventName; - events[eventIdCounter].eventDescription = _eventDescription; - events[eventIdCounter].mentorName = _mentorName; - events[eventIdCounter].badgeUri = _badgeUri; - events[eventIdCounter].mentorAddress = msg.sender; - events[eventIdCounter].attendees.push(msg.sender); - events[eventIdCounter].isActive = true; - events[eventIdCounter].overrideClosingTimestamp = false; - events[eventIdCounter].schemaUID = _schemaUID; - eventIdCounter++; - - emit EventCreated(eventIdCounter - 1, _eventName, msg.sender, _closingTimestamp); - } - - function isVerified(bytes32 _messageHash, bytes memory _signature) public view returns (bool) { - // The ethSignedMessageHash is the hash that the signer actually signed - bytes32 ethSignedMessageHash = getEthSignedMessageHash(_messageHash); - - // Recover the signer's address from the signature - address signer = recoverSigner(ethSignedMessageHash, _signature); - - require(signer == deployer, "Unauthorized Contract call"); - - return true; - } - - function addMentors(address[] memory _newMentors) public isMentorAddress(msg.sender) { - for (uint256 i = 0; i < _newMentors.length; i++) { - isMentor[_newMentors[i]] = true; - emit MentorAdded(_newMentors[i]); - } - } - - function removeMentors(address[] memory _mentors) public { - require(msg.sender == deployer, "Only deployer can remove mentors"); - - for (uint256 i = 0; i < _mentors.length; i++) { - if (isMentor[_mentors[i]]) { - isMentor[_mentors[i]] = false; - emit MentorRemoved(_mentors[i]); - } - } - } - - function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) { - return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)); - } - - function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) public pure returns (address) { - (uint8 v, bytes32 r, bytes32 s) = splitSignature(_signature); - return ecrecover(_ethSignedMessageHash, v, r, s); - } - - function splitSignature(bytes memory sig) public pure returns (uint8, bytes32, bytes32) { - require(sig.length == 65, "invalid signature length"); - bytes32 r; - bytes32 s; - uint8 v; - - assembly { - // first 32 bytes, after the length prefix - r := mload(add(sig, 32)) - // second 32 bytes - s := mload(add(sig, 64)) - // final byte (first byte of the next 32 bytes) - v := byte(0, mload(add(sig, 96))) - } - return (v, r, s); - } +contract EASOnboarding is EASOnboardingStorage { + constructor() { + deployer = msg.sender; + } + + modifier isMentorAddress(address _mentorAddress) { + require( + isMentor[_mentorAddress] || _mentorAddress == deployer, + "Only selected mentor addresses can create quiz" + ); + _; + } + + event EventCreated( + uint256 indexed eventId, + string eventName, + address indexed mentorAddress, + uint256 closingTimestamp + ); + + event AttestationAdded( + address indexed studentAddress, + uint256 indexed eventId, + bytes32 attestation + ); + event MentorAdded(address indexed mentorAddress); + event OverrideEventFlagToggled(uint256 indexed eventId, bool status); + event MentorRemoved(address indexed mentorAddress); + + function getAttested( + uint256 _eventId, + uint256 _level, + bytes32 _msgHash, + bytes memory _signature + ) public returns (bool) { + // This should take care of failed attempt to getAttested + require( + studentEventMap[msg.sender][_eventId].attestation == bytes32(0), + "Student already attested for this event" + ); + require(isVerified(_msgHash, _signature), "Invalid Txn Source"); + require( + events[_eventId].isActive || + !events[_eventId].overrideClosingTimestamp, + "Event is no longer active" + ); + require( + (events[_eventId].closingTimestamp > block.timestamp) || + !events[_eventId].overrideClosingTimestamp, + "Event is past closing timestamp" + ); + attestationProfile[msg.sender].studentLevel = _level; + studentEventMap[msg.sender][_eventId].eventId = _eventId; + studentEventMap[msg.sender][_eventId].eventName = events[_eventId] + .eventName; + studentEventMap[msg.sender][_eventId].eventDescription = events[ + _eventId + ].eventDescription; + studentEventMap[msg.sender][_eventId].mentorName = events[_eventId] + .mentorName; + studentEventMap[msg.sender][_eventId].mentorAddress = events[_eventId] + .mentorAddress; + studentEventMap[msg.sender][_eventId].level = _level; + return true; + } + + function addAttestation( + bytes32 _attestation, + address _studentAddress, + uint256 _eventId + ) public { + require(msg.sender == deployer); + require( + studentEventMap[_studentAddress][_eventId].attestation == + bytes32(0), + "Student already attested for this event" + ); + events[_eventId].attendees.push(_studentAddress); + events[_eventId].attendeeCount++; + attestationProfile[_studentAddress].eventsCompleted.push(_eventId); + attestationProfile[_studentAddress].attestations.push(_attestation); + studentEventMap[_studentAddress][_eventId].attestation = _attestation; + + emit AttestationAdded(_studentAddress, _eventId, _attestation); + } + + function toggleOverrideEventFlag( + uint256 _eventId, + bool _res + ) public isMentorAddress(msg.sender) { + events[_eventId].overrideClosingTimestamp = _res; + emit OverrideEventFlagToggled(_eventId, _res); + } + + function createEvent( + uint256 _closingTimestamp, + uint256 _level, + uint8 _type, + string memory _eventName, + string memory _eventDescription, + string memory _mentorName, + string memory _badgeUri, + bytes32 _schemaUID + ) public isMentorAddress(msg.sender) { + require( + _closingTimestamp > block.timestamp, + "Closing timestamp cannot be in the past." + ); + + events[eventIdCounter].typeOf = _type; + events[eventIdCounter].eventId = eventIdCounter; + events[eventIdCounter].level = _level; + events[eventIdCounter].closingTimestamp = _closingTimestamp; + events[eventIdCounter].attendeeCount = 1; + events[eventIdCounter].eventName = _eventName; + events[eventIdCounter].eventDescription = _eventDescription; + events[eventIdCounter].mentorName = _mentorName; + events[eventIdCounter].badgeUri = _badgeUri; + events[eventIdCounter].mentorAddress = msg.sender; + events[eventIdCounter].attendees.push(msg.sender); + events[eventIdCounter].isActive = true; + events[eventIdCounter].overrideClosingTimestamp = false; + events[eventIdCounter].schemaUID = _schemaUID; + eventIdCounter++; + + emit EventCreated( + eventIdCounter - 1, + _eventName, + msg.sender, + _closingTimestamp + ); + } + + function isVerified( + bytes32 _messageHash, + bytes memory _signature + ) public view returns (bool) { + // The ethSignedMessageHash is the hash that the signer actually signed + bytes32 ethSignedMessageHash = getEthSignedMessageHash(_messageHash); + + // Recover the signer's address from the signature + address signer = recoverSigner(ethSignedMessageHash, _signature); + + require(signer == deployer, "Unauthorized Contract call"); + + return true; + } + + function addMentors( + address[] memory _newMentors + ) public isMentorAddress(msg.sender) { + for (uint256 i = 0; i < _newMentors.length; i++) { + isMentor[_newMentors[i]] = true; + emit MentorAdded(_newMentors[i]); + } + } + + function removeMentors(address[] memory _mentors) public { + require(msg.sender == deployer, "Only deployer can remove mentors"); + + for (uint256 i = 0; i < _mentors.length; i++) { + if (isMentor[_mentors[i]]) { + isMentor[_mentors[i]] = false; + emit MentorRemoved(_mentors[i]); + } + } + } + + function getEthSignedMessageHash( + bytes32 _messageHash + ) public pure returns (bytes32) { + return + keccak256( + abi.encodePacked( + "\x19Ethereum Signed Message:\n32", + _messageHash + ) + ); + } + + function recoverSigner( + bytes32 _ethSignedMessageHash, + bytes memory _signature + ) public pure returns (address) { + (uint8 v, bytes32 r, bytes32 s) = splitSignature(_signature); + return ecrecover(_ethSignedMessageHash, v, r, s); + } + + function splitSignature( + bytes memory sig + ) public pure returns (uint8, bytes32, bytes32) { + require(sig.length == 65, "invalid signature length"); + bytes32 r; + bytes32 s; + uint8 v; + + assembly { + // first 32 bytes, after the length prefix + r := mload(add(sig, 32)) + // second 32 bytes + s := mload(add(sig, 64)) + // final byte (first byte of the next 32 bytes) + v := byte(0, mload(add(sig, 96))) + } + return (v, r, s); + } } diff --git a/packages/hardhat/deploy/00_deploy_your_contract.ts b/packages/hardhat/deploy/00_deploy_your_contract.ts index 8dab8278c..056671305 100644 --- a/packages/hardhat/deploy/00_deploy_your_contract.ts +++ b/packages/hardhat/deploy/00_deploy_your_contract.ts @@ -57,7 +57,7 @@ const deployMyContract: DeployFunction = async function (hre: HardhatRuntimeEnvi const { deployer } = await hre.getNamedAccounts(); const { deploy } = hre.deployments; - await deploy("SEEDtest", { + await deploy("EASOnboarding", { from: deployer, // Contract constructor arguments args: [], @@ -65,10 +65,11 @@ const deployMyContract: DeployFunction = async function (hre: HardhatRuntimeEnvi // autoMine: can be passed to the deploy function to make the deployment process faster on local networks by // automatically mining the contract deployment transaction. There is no effect on live networks. autoMine: true, + // nonce: "0x01", }); // Get the deployed contract to interact with it after deploying. - const myContract = await hre.ethers.getContract("SEEDtest", deployer); + const myContract = await hre.ethers.getContract("EASOnboarding", deployer); console.log("contract deplpyed : ", myContract.target); }; diff --git a/packages/hardhat/deployments/baseSepolia/EASOnboarding.json b/packages/hardhat/deployments/baseSepolia/EASOnboarding.json index 9b8fc5f80..10240d9a6 100644 --- a/packages/hardhat/deployments/baseSepolia/EASOnboarding.json +++ b/packages/hardhat/deployments/baseSepolia/EASOnboarding.json @@ -1,5 +1,5 @@ { - "address": "0xaF66288e6c7865F3E66B72DCB5bB0aB92f1306bA", + "address": "0x304892F028a4EB10261f47B535Ca1E13C86Fdf74", "abi": [ { "inputs": [], @@ -712,28 +712,28 @@ "type": "function" } ], - "transactionHash": "0x0d2223f70f35c884d444f61d3a792def90e1320f65b41aa5576f8e8131947a07", + "transactionHash": "0x7d7feb76370c0a392c464e03c7fbb0f8a94297feb4686396693094394ce3f037", "receipt": { "to": null, - "from": "0xbd53471abf1C3827b8EeEF4898fcfe76821a3C2B", - "contractAddress": "0xaF66288e6c7865F3E66B72DCB5bB0aB92f1306bA", - "transactionIndex": 10, + "from": "0xD4BAD65991F6362DB367e9F40e8f9CE115b83a9E", + "contractAddress": "0x304892F028a4EB10261f47B535Ca1E13C86Fdf74", + "transactionIndex": 1, "gasUsed": "2372242", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x05a36eb64f6f6612bfe2262cd66ea41738a497d959fa5300c78f22c0757e8b6e", - "transactionHash": "0x0d2223f70f35c884d444f61d3a792def90e1320f65b41aa5576f8e8131947a07", + "blockHash": "0x3b1be849edab82d5088156c44fcc489e46c774189c25d0c574a5fb013cc408bf", + "transactionHash": "0x7d7feb76370c0a392c464e03c7fbb0f8a94297feb4686396693094394ce3f037", "logs": [], - "blockNumber": 12273690, - "cumulativeGasUsed": "4793863", + "blockNumber": 15339640, + "cumulativeGasUsed": "2416105", "status": 1, "byzantium": true }, "args": [], - "numDeployments": 14, - "solcInputHash": "27be76f6bf7e560ae246d788074a8eb1", - "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"studentAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"attestation\",\"type\":\"bytes32\"}],\"name\":\"AttestationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"closingTimestamp\",\"type\":\"uint256\"}],\"name\":\"EventCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"name\":\"MentorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"name\":\"MentorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"OverrideEventFlagToggled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_attestation\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_studentAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_eventId\",\"type\":\"uint256\"}],\"name\":\"addAttestation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newMentors\",\"type\":\"address[]\"}],\"name\":\"addMentors\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"attestationProfile\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"studentLevel\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_closingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_level\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_mentorName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_badgeUri\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_schemaUID\",\"type\":\"bytes32\"}],\"name\":\"createEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eventIdCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"typeOf\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"attendeeCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"badgeUri\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overrideClosingTimestamp\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllEvents\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"typeOf\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"attendeeCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"badgeUri\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attendees\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overrideClosingTimestamp\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct Structs.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_studentAddress\",\"type\":\"address\"}],\"name\":\"getAllStudentEventsWithAttestations\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"attestation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"internalType\":\"struct Structs.metaEvent[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_level\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"getAttested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageHash\",\"type\":\"bytes32\"}],\"name\":\"getEthSignedMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_studentAddress\",\"type\":\"address\"}],\"name\":\"getEventsCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_studentLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isMentor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_ethSignedMessageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_mentors\",\"type\":\"address[]\"}],\"name\":\"removeMentors\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"splitSignature\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"studentEventMap\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"attestation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eventId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_res\",\"type\":\"bool\"}],\"name\":\"toggleOverrideEventFlag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/EASOnboarding.sol\":\"EASOnboarding\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/EASOnboarding.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport \\\"./lib/Structs.sol\\\";\\nimport \\\"./storage/EASOnboardingStorage.sol\\\";\\n\\ncontract EASOnboarding is EASOnboardingStorage {\\n constructor() {\\n deployer = msg.sender;\\n }\\n\\n modifier isMentorAddress(address _mentorAddress) {\\n require(\\n isMentor[_mentorAddress] || _mentorAddress == deployer, \\\"Only selected mentor addresses can create quiz\\\"\\n );\\n _;\\n }\\n\\n event EventCreated(\\n uint256 indexed eventId, string eventName, address indexed mentorAddress, uint256 closingTimestamp\\n );\\n\\n event AttestationAdded(address indexed studentAddress, uint256 indexed eventId, bytes32 attestation);\\n event MentorAdded(address indexed mentorAddress);\\n event OverrideEventFlagToggled(uint256 indexed eventId, bool status);\\n event MentorRemoved(address indexed mentorAddress);\\n\\n function getAttested(uint256 _eventId, uint256 _level, bytes32 _msgHash, bytes memory _signature)\\n public\\n returns (bool)\\n {\\n // This should take care of failed attempt to getAttested\\n require(\\n studentEventMap[msg.sender][_eventId].attestation == bytes32(0), \\\"Student already attested for this event\\\"\\n );\\n require(isVerified(_msgHash, _signature), \\\"Invalid Txn Source\\\");\\n require(events[_eventId].isActive || !events[_eventId].overrideClosingTimestamp, \\\"Event is no longer active\\\");\\n require(\\n (events[_eventId].closingTimestamp > block.timestamp) || !events[_eventId].overrideClosingTimestamp,\\n \\\"Event is past closing timestamp\\\"\\n );\\n attestationProfile[msg.sender].studentLevel = _level;\\n studentEventMap[msg.sender][_eventId].eventId = _eventId;\\n studentEventMap[msg.sender][_eventId].eventName = events[_eventId].eventName;\\n studentEventMap[msg.sender][_eventId].eventDescription = events[_eventId].eventDescription;\\n studentEventMap[msg.sender][_eventId].mentorName = events[_eventId].mentorName;\\n studentEventMap[msg.sender][_eventId].mentorAddress = events[_eventId].mentorAddress;\\n studentEventMap[msg.sender][_eventId].level = _level;\\n return true;\\n }\\n\\n function addAttestation(bytes32 _attestation, address _studentAddress, uint256 _eventId) public {\\n require(msg.sender == deployer);\\n require(\\n studentEventMap[_studentAddress][_eventId].attestation == bytes32(0),\\n \\\"Student already attested for this event\\\"\\n );\\n events[_eventId].attendees.push(_studentAddress);\\n events[_eventId].attendeeCount++;\\n attestationProfile[_studentAddress].eventsCompleted.push(_eventId);\\n attestationProfile[_studentAddress].attestations.push(_attestation);\\n studentEventMap[_studentAddress][_eventId].attestation = _attestation;\\n\\n emit AttestationAdded(_studentAddress, _eventId, _attestation);\\n }\\n\\n function toggleOverrideEventFlag(uint256 _eventId, bool _res) public isMentorAddress(msg.sender) {\\n events[_eventId].overrideClosingTimestamp = _res;\\n emit OverrideEventFlagToggled(_eventId, _res);\\n }\\n\\n function createEvent(\\n uint256 _closingTimestamp,\\n uint256 _level,\\n uint8 _type,\\n string memory _eventName,\\n string memory _eventDescription,\\n string memory _mentorName,\\n string memory _badgeUri,\\n bytes32 _schemaUID\\n ) public isMentorAddress(msg.sender) {\\n require(_closingTimestamp > block.timestamp, \\\"Closing timestamp cannot be in the past.\\\");\\n\\n events[eventIdCounter].typeOf = _type;\\n events[eventIdCounter].eventId = eventIdCounter;\\n events[eventIdCounter].level = _level;\\n events[eventIdCounter].closingTimestamp = _closingTimestamp;\\n events[eventIdCounter].attendeeCount = 1;\\n events[eventIdCounter].eventName = _eventName;\\n events[eventIdCounter].eventDescription = _eventDescription;\\n events[eventIdCounter].mentorName = _mentorName;\\n events[eventIdCounter].badgeUri = _badgeUri;\\n events[eventIdCounter].mentorAddress = msg.sender;\\n events[eventIdCounter].attendees.push(msg.sender);\\n events[eventIdCounter].isActive = true;\\n events[eventIdCounter].overrideClosingTimestamp = false;\\n events[eventIdCounter].schemaUID = _schemaUID;\\n eventIdCounter++;\\n\\n emit EventCreated(eventIdCounter - 1, _eventName, msg.sender, _closingTimestamp);\\n }\\n\\n function isVerified(bytes32 _messageHash, bytes memory _signature) public view returns (bool) {\\n // The ethSignedMessageHash is the hash that the signer actually signed\\n bytes32 ethSignedMessageHash = getEthSignedMessageHash(_messageHash);\\n\\n // Recover the signer's address from the signature\\n address signer = recoverSigner(ethSignedMessageHash, _signature);\\n\\n require(signer == deployer, \\\"Unauthorized Contract call\\\");\\n\\n return true;\\n }\\n\\n function addMentors(address[] memory _newMentors) public isMentorAddress(msg.sender) {\\n for (uint256 i = 0; i < _newMentors.length; i++) {\\n isMentor[_newMentors[i]] = true;\\n emit MentorAdded(_newMentors[i]);\\n }\\n }\\n\\n function removeMentors(address[] memory _mentors) public {\\n require(msg.sender == deployer, \\\"Only deployer can remove mentors\\\");\\n\\n for (uint256 i = 0; i < _mentors.length; i++) {\\n if (isMentor[_mentors[i]]) {\\n isMentor[_mentors[i]] = false;\\n emit MentorRemoved(_mentors[i]);\\n }\\n }\\n }\\n\\n function getEthSignedMessageHash(bytes32 _messageHash) public pure returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", _messageHash));\\n }\\n\\n function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) public pure returns (address) {\\n (uint8 v, bytes32 r, bytes32 s) = splitSignature(_signature);\\n return ecrecover(_ethSignedMessageHash, v, r, s);\\n }\\n\\n function splitSignature(bytes memory sig) public pure returns (uint8, bytes32, bytes32) {\\n require(sig.length == 65, \\\"invalid signature length\\\");\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n assembly {\\n // first 32 bytes, after the length prefix\\n r := mload(add(sig, 32))\\n // second 32 bytes\\n s := mload(add(sig, 64))\\n // final byte (first byte of the next 32 bytes)\\n v := byte(0, mload(add(sig, 96)))\\n }\\n return (v, r, s);\\n }\\n}\\n\",\"keccak256\":\"0xac6b56ecfeac84c09c10c74e0cdef1bb6f349590adbd9bb4e4af98229353b549\",\"license\":\"MIT\"},\"contracts/lib/Structs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary Structs {\\n struct Event {\\n uint8 typeOf;\\n uint256 eventId;\\n uint256 level;\\n uint256 closingTimestamp;\\n uint256 attendeeCount;\\n string eventName;\\n string eventDescription;\\n string mentorName;\\n string badgeUri;\\n address mentorAddress;\\n address[] attendees;\\n bool isActive;\\n bool overrideClosingTimestamp;\\n bytes32 schemaUID;\\n }\\n\\n struct AttestationProfile {\\n uint256 studentLevel;\\n uint256[] eventsCompleted;\\n bytes32[] attestations;\\n }\\n\\n struct metaEvent {\\n bytes32 attestation;\\n uint256 eventId;\\n uint256 level;\\n string eventName;\\n string eventDescription;\\n string mentorName;\\n address mentorAddress;\\n }\\n}\\n\",\"keccak256\":\"0x22b719d7df7169230535f24cae6f0066f51b8813ed4de6d0596427649318c00a\",\"license\":\"MIT\"},\"contracts/storage/EASOnboardingStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport \\\"../lib/Structs.sol\\\";\\nimport \\\"hardhat/console.sol\\\";\\n\\ncontract EASOnboardingStorage {\\n address deployer;\\n\\n mapping(address => Structs.AttestationProfile) public attestationProfile;\\n mapping(address => mapping(uint256 => Structs.metaEvent)) public studentEventMap;\\n mapping(uint256 => Structs.Event) public events;\\n mapping(address => bool) public isMentor;\\n uint256 public eventIdCounter = 1;\\n\\n function getAllEvents() public view returns (Structs.Event[] memory) {\\n Structs.Event[] memory eventsArray = new Structs.Event[](eventIdCounter - 1);\\n for (uint256 i = 1; i < eventIdCounter; i++) {\\n eventsArray[i - 1] = events[i];\\n }\\n return eventsArray;\\n }\\n // Function to get eventsCompleted\\n\\n function getAllStudentEventsWithAttestations(address _studentAddress)\\n public\\n view\\n returns (Structs.metaEvent[] memory, string[] memory)\\n {\\n string[] memory uris = new string[](attestationProfile[_studentAddress].eventsCompleted.length);\\n Structs.metaEvent[] memory metaArray =\\n new Structs.metaEvent[](attestationProfile[_studentAddress].eventsCompleted.length);\\n for (uint256 i = 0; i < attestationProfile[_studentAddress].eventsCompleted.length; i++) {\\n metaArray[i] = studentEventMap[_studentAddress][attestationProfile[_studentAddress].eventsCompleted[i]];\\n uris[i] = events[attestationProfile[_studentAddress].eventsCompleted[i]].badgeUri; \\n }\\n return (metaArray, uris);\\n }\\n\\n function getEventsCompleted(address _studentAddress)\\n public\\n view\\n returns (uint256 _studentLevel, uint256[] memory, bytes32[] memory)\\n {\\n return (\\n attestationProfile[_studentAddress].studentLevel,\\n attestationProfile[_studentAddress].eventsCompleted,\\n attestationProfile[_studentAddress].attestations\\n );\\n }\\n}\\n\",\"keccak256\":\"0xddad0f859974ddf5f89af3cef77c115cf41fe32e515d9d04fa99c2b3bb9730c9\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6080604052600160055534801561001557600080fd5b50600080546001600160a01b03191633179055612922806100376000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063a264efce116100a2578063e01a0ebe11610071578063e01a0ebe146102cc578063e7ce9ba3146102d5578063ed0568af146102e8578063fa54080114610309578063fed6bf281461031c57600080fd5b8063a264efce1461025f578063a7bb580314610272578063c27a500d146102a4578063c3816c13146102b957600080fd5b80635e98a145116100e95780635e98a1451461019e5780636dff9131146101d15780637fcacc0e146101ff57806391ea63641461021257806397aba7f91461023457600080fd5b8063030666c51461011b57806306648651146101305780630b791430146101435780635c78442c14610178575b600080fd5b61012e610129366004611db3565b61032f565b005b61012e61013e366004611ea5565b610592565b610156610151366004611eda565b6106d1565b60405161016f9d9c9b9a99989796959493929190611f39565b60405180910390f35b61018b610186366004611fea565b61096d565b60405161016f9796959493929190612014565b6101c16101ac36600461207c565b60046020526000908152604090205460ff1681565b604051901515815260200161016f565b6101f16101df36600461207c565b60016020526000908152604090205481565b60405190815260200161016f565b6101c161020d36600461209e565b610b53565b61022561022036600461207c565b610bda565b60405161016f939291906120e5565b61024761024236600461209e565b610cb0565b6040516001600160a01b03909116815260200161016f565b61012e61026d36600461216b565b610d2f565b6102856102803660046121a0565b610ddd565b6040805160ff909416845260208401929092529082015260600161016f565b6102ac610e4f565b60405161016f9190612221565b6101c16102c736600461237d565b6112b9565b6101f160055481565b61012e6102e33660046123d7565b61154e565b6102fb6102f636600461207c565b6116b3565b60405161016f9291906124d9565b6101f1610317366004611eda565b611b83565b61012e61032a3660046123d7565b611bd6565b3360008181526004602052604090205460ff168061035a57506000546001600160a01b038281169116145b61037f5760405162461bcd60e51b8152600401610376906125c0565b60405180910390fd5b4289116103df5760405162461bcd60e51b815260206004820152602860248201527f436c6f73696e672074696d657374616d702063616e6e6f7420626520696e20746044820152673432903830b9ba1760c11b6064820152608401610376565b600580546000908152600360208190526040808320805460ff191660ff8d1617905583548084528184206001818101929092556002018d9055845484528184209092018d90558354835280832060040191909155825482529020016104448782612690565b5060055460009081526003602052604090206006016104638682612690565b5060055460009081526003602052604090206007016104828582612690565b5060055460009081526003602052604090206008016104a18482612690565b506005805460009081526003602090815260408083206009018054336001600160a01b0319918216811790925585548552828520600a018054600181810183559187529486209094018054909116909117905583548352808320600b908101805460ff191690931790925583548352808320909101805461ff0019169055825482528120600c018490558154919061053883612766565b9091555050600554339061054e9060019061277f565b7fad389ee79ceb9d0e3a1739d75d42c8727ca5946b701beaa8ef2801b04d7d7a57888c60405161057f929190612792565b60405180910390a3505050505050505050565b6000546001600160a01b031633146105a957600080fd5b6001600160a01b0382166000908152600260209081526040808320848452909152902054156105ea5760405162461bcd60e51b8152600401610376906127b4565b60008181526003602090815260408220600a8101805460018101825590845291832090910180546001600160a01b0319166001600160a01b03861617905582825260040180549161063a83612766565b90915550506001600160a01b038216600081815260016020818152604080842080840180548086018255908652838620018790556002908101805494850181558552828520909301889055848452918152818320858452815291819020869055518581528392917ffd78fe1c1010dd57ea4476d0eb6d5bd32e62d719166bf0974f538b76dbf9fdb2910160405180910390a3505050565b600360208190526000918252604090912080546001820154600283015493830154600484015460058501805460ff9095169693959394929391926107149061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107409061260e565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050908060060180546107a29061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce9061260e565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050908060070180546108309061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461085c9061260e565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050908060080180546108be9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea9061260e565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050506009840154600b850154600c9095015493946001600160a01b039091169360ff808316945061010090920490911691508d565b60026020818152600093845260408085209091529183529120805460018201549282015460038301805492949391926109a59061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d19061260e565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505090806004018054610a339061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f9061260e565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b505050505090806005018054610ac19061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aed9061260e565b8015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b505050600690930154919250506001600160a01b031687565b600080610b5f84611b83565b90506000610b6d8285610cb0565b6000549091506001600160a01b03808316911614610bcd5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420436f6e74726163742063616c6c0000000000006044820152606401610376565b6001925050505b92915050565b6001600160a01b03811660009081526001602081815260408084208054938101805483518186028101860190945280845260609586959094929360020192918491830182828015610c4a57602002820191906000526020600020905b815481526020019060010190808311610c36575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c9c57602002820191906000526020600020905b815481526020019060010190808311610c88575b505050505090509250925092509193909250565b600080600080610cbf85610ddd565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa158015610d1a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360008181526004602052604090205460ff1680610d5a57506000546001600160a01b038281169116145b610d765760405162461bcd60e51b8152600401610376906125c0565b60008381526003602052604090819020600b0180548415156101000261ff00199091161790555183907f255b22f81f52ca696c92545ed4e776709442e0c2f0d5b053f1bb5e73729826a990610dd090851515815260200190565b60405180910390a2505050565b60008060008351604114610e335760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610376565b5050506020810151604082015160609092015160001a92909190565b606060006001600554610e62919061277f565b67ffffffffffffffff811115610e7a57610e7a611cfc565b604051908082528060200260200182016040528015610f3057816020015b610f1d604051806101c00160405280600060ff168152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081526020016060815260200160006001600160a01b0316815260200160608152602001600015158152602001600015158152602001600080191681525090565b815260200190600190039081610e985790505b50905060015b6005548110156112b35760008181526003602081815260409283902083516101c081018552815460ff1681526001820154928101929092526002810154938201939093529082015460608201526004820154608082015260058201805491929160a084019190610fa59061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd19061260e565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b505050505081526020016006820180546110379061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110639061260e565b80156110b05780601f10611085576101008083540402835291602001916110b0565b820191906000526020600020905b81548152906001019060200180831161109357829003601f168201915b505050505081526020016007820180546110c99061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110f59061260e565b80156111425780601f1061111757610100808354040283529160200191611142565b820191906000526020600020905b81548152906001019060200180831161112557829003601f168201915b5050505050815260200160088201805461115b9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546111879061260e565b80156111d45780601f106111a9576101008083540402835291602001916111d4565b820191906000526020600020905b8154815290600101906020018083116111b757829003601f168201915b505050918352505060098201546001600160a01b0316602080830191909152600a83018054604080518285028101850182528281529401939283018282801561124657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611228575b5050509183525050600b82015460ff808216151560208401526101009091041615156040820152600c909101546060909101528261128560018461277f565b81518110611295576112956127fb565b602002602001018190525080806112ab90612766565b915050610f36565b50919050565b336000908152600260209081526040808320878452909152812054156112f15760405162461bcd60e51b8152600401610376906127b4565b6112fb8383610b53565b61133c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642054786e20536f7572636560701b6044820152606401610376565b6000858152600360205260409020600b015460ff168061137357506000858152600360205260409020600b0154610100900460ff16155b6113bf5760405162461bcd60e51b815260206004820152601960248201527f4576656e74206973206e6f206c6f6e67657220616374697665000000000000006044820152606401610376565b600085815260036020819052604090912001544210806113f657506000858152600360205260409020600b0154610100900460ff16155b6114425760405162461bcd60e51b815260206004820152601f60248201527f4576656e74206973207061737420636c6f73696e672074696d657374616d70006044820152606401610376565b336000908152600160208181526040808420889055600282528084208985528083528185209384018a90556003808452919094209390915201906114899060050182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600401906114bf9060060182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600501906114f59060070182612811565b5050506000838152600360209081526040808320600901543384526002808452828520978552969092529091206006810180546001600160a01b0319166001600160a01b03909316929092179091559092015550600190565b6000546001600160a01b031633146115a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206465706c6f7965722063616e2072656d6f7665206d656e746f72736044820152606401610376565b60005b81518110156116af57600460008383815181106115ca576115ca6127fb565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561169d5760006004600084848151811061160e5761160e6127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081818151811061165f5761165f6127fb565b60200260200101516001600160a01b03167f8a89d1bce5d2a5b9324b1e700a7bb2d8ed55b236f9ba2c17a6917a0597fc404160405160405180910390a25b806116a781612766565b9150506115ab565b5050565b6001600160a01b038116600090815260016020819052604082200154606091829167ffffffffffffffff8111156116ec576116ec611cfc565b60405190808252806020026020018201604052801561171f57816020015b606081526020019060019003908161170a5790505b506001600160a01b0385166000908152600160208190526040822001549192509067ffffffffffffffff81111561175857611758611cfc565b6040519080825280602002602001820160405280156117d557816020015b6117c26040518060e0016040528060008019168152602001600081526020016000815260200160608152602001606081526020016060815260200160006001600160a01b031681525090565b8152602001906001900390816117765790505b50905060005b6001600160a01b03861660009081526001602081905260409091200154811015611b79576001600160a01b038616600090815260026020908152604080832060019283905290832090910180549192918490811061183b5761183b6127fb565b906000526020600020015481526020019081526020016000206040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201805461188d9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546118b99061260e565b80156119065780601f106118db57610100808354040283529160200191611906565b820191906000526020600020905b8154815290600101906020018083116118e957829003601f168201915b5050505050815260200160048201805461191f9061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461194b9061260e565b80156119985780601f1061196d57610100808354040283529160200191611998565b820191906000526020600020905b81548152906001019060200180831161197b57829003601f168201915b505050505081526020016005820180546119b19061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd9061260e565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b5050509183525050600691909101546001600160a01b03166020909101528251839083908110611a5c57611a5c6127fb565b60200260200101819052506003600060016000896001600160a01b03166001600160a01b031681526020019081526020016000206001018381548110611aa457611aa46127fb565b906000526020600020015481526020019081526020016000206008018054611acb9061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054611af79061260e565b8015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b5050505050838281518110611b5b57611b5b6127fb565b60200260200101819052508080611b7190612766565b9150506117db565b5094909350915050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3360008181526004602052604090205460ff1680611c0157506000546001600160a01b038281169116145b611c1d5760405162461bcd60e51b8152600401610376906125c0565b60005b8251811015611ce157600160046000858481518110611c4157611c416127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110611c9257611c926127fb565b60200260200101516001600160a01b03167f4df3f3208bfbe9457b85364190a65e66a3e7a7cded1cf16b59627bc99bad5db960405160405180910390a280611cd981612766565b915050611c20565b505050565b803560ff81168114611cf757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d3b57611d3b611cfc565b604052919050565b600082601f830112611d5457600080fd5b813567ffffffffffffffff811115611d6e57611d6e611cfc565b611d81601f8201601f1916602001611d12565b818152846020838601011115611d9657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611dd057600080fd5b8835975060208901359650611de760408a01611ce6565b9550606089013567ffffffffffffffff80821115611e0457600080fd5b611e108c838d01611d43565b965060808b0135915080821115611e2657600080fd5b611e328c838d01611d43565b955060a08b0135915080821115611e4857600080fd5b611e548c838d01611d43565b945060c08b0135915080821115611e6a57600080fd5b50611e778b828c01611d43565b92505060e089013590509295985092959890939650565b80356001600160a01b0381168114611cf757600080fd5b600080600060608486031215611eba57600080fd5b83359250611eca60208501611e8e565b9150604084013590509250925092565b600060208284031215611eec57600080fd5b5035919050565b6000815180845260005b81811015611f1957602081850181015186830182015201611efd565b506000602082860101526020601f19601f83011685010191505092915050565b60ff8e1681528c60208201528b60408201528a60608201528960808201526101a060a08201526000611f6f6101a083018b611ef3565b82810360c0840152611f81818b611ef3565b905082810360e0840152611f95818a611ef3565b9050828103610100840152611faa8189611ef3565b915050611fc36101208301876001600160a01b03169052565b931515610140820152911515610160830152610180909101529a9950505050505050505050565b60008060408385031215611ffd57600080fd5b61200683611e8e565b946020939093013593505050565b87815286602082015285604082015260e06060820152600061203960e0830187611ef3565b828103608084015261204b8187611ef3565b905082810360a084015261205f8186611ef3565b91505060018060a01b03831660c083015298975050505050505050565b60006020828403121561208e57600080fd5b61209782611e8e565b9392505050565b600080604083850312156120b157600080fd5b82359150602083013567ffffffffffffffff8111156120cf57600080fd5b6120db85828601611d43565b9150509250929050565b6000606082018583526020606081850152818651808452608086019150828801935060005b818110156121265784518352938301939183019160010161210a565b50508481036040860152855180825290820192508186019060005b8181101561215d57825185529383019391830191600101612141565b509298975050505050505050565b6000806040838503121561217e57600080fd5b823591506020830135801515811461219557600080fd5b809150509250929050565b6000602082840312156121b257600080fd5b813567ffffffffffffffff8111156121c957600080fd5b6121d584828501611d43565b949350505050565b600081518084526020808501945080840160005b838110156122165781516001600160a01b0316875295820195908201906001016121f1565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561236f57888303603f190185528151805160ff1684526101c081890151858a01528782015188860152606080830151908601526080808301519086015260a0808301518187018390526122a183880182611ef3565b9250505060c080830151868303828801526122bc8382611ef3565b9250505060e080830151868303828801526122d78382611ef3565b9250505061010080830151868303828801526122f38382611ef3565b9250505061012080830151612312828801826001600160a01b03169052565b5050610140808301518683038288015261232c83826121dd565b92505050610160808301516123448288018215159052565b5050610180828101511515908601526101a09182015191909401529386019390860190600101612248565b509098975050505050505050565b6000806000806080858703121561239357600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff8111156123bf57600080fd5b6123cb87828801611d43565b91505092959194509250565b600060208083850312156123ea57600080fd5b823567ffffffffffffffff8082111561240257600080fd5b818501915085601f83011261241657600080fd5b81358181111561242857612428611cfc565b8060051b9150612439848301611d12565b818152918301840191848101908884111561245357600080fd5b938501935b838510156124785761246985611e8e565b82529385019390850190612458565b98975050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156124cc5782840389526124ba848351611ef3565b988501989350908401906001016124a2565b5091979650505050505050565b60006040808301818452808651808352606092508286019150828160051b8701016020808a0160005b848110156125a057605f198a8503018652815160e0815186528482015185870152898201518a87015288820151818a88015261254082880182611ef3565b9150506080808301518783038289015261255a8382611ef3565b9250505060a080830151878303828901526125758382611ef3565b60c0948501516001600160a01b03169890940197909752505095830195935090820190600101612502565b5050878203908801526125b38189612484565b9998505050505050505050565b6020808252602e908201527f4f6e6c792073656c6563746564206d656e746f7220616464726573736573206360408201526d30b71031b932b0ba329038bab4bd60911b606082015260800190565b600181811c9082168061262257607f821691505b6020821081036112b357634e487b7160e01b600052602260045260246000fd5b601f821115611ce157600081815260208120601f850160051c810160208610156126695750805b601f850160051c820191505b8181101561268857828155600101612675565b505050505050565b815167ffffffffffffffff8111156126aa576126aa611cfc565b6126be816126b8845461260e565b84612642565b602080601f8311600181146126f357600084156126db5750858301515b600019600386901b1c1916600185901b178555612688565b600085815260208120601f198616915b8281101561272257888601518255948401946001909101908401612703565b50858210156127405787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60006001820161277857612778612750565b5060010190565b81810381811115610bd457610bd4612750565b6040815260006127a56040830185611ef3565b90508260208301529392505050565b60208082526027908201527f53747564656e7420616c726561647920617474657374656420666f72207468696040820152661cc8195d995b9d60ca1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810361281c575050565b612826825461260e565b67ffffffffffffffff81111561283e5761283e611cfc565b61284c816126b8845461260e565b6000601f82116001811461288057600083156128685750848201545b600019600385901b1c1916600184901b1784556128e5565b600085815260209020601f19841690600086815260209020845b838110156128ba578286015482556001958601959091019060200161289a565b50858310156128d85781850154600019600388901b60f8161c191681555b50505060018360011b0184555b505050505056fea2646970667358221220c209833647768315ffa1afbe0d29c78a8c9252448be41f9baa9c1d6f749a692c64736f6c63430008140033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063a264efce116100a2578063e01a0ebe11610071578063e01a0ebe146102cc578063e7ce9ba3146102d5578063ed0568af146102e8578063fa54080114610309578063fed6bf281461031c57600080fd5b8063a264efce1461025f578063a7bb580314610272578063c27a500d146102a4578063c3816c13146102b957600080fd5b80635e98a145116100e95780635e98a1451461019e5780636dff9131146101d15780637fcacc0e146101ff57806391ea63641461021257806397aba7f91461023457600080fd5b8063030666c51461011b57806306648651146101305780630b791430146101435780635c78442c14610178575b600080fd5b61012e610129366004611db3565b61032f565b005b61012e61013e366004611ea5565b610592565b610156610151366004611eda565b6106d1565b60405161016f9d9c9b9a99989796959493929190611f39565b60405180910390f35b61018b610186366004611fea565b61096d565b60405161016f9796959493929190612014565b6101c16101ac36600461207c565b60046020526000908152604090205460ff1681565b604051901515815260200161016f565b6101f16101df36600461207c565b60016020526000908152604090205481565b60405190815260200161016f565b6101c161020d36600461209e565b610b53565b61022561022036600461207c565b610bda565b60405161016f939291906120e5565b61024761024236600461209e565b610cb0565b6040516001600160a01b03909116815260200161016f565b61012e61026d36600461216b565b610d2f565b6102856102803660046121a0565b610ddd565b6040805160ff909416845260208401929092529082015260600161016f565b6102ac610e4f565b60405161016f9190612221565b6101c16102c736600461237d565b6112b9565b6101f160055481565b61012e6102e33660046123d7565b61154e565b6102fb6102f636600461207c565b6116b3565b60405161016f9291906124d9565b6101f1610317366004611eda565b611b83565b61012e61032a3660046123d7565b611bd6565b3360008181526004602052604090205460ff168061035a57506000546001600160a01b038281169116145b61037f5760405162461bcd60e51b8152600401610376906125c0565b60405180910390fd5b4289116103df5760405162461bcd60e51b815260206004820152602860248201527f436c6f73696e672074696d657374616d702063616e6e6f7420626520696e20746044820152673432903830b9ba1760c11b6064820152608401610376565b600580546000908152600360208190526040808320805460ff191660ff8d1617905583548084528184206001818101929092556002018d9055845484528184209092018d90558354835280832060040191909155825482529020016104448782612690565b5060055460009081526003602052604090206006016104638682612690565b5060055460009081526003602052604090206007016104828582612690565b5060055460009081526003602052604090206008016104a18482612690565b506005805460009081526003602090815260408083206009018054336001600160a01b0319918216811790925585548552828520600a018054600181810183559187529486209094018054909116909117905583548352808320600b908101805460ff191690931790925583548352808320909101805461ff0019169055825482528120600c018490558154919061053883612766565b9091555050600554339061054e9060019061277f565b7fad389ee79ceb9d0e3a1739d75d42c8727ca5946b701beaa8ef2801b04d7d7a57888c60405161057f929190612792565b60405180910390a3505050505050505050565b6000546001600160a01b031633146105a957600080fd5b6001600160a01b0382166000908152600260209081526040808320848452909152902054156105ea5760405162461bcd60e51b8152600401610376906127b4565b60008181526003602090815260408220600a8101805460018101825590845291832090910180546001600160a01b0319166001600160a01b03861617905582825260040180549161063a83612766565b90915550506001600160a01b038216600081815260016020818152604080842080840180548086018255908652838620018790556002908101805494850181558552828520909301889055848452918152818320858452815291819020869055518581528392917ffd78fe1c1010dd57ea4476d0eb6d5bd32e62d719166bf0974f538b76dbf9fdb2910160405180910390a3505050565b600360208190526000918252604090912080546001820154600283015493830154600484015460058501805460ff9095169693959394929391926107149061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107409061260e565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050908060060180546107a29061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce9061260e565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050908060070180546108309061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461085c9061260e565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050908060080180546108be9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea9061260e565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050506009840154600b850154600c9095015493946001600160a01b039091169360ff808316945061010090920490911691508d565b60026020818152600093845260408085209091529183529120805460018201549282015460038301805492949391926109a59061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d19061260e565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505090806004018054610a339061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f9061260e565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b505050505090806005018054610ac19061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aed9061260e565b8015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b505050600690930154919250506001600160a01b031687565b600080610b5f84611b83565b90506000610b6d8285610cb0565b6000549091506001600160a01b03808316911614610bcd5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420436f6e74726163742063616c6c0000000000006044820152606401610376565b6001925050505b92915050565b6001600160a01b03811660009081526001602081815260408084208054938101805483518186028101860190945280845260609586959094929360020192918491830182828015610c4a57602002820191906000526020600020905b815481526020019060010190808311610c36575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c9c57602002820191906000526020600020905b815481526020019060010190808311610c88575b505050505090509250925092509193909250565b600080600080610cbf85610ddd565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa158015610d1a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360008181526004602052604090205460ff1680610d5a57506000546001600160a01b038281169116145b610d765760405162461bcd60e51b8152600401610376906125c0565b60008381526003602052604090819020600b0180548415156101000261ff00199091161790555183907f255b22f81f52ca696c92545ed4e776709442e0c2f0d5b053f1bb5e73729826a990610dd090851515815260200190565b60405180910390a2505050565b60008060008351604114610e335760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610376565b5050506020810151604082015160609092015160001a92909190565b606060006001600554610e62919061277f565b67ffffffffffffffff811115610e7a57610e7a611cfc565b604051908082528060200260200182016040528015610f3057816020015b610f1d604051806101c00160405280600060ff168152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081526020016060815260200160006001600160a01b0316815260200160608152602001600015158152602001600015158152602001600080191681525090565b815260200190600190039081610e985790505b50905060015b6005548110156112b35760008181526003602081815260409283902083516101c081018552815460ff1681526001820154928101929092526002810154938201939093529082015460608201526004820154608082015260058201805491929160a084019190610fa59061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd19061260e565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b505050505081526020016006820180546110379061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110639061260e565b80156110b05780601f10611085576101008083540402835291602001916110b0565b820191906000526020600020905b81548152906001019060200180831161109357829003601f168201915b505050505081526020016007820180546110c99061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110f59061260e565b80156111425780601f1061111757610100808354040283529160200191611142565b820191906000526020600020905b81548152906001019060200180831161112557829003601f168201915b5050505050815260200160088201805461115b9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546111879061260e565b80156111d45780601f106111a9576101008083540402835291602001916111d4565b820191906000526020600020905b8154815290600101906020018083116111b757829003601f168201915b505050918352505060098201546001600160a01b0316602080830191909152600a83018054604080518285028101850182528281529401939283018282801561124657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611228575b5050509183525050600b82015460ff808216151560208401526101009091041615156040820152600c909101546060909101528261128560018461277f565b81518110611295576112956127fb565b602002602001018190525080806112ab90612766565b915050610f36565b50919050565b336000908152600260209081526040808320878452909152812054156112f15760405162461bcd60e51b8152600401610376906127b4565b6112fb8383610b53565b61133c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642054786e20536f7572636560701b6044820152606401610376565b6000858152600360205260409020600b015460ff168061137357506000858152600360205260409020600b0154610100900460ff16155b6113bf5760405162461bcd60e51b815260206004820152601960248201527f4576656e74206973206e6f206c6f6e67657220616374697665000000000000006044820152606401610376565b600085815260036020819052604090912001544210806113f657506000858152600360205260409020600b0154610100900460ff16155b6114425760405162461bcd60e51b815260206004820152601f60248201527f4576656e74206973207061737420636c6f73696e672074696d657374616d70006044820152606401610376565b336000908152600160208181526040808420889055600282528084208985528083528185209384018a90556003808452919094209390915201906114899060050182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600401906114bf9060060182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600501906114f59060070182612811565b5050506000838152600360209081526040808320600901543384526002808452828520978552969092529091206006810180546001600160a01b0319166001600160a01b03909316929092179091559092015550600190565b6000546001600160a01b031633146115a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206465706c6f7965722063616e2072656d6f7665206d656e746f72736044820152606401610376565b60005b81518110156116af57600460008383815181106115ca576115ca6127fb565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561169d5760006004600084848151811061160e5761160e6127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081818151811061165f5761165f6127fb565b60200260200101516001600160a01b03167f8a89d1bce5d2a5b9324b1e700a7bb2d8ed55b236f9ba2c17a6917a0597fc404160405160405180910390a25b806116a781612766565b9150506115ab565b5050565b6001600160a01b038116600090815260016020819052604082200154606091829167ffffffffffffffff8111156116ec576116ec611cfc565b60405190808252806020026020018201604052801561171f57816020015b606081526020019060019003908161170a5790505b506001600160a01b0385166000908152600160208190526040822001549192509067ffffffffffffffff81111561175857611758611cfc565b6040519080825280602002602001820160405280156117d557816020015b6117c26040518060e0016040528060008019168152602001600081526020016000815260200160608152602001606081526020016060815260200160006001600160a01b031681525090565b8152602001906001900390816117765790505b50905060005b6001600160a01b03861660009081526001602081905260409091200154811015611b79576001600160a01b038616600090815260026020908152604080832060019283905290832090910180549192918490811061183b5761183b6127fb565b906000526020600020015481526020019081526020016000206040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201805461188d9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546118b99061260e565b80156119065780601f106118db57610100808354040283529160200191611906565b820191906000526020600020905b8154815290600101906020018083116118e957829003601f168201915b5050505050815260200160048201805461191f9061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461194b9061260e565b80156119985780601f1061196d57610100808354040283529160200191611998565b820191906000526020600020905b81548152906001019060200180831161197b57829003601f168201915b505050505081526020016005820180546119b19061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd9061260e565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b5050509183525050600691909101546001600160a01b03166020909101528251839083908110611a5c57611a5c6127fb565b60200260200101819052506003600060016000896001600160a01b03166001600160a01b031681526020019081526020016000206001018381548110611aa457611aa46127fb565b906000526020600020015481526020019081526020016000206008018054611acb9061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054611af79061260e565b8015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b5050505050838281518110611b5b57611b5b6127fb565b60200260200101819052508080611b7190612766565b9150506117db565b5094909350915050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3360008181526004602052604090205460ff1680611c0157506000546001600160a01b038281169116145b611c1d5760405162461bcd60e51b8152600401610376906125c0565b60005b8251811015611ce157600160046000858481518110611c4157611c416127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110611c9257611c926127fb565b60200260200101516001600160a01b03167f4df3f3208bfbe9457b85364190a65e66a3e7a7cded1cf16b59627bc99bad5db960405160405180910390a280611cd981612766565b915050611c20565b505050565b803560ff81168114611cf757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d3b57611d3b611cfc565b604052919050565b600082601f830112611d5457600080fd5b813567ffffffffffffffff811115611d6e57611d6e611cfc565b611d81601f8201601f1916602001611d12565b818152846020838601011115611d9657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611dd057600080fd5b8835975060208901359650611de760408a01611ce6565b9550606089013567ffffffffffffffff80821115611e0457600080fd5b611e108c838d01611d43565b965060808b0135915080821115611e2657600080fd5b611e328c838d01611d43565b955060a08b0135915080821115611e4857600080fd5b611e548c838d01611d43565b945060c08b0135915080821115611e6a57600080fd5b50611e778b828c01611d43565b92505060e089013590509295985092959890939650565b80356001600160a01b0381168114611cf757600080fd5b600080600060608486031215611eba57600080fd5b83359250611eca60208501611e8e565b9150604084013590509250925092565b600060208284031215611eec57600080fd5b5035919050565b6000815180845260005b81811015611f1957602081850181015186830182015201611efd565b506000602082860101526020601f19601f83011685010191505092915050565b60ff8e1681528c60208201528b60408201528a60608201528960808201526101a060a08201526000611f6f6101a083018b611ef3565b82810360c0840152611f81818b611ef3565b905082810360e0840152611f95818a611ef3565b9050828103610100840152611faa8189611ef3565b915050611fc36101208301876001600160a01b03169052565b931515610140820152911515610160830152610180909101529a9950505050505050505050565b60008060408385031215611ffd57600080fd5b61200683611e8e565b946020939093013593505050565b87815286602082015285604082015260e06060820152600061203960e0830187611ef3565b828103608084015261204b8187611ef3565b905082810360a084015261205f8186611ef3565b91505060018060a01b03831660c083015298975050505050505050565b60006020828403121561208e57600080fd5b61209782611e8e565b9392505050565b600080604083850312156120b157600080fd5b82359150602083013567ffffffffffffffff8111156120cf57600080fd5b6120db85828601611d43565b9150509250929050565b6000606082018583526020606081850152818651808452608086019150828801935060005b818110156121265784518352938301939183019160010161210a565b50508481036040860152855180825290820192508186019060005b8181101561215d57825185529383019391830191600101612141565b509298975050505050505050565b6000806040838503121561217e57600080fd5b823591506020830135801515811461219557600080fd5b809150509250929050565b6000602082840312156121b257600080fd5b813567ffffffffffffffff8111156121c957600080fd5b6121d584828501611d43565b949350505050565b600081518084526020808501945080840160005b838110156122165781516001600160a01b0316875295820195908201906001016121f1565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561236f57888303603f190185528151805160ff1684526101c081890151858a01528782015188860152606080830151908601526080808301519086015260a0808301518187018390526122a183880182611ef3565b9250505060c080830151868303828801526122bc8382611ef3565b9250505060e080830151868303828801526122d78382611ef3565b9250505061010080830151868303828801526122f38382611ef3565b9250505061012080830151612312828801826001600160a01b03169052565b5050610140808301518683038288015261232c83826121dd565b92505050610160808301516123448288018215159052565b5050610180828101511515908601526101a09182015191909401529386019390860190600101612248565b509098975050505050505050565b6000806000806080858703121561239357600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff8111156123bf57600080fd5b6123cb87828801611d43565b91505092959194509250565b600060208083850312156123ea57600080fd5b823567ffffffffffffffff8082111561240257600080fd5b818501915085601f83011261241657600080fd5b81358181111561242857612428611cfc565b8060051b9150612439848301611d12565b818152918301840191848101908884111561245357600080fd5b938501935b838510156124785761246985611e8e565b82529385019390850190612458565b98975050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156124cc5782840389526124ba848351611ef3565b988501989350908401906001016124a2565b5091979650505050505050565b60006040808301818452808651808352606092508286019150828160051b8701016020808a0160005b848110156125a057605f198a8503018652815160e0815186528482015185870152898201518a87015288820151818a88015261254082880182611ef3565b9150506080808301518783038289015261255a8382611ef3565b9250505060a080830151878303828901526125758382611ef3565b60c0948501516001600160a01b03169890940197909752505095830195935090820190600101612502565b5050878203908801526125b38189612484565b9998505050505050505050565b6020808252602e908201527f4f6e6c792073656c6563746564206d656e746f7220616464726573736573206360408201526d30b71031b932b0ba329038bab4bd60911b606082015260800190565b600181811c9082168061262257607f821691505b6020821081036112b357634e487b7160e01b600052602260045260246000fd5b601f821115611ce157600081815260208120601f850160051c810160208610156126695750805b601f850160051c820191505b8181101561268857828155600101612675565b505050505050565b815167ffffffffffffffff8111156126aa576126aa611cfc565b6126be816126b8845461260e565b84612642565b602080601f8311600181146126f357600084156126db5750858301515b600019600386901b1c1916600185901b178555612688565b600085815260208120601f198616915b8281101561272257888601518255948401946001909101908401612703565b50858210156127405787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60006001820161277857612778612750565b5060010190565b81810381811115610bd457610bd4612750565b6040815260006127a56040830185611ef3565b90508260208301529392505050565b60208082526027908201527f53747564656e7420616c726561647920617474657374656420666f72207468696040820152661cc8195d995b9d60ca1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810361281c575050565b612826825461260e565b67ffffffffffffffff81111561283e5761283e611cfc565b61284c816126b8845461260e565b6000601f82116001811461288057600083156128685750848201545b600019600385901b1c1916600184901b1784556128e5565b600085815260209020601f19841690600086815260209020845b838110156128ba578286015482556001958601959091019060200161289a565b50858310156128d85781850154600019600388901b60f8161c191681555b50505060018360011b0184555b505050505056fea2646970667358221220c209833647768315ffa1afbe0d29c78a8c9252448be41f9baa9c1d6f749a692c64736f6c63430008140033", + "numDeployments": 15, + "solcInputHash": "301ce0e94e99800111e7736a3262e994", + "metadata": "{\"compiler\":{\"version\":\"0.8.20+commit.a1b79de6\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"studentAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"attestation\",\"type\":\"bytes32\"}],\"name\":\"AttestationAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"closingTimestamp\",\"type\":\"uint256\"}],\"name\":\"EventCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"name\":\"MentorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"name\":\"MentorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"OverrideEventFlagToggled\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_attestation\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_studentAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_eventId\",\"type\":\"uint256\"}],\"name\":\"addAttestation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_newMentors\",\"type\":\"address[]\"}],\"name\":\"addMentors\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"attestationProfile\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"studentLevel\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_closingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_level\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"_eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_mentorName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_badgeUri\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"_schemaUID\",\"type\":\"bytes32\"}],\"name\":\"createEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eventIdCounter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"events\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"typeOf\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"attendeeCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"badgeUri\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overrideClosingTimestamp\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllEvents\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"typeOf\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"closingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"attendeeCount\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"badgeUri\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attendees\",\"type\":\"address[]\"},{\"internalType\":\"bool\",\"name\":\"isActive\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"overrideClosingTimestamp\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct Structs.Event[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_studentAddress\",\"type\":\"address\"}],\"name\":\"getAllStudentEventsWithAttestations\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"attestation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"internalType\":\"struct Structs.metaEvent[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"string[]\",\"name\":\"\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_level\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_msgHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"getAttested\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageHash\",\"type\":\"bytes32\"}],\"name\":\"getEthSignedMessageHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_studentAddress\",\"type\":\"address\"}],\"name\":\"getEventsCompleted\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"_studentLevel\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isMentor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_messageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"isVerified\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_ethSignedMessageHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"_signature\",\"type\":\"bytes\"}],\"name\":\"recoverSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_mentors\",\"type\":\"address[]\"}],\"name\":\"removeMentors\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sig\",\"type\":\"bytes\"}],\"name\":\"splitSignature\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"studentEventMap\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"attestation\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"eventId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"eventName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"eventDescription\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"mentorName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"mentorAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_eventId\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_res\",\"type\":\"bool\"}],\"name\":\"toggleOverrideEventFlag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/EASOnboarding.sol\":\"EASOnboarding\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"contracts/EASOnboarding.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport \\\"./lib/Structs.sol\\\";\\nimport \\\"./storage/EASOnboardingStorage.sol\\\";\\n\\ncontract EASOnboarding is EASOnboardingStorage {\\n\\tconstructor() {\\n\\t\\tdeployer = msg.sender;\\n\\t}\\n\\n\\tmodifier isMentorAddress(address _mentorAddress) {\\n\\t\\trequire(\\n\\t\\t\\tisMentor[_mentorAddress] || _mentorAddress == deployer,\\n\\t\\t\\t\\\"Only selected mentor addresses can create quiz\\\"\\n\\t\\t);\\n\\t\\t_;\\n\\t}\\n\\n\\tevent EventCreated(\\n\\t\\tuint256 indexed eventId,\\n\\t\\tstring eventName,\\n\\t\\taddress indexed mentorAddress,\\n\\t\\tuint256 closingTimestamp\\n\\t);\\n\\n\\tevent AttestationAdded(\\n\\t\\taddress indexed studentAddress,\\n\\t\\tuint256 indexed eventId,\\n\\t\\tbytes32 attestation\\n\\t);\\n\\tevent MentorAdded(address indexed mentorAddress);\\n\\tevent OverrideEventFlagToggled(uint256 indexed eventId, bool status);\\n\\tevent MentorRemoved(address indexed mentorAddress);\\n\\n\\tfunction getAttested(\\n\\t\\tuint256 _eventId,\\n\\t\\tuint256 _level,\\n\\t\\tbytes32 _msgHash,\\n\\t\\tbytes memory _signature\\n\\t) public returns (bool) {\\n\\t\\t// This should take care of failed attempt to getAttested\\n\\t\\trequire(\\n\\t\\t\\tstudentEventMap[msg.sender][_eventId].attestation == bytes32(0),\\n\\t\\t\\t\\\"Student already attested for this event\\\"\\n\\t\\t);\\n\\t\\trequire(isVerified(_msgHash, _signature), \\\"Invalid Txn Source\\\");\\n\\t\\trequire(\\n\\t\\t\\tevents[_eventId].isActive ||\\n\\t\\t\\t\\t!events[_eventId].overrideClosingTimestamp,\\n\\t\\t\\t\\\"Event is no longer active\\\"\\n\\t\\t);\\n\\t\\trequire(\\n\\t\\t\\t(events[_eventId].closingTimestamp > block.timestamp) ||\\n\\t\\t\\t\\t!events[_eventId].overrideClosingTimestamp,\\n\\t\\t\\t\\\"Event is past closing timestamp\\\"\\n\\t\\t);\\n\\t\\tattestationProfile[msg.sender].studentLevel = _level;\\n\\t\\tstudentEventMap[msg.sender][_eventId].eventId = _eventId;\\n\\t\\tstudentEventMap[msg.sender][_eventId].eventName = events[_eventId]\\n\\t\\t\\t.eventName;\\n\\t\\tstudentEventMap[msg.sender][_eventId].eventDescription = events[\\n\\t\\t\\t_eventId\\n\\t\\t].eventDescription;\\n\\t\\tstudentEventMap[msg.sender][_eventId].mentorName = events[_eventId]\\n\\t\\t\\t.mentorName;\\n\\t\\tstudentEventMap[msg.sender][_eventId].mentorAddress = events[_eventId]\\n\\t\\t\\t.mentorAddress;\\n\\t\\tstudentEventMap[msg.sender][_eventId].level = _level;\\n\\t\\treturn true;\\n\\t}\\n\\n\\tfunction addAttestation(\\n\\t\\tbytes32 _attestation,\\n\\t\\taddress _studentAddress,\\n\\t\\tuint256 _eventId\\n\\t) public {\\n\\t\\trequire(msg.sender == deployer);\\n\\t\\trequire(\\n\\t\\t\\tstudentEventMap[_studentAddress][_eventId].attestation ==\\n\\t\\t\\t\\tbytes32(0),\\n\\t\\t\\t\\\"Student already attested for this event\\\"\\n\\t\\t);\\n\\t\\tevents[_eventId].attendees.push(_studentAddress);\\n\\t\\tevents[_eventId].attendeeCount++;\\n\\t\\tattestationProfile[_studentAddress].eventsCompleted.push(_eventId);\\n\\t\\tattestationProfile[_studentAddress].attestations.push(_attestation);\\n\\t\\tstudentEventMap[_studentAddress][_eventId].attestation = _attestation;\\n\\n\\t\\temit AttestationAdded(_studentAddress, _eventId, _attestation);\\n\\t}\\n\\n\\tfunction toggleOverrideEventFlag(\\n\\t\\tuint256 _eventId,\\n\\t\\tbool _res\\n\\t) public isMentorAddress(msg.sender) {\\n\\t\\tevents[_eventId].overrideClosingTimestamp = _res;\\n\\t\\temit OverrideEventFlagToggled(_eventId, _res);\\n\\t}\\n\\n\\tfunction createEvent(\\n\\t\\tuint256 _closingTimestamp,\\n\\t\\tuint256 _level,\\n\\t\\tuint8 _type,\\n\\t\\tstring memory _eventName,\\n\\t\\tstring memory _eventDescription,\\n\\t\\tstring memory _mentorName,\\n\\t\\tstring memory _badgeUri,\\n\\t\\tbytes32 _schemaUID\\n\\t) public isMentorAddress(msg.sender) {\\n\\t\\trequire(\\n\\t\\t\\t_closingTimestamp > block.timestamp,\\n\\t\\t\\t\\\"Closing timestamp cannot be in the past.\\\"\\n\\t\\t);\\n\\n\\t\\tevents[eventIdCounter].typeOf = _type;\\n\\t\\tevents[eventIdCounter].eventId = eventIdCounter;\\n\\t\\tevents[eventIdCounter].level = _level;\\n\\t\\tevents[eventIdCounter].closingTimestamp = _closingTimestamp;\\n\\t\\tevents[eventIdCounter].attendeeCount = 1;\\n\\t\\tevents[eventIdCounter].eventName = _eventName;\\n\\t\\tevents[eventIdCounter].eventDescription = _eventDescription;\\n\\t\\tevents[eventIdCounter].mentorName = _mentorName;\\n\\t\\tevents[eventIdCounter].badgeUri = _badgeUri;\\n\\t\\tevents[eventIdCounter].mentorAddress = msg.sender;\\n\\t\\tevents[eventIdCounter].attendees.push(msg.sender);\\n\\t\\tevents[eventIdCounter].isActive = true;\\n\\t\\tevents[eventIdCounter].overrideClosingTimestamp = false;\\n\\t\\tevents[eventIdCounter].schemaUID = _schemaUID;\\n\\t\\teventIdCounter++;\\n\\n\\t\\temit EventCreated(\\n\\t\\t\\teventIdCounter - 1,\\n\\t\\t\\t_eventName,\\n\\t\\t\\tmsg.sender,\\n\\t\\t\\t_closingTimestamp\\n\\t\\t);\\n\\t}\\n\\n\\tfunction isVerified(\\n\\t\\tbytes32 _messageHash,\\n\\t\\tbytes memory _signature\\n\\t) public view returns (bool) {\\n\\t\\t// The ethSignedMessageHash is the hash that the signer actually signed\\n\\t\\tbytes32 ethSignedMessageHash = getEthSignedMessageHash(_messageHash);\\n\\n\\t\\t// Recover the signer's address from the signature\\n\\t\\taddress signer = recoverSigner(ethSignedMessageHash, _signature);\\n\\n\\t\\trequire(signer == deployer, \\\"Unauthorized Contract call\\\");\\n\\n\\t\\treturn true;\\n\\t}\\n\\n\\tfunction addMentors(\\n\\t\\taddress[] memory _newMentors\\n\\t) public isMentorAddress(msg.sender) {\\n\\t\\tfor (uint256 i = 0; i < _newMentors.length; i++) {\\n\\t\\t\\tisMentor[_newMentors[i]] = true;\\n\\t\\t\\temit MentorAdded(_newMentors[i]);\\n\\t\\t}\\n\\t}\\n\\n\\tfunction removeMentors(address[] memory _mentors) public {\\n\\t\\trequire(msg.sender == deployer, \\\"Only deployer can remove mentors\\\");\\n\\n\\t\\tfor (uint256 i = 0; i < _mentors.length; i++) {\\n\\t\\t\\tif (isMentor[_mentors[i]]) {\\n\\t\\t\\t\\tisMentor[_mentors[i]] = false;\\n\\t\\t\\t\\temit MentorRemoved(_mentors[i]);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tfunction getEthSignedMessageHash(\\n\\t\\tbytes32 _messageHash\\n\\t) public pure returns (bytes32) {\\n\\t\\treturn\\n\\t\\t\\tkeccak256(\\n\\t\\t\\t\\tabi.encodePacked(\\n\\t\\t\\t\\t\\t\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\",\\n\\t\\t\\t\\t\\t_messageHash\\n\\t\\t\\t\\t)\\n\\t\\t\\t);\\n\\t}\\n\\n\\tfunction recoverSigner(\\n\\t\\tbytes32 _ethSignedMessageHash,\\n\\t\\tbytes memory _signature\\n\\t) public pure returns (address) {\\n\\t\\t(uint8 v, bytes32 r, bytes32 s) = splitSignature(_signature);\\n\\t\\treturn ecrecover(_ethSignedMessageHash, v, r, s);\\n\\t}\\n\\n\\tfunction splitSignature(\\n\\t\\tbytes memory sig\\n\\t) public pure returns (uint8, bytes32, bytes32) {\\n\\t\\trequire(sig.length == 65, \\\"invalid signature length\\\");\\n\\t\\tbytes32 r;\\n\\t\\tbytes32 s;\\n\\t\\tuint8 v;\\n\\n\\t\\tassembly {\\n\\t\\t\\t// first 32 bytes, after the length prefix\\n\\t\\t\\tr := mload(add(sig, 32))\\n\\t\\t\\t// second 32 bytes\\n\\t\\t\\ts := mload(add(sig, 64))\\n\\t\\t\\t// final byte (first byte of the next 32 bytes)\\n\\t\\t\\tv := byte(0, mload(add(sig, 96)))\\n\\t\\t}\\n\\t\\treturn (v, r, s);\\n\\t}\\n}\\n\",\"keccak256\":\"0x007a667283ef7075625766341cdf4f0e68f0a01d26a912771148cb988e487656\",\"license\":\"MIT\"},\"contracts/lib/Structs.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nlibrary Structs {\\n struct Event {\\n uint8 typeOf;\\n uint256 eventId;\\n uint256 level;\\n uint256 closingTimestamp;\\n uint256 attendeeCount;\\n string eventName;\\n string eventDescription;\\n string mentorName;\\n string badgeUri;\\n address mentorAddress;\\n address[] attendees;\\n bool isActive;\\n bool overrideClosingTimestamp;\\n bytes32 schemaUID;\\n }\\n\\n struct AttestationProfile {\\n uint256 studentLevel;\\n uint256[] eventsCompleted;\\n bytes32[] attestations;\\n }\\n\\n struct metaEvent {\\n bytes32 attestation;\\n uint256 eventId;\\n uint256 level;\\n string eventName;\\n string eventDescription;\\n string mentorName;\\n address mentorAddress;\\n }\\n}\\n\",\"keccak256\":\"0x22b719d7df7169230535f24cae6f0066f51b8813ed4de6d0596427649318c00a\",\"license\":\"MIT\"},\"contracts/storage/EASOnboardingStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.20;\\n\\nimport \\\"../lib/Structs.sol\\\";\\nimport \\\"hardhat/console.sol\\\";\\n\\ncontract EASOnboardingStorage {\\n address deployer;\\n\\n mapping(address => Structs.AttestationProfile) public attestationProfile;\\n mapping(address => mapping(uint256 => Structs.metaEvent)) public studentEventMap;\\n mapping(uint256 => Structs.Event) public events;\\n mapping(address => bool) public isMentor;\\n uint256 public eventIdCounter = 1;\\n\\n function getAllEvents() public view returns (Structs.Event[] memory) {\\n Structs.Event[] memory eventsArray = new Structs.Event[](eventIdCounter - 1);\\n for (uint256 i = 1; i < eventIdCounter; i++) {\\n eventsArray[i - 1] = events[i];\\n }\\n return eventsArray;\\n }\\n // Function to get eventsCompleted\\n\\n function getAllStudentEventsWithAttestations(address _studentAddress)\\n public\\n view\\n returns (Structs.metaEvent[] memory, string[] memory)\\n {\\n string[] memory uris = new string[](attestationProfile[_studentAddress].eventsCompleted.length);\\n Structs.metaEvent[] memory metaArray =\\n new Structs.metaEvent[](attestationProfile[_studentAddress].eventsCompleted.length);\\n for (uint256 i = 0; i < attestationProfile[_studentAddress].eventsCompleted.length; i++) {\\n metaArray[i] = studentEventMap[_studentAddress][attestationProfile[_studentAddress].eventsCompleted[i]];\\n uris[i] = events[attestationProfile[_studentAddress].eventsCompleted[i]].badgeUri; \\n }\\n return (metaArray, uris);\\n }\\n\\n function getEventsCompleted(address _studentAddress)\\n public\\n view\\n returns (uint256 _studentLevel, uint256[] memory, bytes32[] memory)\\n {\\n return (\\n attestationProfile[_studentAddress].studentLevel,\\n attestationProfile[_studentAddress].eventsCompleted,\\n attestationProfile[_studentAddress].attestations\\n );\\n }\\n}\\n\",\"keccak256\":\"0xddad0f859974ddf5f89af3cef77c115cf41fe32e515d9d04fa99c2b3bb9730c9\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052600160055534801561001557600080fd5b50600080546001600160a01b03191633179055612922806100376000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063a264efce116100a2578063e01a0ebe11610071578063e01a0ebe146102cc578063e7ce9ba3146102d5578063ed0568af146102e8578063fa54080114610309578063fed6bf281461031c57600080fd5b8063a264efce1461025f578063a7bb580314610272578063c27a500d146102a4578063c3816c13146102b957600080fd5b80635e98a145116100e95780635e98a1451461019e5780636dff9131146101d15780637fcacc0e146101ff57806391ea63641461021257806397aba7f91461023457600080fd5b8063030666c51461011b57806306648651146101305780630b791430146101435780635c78442c14610178575b600080fd5b61012e610129366004611db3565b61032f565b005b61012e61013e366004611ea5565b610592565b610156610151366004611eda565b6106d1565b60405161016f9d9c9b9a99989796959493929190611f39565b60405180910390f35b61018b610186366004611fea565b61096d565b60405161016f9796959493929190612014565b6101c16101ac36600461207c565b60046020526000908152604090205460ff1681565b604051901515815260200161016f565b6101f16101df36600461207c565b60016020526000908152604090205481565b60405190815260200161016f565b6101c161020d36600461209e565b610b53565b61022561022036600461207c565b610bda565b60405161016f939291906120e5565b61024761024236600461209e565b610cb0565b6040516001600160a01b03909116815260200161016f565b61012e61026d36600461216b565b610d2f565b6102856102803660046121a0565b610ddd565b6040805160ff909416845260208401929092529082015260600161016f565b6102ac610e4f565b60405161016f9190612221565b6101c16102c736600461237d565b6112b9565b6101f160055481565b61012e6102e33660046123d7565b61154e565b6102fb6102f636600461207c565b6116b3565b60405161016f9291906124d9565b6101f1610317366004611eda565b611b83565b61012e61032a3660046123d7565b611bd6565b3360008181526004602052604090205460ff168061035a57506000546001600160a01b038281169116145b61037f5760405162461bcd60e51b8152600401610376906125c0565b60405180910390fd5b4289116103df5760405162461bcd60e51b815260206004820152602860248201527f436c6f73696e672074696d657374616d702063616e6e6f7420626520696e20746044820152673432903830b9ba1760c11b6064820152608401610376565b600580546000908152600360208190526040808320805460ff191660ff8d1617905583548084528184206001818101929092556002018d9055845484528184209092018d90558354835280832060040191909155825482529020016104448782612690565b5060055460009081526003602052604090206006016104638682612690565b5060055460009081526003602052604090206007016104828582612690565b5060055460009081526003602052604090206008016104a18482612690565b506005805460009081526003602090815260408083206009018054336001600160a01b0319918216811790925585548552828520600a018054600181810183559187529486209094018054909116909117905583548352808320600b908101805460ff191690931790925583548352808320909101805461ff0019169055825482528120600c018490558154919061053883612766565b9091555050600554339061054e9060019061277f565b7fad389ee79ceb9d0e3a1739d75d42c8727ca5946b701beaa8ef2801b04d7d7a57888c60405161057f929190612792565b60405180910390a3505050505050505050565b6000546001600160a01b031633146105a957600080fd5b6001600160a01b0382166000908152600260209081526040808320848452909152902054156105ea5760405162461bcd60e51b8152600401610376906127b4565b60008181526003602090815260408220600a8101805460018101825590845291832090910180546001600160a01b0319166001600160a01b03861617905582825260040180549161063a83612766565b90915550506001600160a01b038216600081815260016020818152604080842080840180548086018255908652838620018790556002908101805494850181558552828520909301889055848452918152818320858452815291819020869055518581528392917ffd78fe1c1010dd57ea4476d0eb6d5bd32e62d719166bf0974f538b76dbf9fdb2910160405180910390a3505050565b600360208190526000918252604090912080546001820154600283015493830154600484015460058501805460ff9095169693959394929391926107149061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107409061260e565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050908060060180546107a29061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce9061260e565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050908060070180546108309061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461085c9061260e565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050908060080180546108be9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea9061260e565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050506009840154600b850154600c9095015493946001600160a01b039091169360ff808316945061010090920490911691508d565b60026020818152600093845260408085209091529183529120805460018201549282015460038301805492949391926109a59061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d19061260e565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505090806004018054610a339061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f9061260e565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b505050505090806005018054610ac19061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aed9061260e565b8015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b505050600690930154919250506001600160a01b031687565b600080610b5f84611b83565b90506000610b6d8285610cb0565b6000549091506001600160a01b03808316911614610bcd5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420436f6e74726163742063616c6c0000000000006044820152606401610376565b6001925050505b92915050565b6001600160a01b03811660009081526001602081815260408084208054938101805483518186028101860190945280845260609586959094929360020192918491830182828015610c4a57602002820191906000526020600020905b815481526020019060010190808311610c36575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c9c57602002820191906000526020600020905b815481526020019060010190808311610c88575b505050505090509250925092509193909250565b600080600080610cbf85610ddd565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa158015610d1a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360008181526004602052604090205460ff1680610d5a57506000546001600160a01b038281169116145b610d765760405162461bcd60e51b8152600401610376906125c0565b60008381526003602052604090819020600b0180548415156101000261ff00199091161790555183907f255b22f81f52ca696c92545ed4e776709442e0c2f0d5b053f1bb5e73729826a990610dd090851515815260200190565b60405180910390a2505050565b60008060008351604114610e335760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610376565b5050506020810151604082015160609092015160001a92909190565b606060006001600554610e62919061277f565b67ffffffffffffffff811115610e7a57610e7a611cfc565b604051908082528060200260200182016040528015610f3057816020015b610f1d604051806101c00160405280600060ff168152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081526020016060815260200160006001600160a01b0316815260200160608152602001600015158152602001600015158152602001600080191681525090565b815260200190600190039081610e985790505b50905060015b6005548110156112b35760008181526003602081815260409283902083516101c081018552815460ff1681526001820154928101929092526002810154938201939093529082015460608201526004820154608082015260058201805491929160a084019190610fa59061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd19061260e565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b505050505081526020016006820180546110379061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110639061260e565b80156110b05780601f10611085576101008083540402835291602001916110b0565b820191906000526020600020905b81548152906001019060200180831161109357829003601f168201915b505050505081526020016007820180546110c99061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110f59061260e565b80156111425780601f1061111757610100808354040283529160200191611142565b820191906000526020600020905b81548152906001019060200180831161112557829003601f168201915b5050505050815260200160088201805461115b9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546111879061260e565b80156111d45780601f106111a9576101008083540402835291602001916111d4565b820191906000526020600020905b8154815290600101906020018083116111b757829003601f168201915b505050918352505060098201546001600160a01b0316602080830191909152600a83018054604080518285028101850182528281529401939283018282801561124657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611228575b5050509183525050600b82015460ff808216151560208401526101009091041615156040820152600c909101546060909101528261128560018461277f565b81518110611295576112956127fb565b602002602001018190525080806112ab90612766565b915050610f36565b50919050565b336000908152600260209081526040808320878452909152812054156112f15760405162461bcd60e51b8152600401610376906127b4565b6112fb8383610b53565b61133c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642054786e20536f7572636560701b6044820152606401610376565b6000858152600360205260409020600b015460ff168061137357506000858152600360205260409020600b0154610100900460ff16155b6113bf5760405162461bcd60e51b815260206004820152601960248201527f4576656e74206973206e6f206c6f6e67657220616374697665000000000000006044820152606401610376565b600085815260036020819052604090912001544210806113f657506000858152600360205260409020600b0154610100900460ff16155b6114425760405162461bcd60e51b815260206004820152601f60248201527f4576656e74206973207061737420636c6f73696e672074696d657374616d70006044820152606401610376565b336000908152600160208181526040808420889055600282528084208985528083528185209384018a90556003808452919094209390915201906114899060050182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600401906114bf9060060182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600501906114f59060070182612811565b5050506000838152600360209081526040808320600901543384526002808452828520978552969092529091206006810180546001600160a01b0319166001600160a01b03909316929092179091559092015550600190565b6000546001600160a01b031633146115a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206465706c6f7965722063616e2072656d6f7665206d656e746f72736044820152606401610376565b60005b81518110156116af57600460008383815181106115ca576115ca6127fb565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561169d5760006004600084848151811061160e5761160e6127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081818151811061165f5761165f6127fb565b60200260200101516001600160a01b03167f8a89d1bce5d2a5b9324b1e700a7bb2d8ed55b236f9ba2c17a6917a0597fc404160405160405180910390a25b806116a781612766565b9150506115ab565b5050565b6001600160a01b038116600090815260016020819052604082200154606091829167ffffffffffffffff8111156116ec576116ec611cfc565b60405190808252806020026020018201604052801561171f57816020015b606081526020019060019003908161170a5790505b506001600160a01b0385166000908152600160208190526040822001549192509067ffffffffffffffff81111561175857611758611cfc565b6040519080825280602002602001820160405280156117d557816020015b6117c26040518060e0016040528060008019168152602001600081526020016000815260200160608152602001606081526020016060815260200160006001600160a01b031681525090565b8152602001906001900390816117765790505b50905060005b6001600160a01b03861660009081526001602081905260409091200154811015611b79576001600160a01b038616600090815260026020908152604080832060019283905290832090910180549192918490811061183b5761183b6127fb565b906000526020600020015481526020019081526020016000206040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201805461188d9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546118b99061260e565b80156119065780601f106118db57610100808354040283529160200191611906565b820191906000526020600020905b8154815290600101906020018083116118e957829003601f168201915b5050505050815260200160048201805461191f9061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461194b9061260e565b80156119985780601f1061196d57610100808354040283529160200191611998565b820191906000526020600020905b81548152906001019060200180831161197b57829003601f168201915b505050505081526020016005820180546119b19061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd9061260e565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b5050509183525050600691909101546001600160a01b03166020909101528251839083908110611a5c57611a5c6127fb565b60200260200101819052506003600060016000896001600160a01b03166001600160a01b031681526020019081526020016000206001018381548110611aa457611aa46127fb565b906000526020600020015481526020019081526020016000206008018054611acb9061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054611af79061260e565b8015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b5050505050838281518110611b5b57611b5b6127fb565b60200260200101819052508080611b7190612766565b9150506117db565b5094909350915050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3360008181526004602052604090205460ff1680611c0157506000546001600160a01b038281169116145b611c1d5760405162461bcd60e51b8152600401610376906125c0565b60005b8251811015611ce157600160046000858481518110611c4157611c416127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110611c9257611c926127fb565b60200260200101516001600160a01b03167f4df3f3208bfbe9457b85364190a65e66a3e7a7cded1cf16b59627bc99bad5db960405160405180910390a280611cd981612766565b915050611c20565b505050565b803560ff81168114611cf757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d3b57611d3b611cfc565b604052919050565b600082601f830112611d5457600080fd5b813567ffffffffffffffff811115611d6e57611d6e611cfc565b611d81601f8201601f1916602001611d12565b818152846020838601011115611d9657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611dd057600080fd5b8835975060208901359650611de760408a01611ce6565b9550606089013567ffffffffffffffff80821115611e0457600080fd5b611e108c838d01611d43565b965060808b0135915080821115611e2657600080fd5b611e328c838d01611d43565b955060a08b0135915080821115611e4857600080fd5b611e548c838d01611d43565b945060c08b0135915080821115611e6a57600080fd5b50611e778b828c01611d43565b92505060e089013590509295985092959890939650565b80356001600160a01b0381168114611cf757600080fd5b600080600060608486031215611eba57600080fd5b83359250611eca60208501611e8e565b9150604084013590509250925092565b600060208284031215611eec57600080fd5b5035919050565b6000815180845260005b81811015611f1957602081850181015186830182015201611efd565b506000602082860101526020601f19601f83011685010191505092915050565b60ff8e1681528c60208201528b60408201528a60608201528960808201526101a060a08201526000611f6f6101a083018b611ef3565b82810360c0840152611f81818b611ef3565b905082810360e0840152611f95818a611ef3565b9050828103610100840152611faa8189611ef3565b915050611fc36101208301876001600160a01b03169052565b931515610140820152911515610160830152610180909101529a9950505050505050505050565b60008060408385031215611ffd57600080fd5b61200683611e8e565b946020939093013593505050565b87815286602082015285604082015260e06060820152600061203960e0830187611ef3565b828103608084015261204b8187611ef3565b905082810360a084015261205f8186611ef3565b91505060018060a01b03831660c083015298975050505050505050565b60006020828403121561208e57600080fd5b61209782611e8e565b9392505050565b600080604083850312156120b157600080fd5b82359150602083013567ffffffffffffffff8111156120cf57600080fd5b6120db85828601611d43565b9150509250929050565b6000606082018583526020606081850152818651808452608086019150828801935060005b818110156121265784518352938301939183019160010161210a565b50508481036040860152855180825290820192508186019060005b8181101561215d57825185529383019391830191600101612141565b509298975050505050505050565b6000806040838503121561217e57600080fd5b823591506020830135801515811461219557600080fd5b809150509250929050565b6000602082840312156121b257600080fd5b813567ffffffffffffffff8111156121c957600080fd5b6121d584828501611d43565b949350505050565b600081518084526020808501945080840160005b838110156122165781516001600160a01b0316875295820195908201906001016121f1565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561236f57888303603f190185528151805160ff1684526101c081890151858a01528782015188860152606080830151908601526080808301519086015260a0808301518187018390526122a183880182611ef3565b9250505060c080830151868303828801526122bc8382611ef3565b9250505060e080830151868303828801526122d78382611ef3565b9250505061010080830151868303828801526122f38382611ef3565b9250505061012080830151612312828801826001600160a01b03169052565b5050610140808301518683038288015261232c83826121dd565b92505050610160808301516123448288018215159052565b5050610180828101511515908601526101a09182015191909401529386019390860190600101612248565b509098975050505050505050565b6000806000806080858703121561239357600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff8111156123bf57600080fd5b6123cb87828801611d43565b91505092959194509250565b600060208083850312156123ea57600080fd5b823567ffffffffffffffff8082111561240257600080fd5b818501915085601f83011261241657600080fd5b81358181111561242857612428611cfc565b8060051b9150612439848301611d12565b818152918301840191848101908884111561245357600080fd5b938501935b838510156124785761246985611e8e565b82529385019390850190612458565b98975050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156124cc5782840389526124ba848351611ef3565b988501989350908401906001016124a2565b5091979650505050505050565b60006040808301818452808651808352606092508286019150828160051b8701016020808a0160005b848110156125a057605f198a8503018652815160e0815186528482015185870152898201518a87015288820151818a88015261254082880182611ef3565b9150506080808301518783038289015261255a8382611ef3565b9250505060a080830151878303828901526125758382611ef3565b60c0948501516001600160a01b03169890940197909752505095830195935090820190600101612502565b5050878203908801526125b38189612484565b9998505050505050505050565b6020808252602e908201527f4f6e6c792073656c6563746564206d656e746f7220616464726573736573206360408201526d30b71031b932b0ba329038bab4bd60911b606082015260800190565b600181811c9082168061262257607f821691505b6020821081036112b357634e487b7160e01b600052602260045260246000fd5b601f821115611ce157600081815260208120601f850160051c810160208610156126695750805b601f850160051c820191505b8181101561268857828155600101612675565b505050505050565b815167ffffffffffffffff8111156126aa576126aa611cfc565b6126be816126b8845461260e565b84612642565b602080601f8311600181146126f357600084156126db5750858301515b600019600386901b1c1916600185901b178555612688565b600085815260208120601f198616915b8281101561272257888601518255948401946001909101908401612703565b50858210156127405787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60006001820161277857612778612750565b5060010190565b81810381811115610bd457610bd4612750565b6040815260006127a56040830185611ef3565b90508260208301529392505050565b60208082526027908201527f53747564656e7420616c726561647920617474657374656420666f72207468696040820152661cc8195d995b9d60ca1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810361281c575050565b612826825461260e565b67ffffffffffffffff81111561283e5761283e611cfc565b61284c816126b8845461260e565b6000601f82116001811461288057600083156128685750848201545b600019600385901b1c1916600184901b1784556128e5565b600085815260209020601f19841690600086815260209020845b838110156128ba578286015482556001958601959091019060200161289a565b50858310156128d85781850154600019600388901b60f8161c191681555b50505060018360011b0184555b505050505056fea2646970667358221220d0c9be07129c5d40bd1cbaf56bc80194f6134cdff819ec02eedbf7f1ece8f5d064736f6c63430008140033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063a264efce116100a2578063e01a0ebe11610071578063e01a0ebe146102cc578063e7ce9ba3146102d5578063ed0568af146102e8578063fa54080114610309578063fed6bf281461031c57600080fd5b8063a264efce1461025f578063a7bb580314610272578063c27a500d146102a4578063c3816c13146102b957600080fd5b80635e98a145116100e95780635e98a1451461019e5780636dff9131146101d15780637fcacc0e146101ff57806391ea63641461021257806397aba7f91461023457600080fd5b8063030666c51461011b57806306648651146101305780630b791430146101435780635c78442c14610178575b600080fd5b61012e610129366004611db3565b61032f565b005b61012e61013e366004611ea5565b610592565b610156610151366004611eda565b6106d1565b60405161016f9d9c9b9a99989796959493929190611f39565b60405180910390f35b61018b610186366004611fea565b61096d565b60405161016f9796959493929190612014565b6101c16101ac36600461207c565b60046020526000908152604090205460ff1681565b604051901515815260200161016f565b6101f16101df36600461207c565b60016020526000908152604090205481565b60405190815260200161016f565b6101c161020d36600461209e565b610b53565b61022561022036600461207c565b610bda565b60405161016f939291906120e5565b61024761024236600461209e565b610cb0565b6040516001600160a01b03909116815260200161016f565b61012e61026d36600461216b565b610d2f565b6102856102803660046121a0565b610ddd565b6040805160ff909416845260208401929092529082015260600161016f565b6102ac610e4f565b60405161016f9190612221565b6101c16102c736600461237d565b6112b9565b6101f160055481565b61012e6102e33660046123d7565b61154e565b6102fb6102f636600461207c565b6116b3565b60405161016f9291906124d9565b6101f1610317366004611eda565b611b83565b61012e61032a3660046123d7565b611bd6565b3360008181526004602052604090205460ff168061035a57506000546001600160a01b038281169116145b61037f5760405162461bcd60e51b8152600401610376906125c0565b60405180910390fd5b4289116103df5760405162461bcd60e51b815260206004820152602860248201527f436c6f73696e672074696d657374616d702063616e6e6f7420626520696e20746044820152673432903830b9ba1760c11b6064820152608401610376565b600580546000908152600360208190526040808320805460ff191660ff8d1617905583548084528184206001818101929092556002018d9055845484528184209092018d90558354835280832060040191909155825482529020016104448782612690565b5060055460009081526003602052604090206006016104638682612690565b5060055460009081526003602052604090206007016104828582612690565b5060055460009081526003602052604090206008016104a18482612690565b506005805460009081526003602090815260408083206009018054336001600160a01b0319918216811790925585548552828520600a018054600181810183559187529486209094018054909116909117905583548352808320600b908101805460ff191690931790925583548352808320909101805461ff0019169055825482528120600c018490558154919061053883612766565b9091555050600554339061054e9060019061277f565b7fad389ee79ceb9d0e3a1739d75d42c8727ca5946b701beaa8ef2801b04d7d7a57888c60405161057f929190612792565b60405180910390a3505050505050505050565b6000546001600160a01b031633146105a957600080fd5b6001600160a01b0382166000908152600260209081526040808320848452909152902054156105ea5760405162461bcd60e51b8152600401610376906127b4565b60008181526003602090815260408220600a8101805460018101825590845291832090910180546001600160a01b0319166001600160a01b03861617905582825260040180549161063a83612766565b90915550506001600160a01b038216600081815260016020818152604080842080840180548086018255908652838620018790556002908101805494850181558552828520909301889055848452918152818320858452815291819020869055518581528392917ffd78fe1c1010dd57ea4476d0eb6d5bd32e62d719166bf0974f538b76dbf9fdb2910160405180910390a3505050565b600360208190526000918252604090912080546001820154600283015493830154600484015460058501805460ff9095169693959394929391926107149061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107409061260e565b801561078d5780601f106107625761010080835404028352916020019161078d565b820191906000526020600020905b81548152906001019060200180831161077057829003601f168201915b5050505050908060060180546107a29061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce9061260e565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050908060070180546108309061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461085c9061260e565b80156108a95780601f1061087e576101008083540402835291602001916108a9565b820191906000526020600020905b81548152906001019060200180831161088c57829003601f168201915b5050505050908060080180546108be9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546108ea9061260e565b80156109375780601f1061090c57610100808354040283529160200191610937565b820191906000526020600020905b81548152906001019060200180831161091a57829003601f168201915b5050506009840154600b850154600c9095015493946001600160a01b039091169360ff808316945061010090920490911691508d565b60026020818152600093845260408085209091529183529120805460018201549282015460038301805492949391926109a59061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546109d19061260e565b8015610a1e5780601f106109f357610100808354040283529160200191610a1e565b820191906000526020600020905b815481529060010190602001808311610a0157829003601f168201915b505050505090806004018054610a339061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f9061260e565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b505050505090806005018054610ac19061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610aed9061260e565b8015610b3a5780601f10610b0f57610100808354040283529160200191610b3a565b820191906000526020600020905b815481529060010190602001808311610b1d57829003601f168201915b505050600690930154919250506001600160a01b031687565b600080610b5f84611b83565b90506000610b6d8285610cb0565b6000549091506001600160a01b03808316911614610bcd5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420436f6e74726163742063616c6c0000000000006044820152606401610376565b6001925050505b92915050565b6001600160a01b03811660009081526001602081815260408084208054938101805483518186028101860190945280845260609586959094929360020192918491830182828015610c4a57602002820191906000526020600020905b815481526020019060010190808311610c36575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c9c57602002820191906000526020600020905b815481526020019060010190808311610c88575b505050505090509250925092509193909250565b600080600080610cbf85610ddd565b6040805160008152602081018083528b905260ff8516918101919091526060810183905260808101829052929550909350915060019060a0016020604051602081039080840390855afa158015610d1a573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b3360008181526004602052604090205460ff1680610d5a57506000546001600160a01b038281169116145b610d765760405162461bcd60e51b8152600401610376906125c0565b60008381526003602052604090819020600b0180548415156101000261ff00199091161790555183907f255b22f81f52ca696c92545ed4e776709442e0c2f0d5b053f1bb5e73729826a990610dd090851515815260200190565b60405180910390a2505050565b60008060008351604114610e335760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e67746800000000000000006044820152606401610376565b5050506020810151604082015160609092015160001a92909190565b606060006001600554610e62919061277f565b67ffffffffffffffff811115610e7a57610e7a611cfc565b604051908082528060200260200182016040528015610f3057816020015b610f1d604051806101c00160405280600060ff168152602001600081526020016000815260200160008152602001600081526020016060815260200160608152602001606081526020016060815260200160006001600160a01b0316815260200160608152602001600015158152602001600015158152602001600080191681525090565b815260200190600190039081610e985790505b50905060015b6005548110156112b35760008181526003602081815260409283902083516101c081018552815460ff1681526001820154928101929092526002810154938201939093529082015460608201526004820154608082015260058201805491929160a084019190610fa59061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd19061260e565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b505050505081526020016006820180546110379061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110639061260e565b80156110b05780601f10611085576101008083540402835291602001916110b0565b820191906000526020600020905b81548152906001019060200180831161109357829003601f168201915b505050505081526020016007820180546110c99061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546110f59061260e565b80156111425780601f1061111757610100808354040283529160200191611142565b820191906000526020600020905b81548152906001019060200180831161112557829003601f168201915b5050505050815260200160088201805461115b9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546111879061260e565b80156111d45780601f106111a9576101008083540402835291602001916111d4565b820191906000526020600020905b8154815290600101906020018083116111b757829003601f168201915b505050918352505060098201546001600160a01b0316602080830191909152600a83018054604080518285028101850182528281529401939283018282801561124657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611228575b5050509183525050600b82015460ff808216151560208401526101009091041615156040820152600c909101546060909101528261128560018461277f565b81518110611295576112956127fb565b602002602001018190525080806112ab90612766565b915050610f36565b50919050565b336000908152600260209081526040808320878452909152812054156112f15760405162461bcd60e51b8152600401610376906127b4565b6112fb8383610b53565b61133c5760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642054786e20536f7572636560701b6044820152606401610376565b6000858152600360205260409020600b015460ff168061137357506000858152600360205260409020600b0154610100900460ff16155b6113bf5760405162461bcd60e51b815260206004820152601960248201527f4576656e74206973206e6f206c6f6e67657220616374697665000000000000006044820152606401610376565b600085815260036020819052604090912001544210806113f657506000858152600360205260409020600b0154610100900460ff16155b6114425760405162461bcd60e51b815260206004820152601f60248201527f4576656e74206973207061737420636c6f73696e672074696d657374616d70006044820152606401610376565b336000908152600160208181526040808420889055600282528084208985528083528185209384018a90556003808452919094209390915201906114899060050182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600401906114bf9060060182612811565b50600085815260036020908152604080832033845260028352818420898552909252909120600501906114f59060070182612811565b5050506000838152600360209081526040808320600901543384526002808452828520978552969092529091206006810180546001600160a01b0319166001600160a01b03909316929092179091559092015550600190565b6000546001600160a01b031633146115a85760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79206465706c6f7965722063616e2072656d6f7665206d656e746f72736044820152606401610376565b60005b81518110156116af57600460008383815181106115ca576115ca6127fb565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff161561169d5760006004600084848151811061160e5761160e6127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555081818151811061165f5761165f6127fb565b60200260200101516001600160a01b03167f8a89d1bce5d2a5b9324b1e700a7bb2d8ed55b236f9ba2c17a6917a0597fc404160405160405180910390a25b806116a781612766565b9150506115ab565b5050565b6001600160a01b038116600090815260016020819052604082200154606091829167ffffffffffffffff8111156116ec576116ec611cfc565b60405190808252806020026020018201604052801561171f57816020015b606081526020019060019003908161170a5790505b506001600160a01b0385166000908152600160208190526040822001549192509067ffffffffffffffff81111561175857611758611cfc565b6040519080825280602002602001820160405280156117d557816020015b6117c26040518060e0016040528060008019168152602001600081526020016000815260200160608152602001606081526020016060815260200160006001600160a01b031681525090565b8152602001906001900390816117765790505b50905060005b6001600160a01b03861660009081526001602081905260409091200154811015611b79576001600160a01b038616600090815260026020908152604080832060019283905290832090910180549192918490811061183b5761183b6127fb565b906000526020600020015481526020019081526020016000206040518060e001604052908160008201548152602001600182015481526020016002820154815260200160038201805461188d9061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546118b99061260e565b80156119065780601f106118db57610100808354040283529160200191611906565b820191906000526020600020905b8154815290600101906020018083116118e957829003601f168201915b5050505050815260200160048201805461191f9061260e565b80601f016020809104026020016040519081016040528092919081815260200182805461194b9061260e565b80156119985780601f1061196d57610100808354040283529160200191611998565b820191906000526020600020905b81548152906001019060200180831161197b57829003601f168201915b505050505081526020016005820180546119b19061260e565b80601f01602080910402602001604051908101604052809291908181526020018280546119dd9061260e565b8015611a2a5780601f106119ff57610100808354040283529160200191611a2a565b820191906000526020600020905b815481529060010190602001808311611a0d57829003601f168201915b5050509183525050600691909101546001600160a01b03166020909101528251839083908110611a5c57611a5c6127fb565b60200260200101819052506003600060016000896001600160a01b03166001600160a01b031681526020019081526020016000206001018381548110611aa457611aa46127fb565b906000526020600020015481526020019081526020016000206008018054611acb9061260e565b80601f0160208091040260200160405190810160405280929190818152602001828054611af79061260e565b8015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b5050505050838281518110611b5b57611b5b6127fb565b60200260200101819052508080611b7190612766565b9150506117db565b5094909350915050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b3360008181526004602052604090205460ff1680611c0157506000546001600160a01b038281169116145b611c1d5760405162461bcd60e51b8152600401610376906125c0565b60005b8251811015611ce157600160046000858481518110611c4157611c416127fb565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110611c9257611c926127fb565b60200260200101516001600160a01b03167f4df3f3208bfbe9457b85364190a65e66a3e7a7cded1cf16b59627bc99bad5db960405160405180910390a280611cd981612766565b915050611c20565b505050565b803560ff81168114611cf757600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611d3b57611d3b611cfc565b604052919050565b600082601f830112611d5457600080fd5b813567ffffffffffffffff811115611d6e57611d6e611cfc565b611d81601f8201601f1916602001611d12565b818152846020838601011115611d9657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b031215611dd057600080fd5b8835975060208901359650611de760408a01611ce6565b9550606089013567ffffffffffffffff80821115611e0457600080fd5b611e108c838d01611d43565b965060808b0135915080821115611e2657600080fd5b611e328c838d01611d43565b955060a08b0135915080821115611e4857600080fd5b611e548c838d01611d43565b945060c08b0135915080821115611e6a57600080fd5b50611e778b828c01611d43565b92505060e089013590509295985092959890939650565b80356001600160a01b0381168114611cf757600080fd5b600080600060608486031215611eba57600080fd5b83359250611eca60208501611e8e565b9150604084013590509250925092565b600060208284031215611eec57600080fd5b5035919050565b6000815180845260005b81811015611f1957602081850181015186830182015201611efd565b506000602082860101526020601f19601f83011685010191505092915050565b60ff8e1681528c60208201528b60408201528a60608201528960808201526101a060a08201526000611f6f6101a083018b611ef3565b82810360c0840152611f81818b611ef3565b905082810360e0840152611f95818a611ef3565b9050828103610100840152611faa8189611ef3565b915050611fc36101208301876001600160a01b03169052565b931515610140820152911515610160830152610180909101529a9950505050505050505050565b60008060408385031215611ffd57600080fd5b61200683611e8e565b946020939093013593505050565b87815286602082015285604082015260e06060820152600061203960e0830187611ef3565b828103608084015261204b8187611ef3565b905082810360a084015261205f8186611ef3565b91505060018060a01b03831660c083015298975050505050505050565b60006020828403121561208e57600080fd5b61209782611e8e565b9392505050565b600080604083850312156120b157600080fd5b82359150602083013567ffffffffffffffff8111156120cf57600080fd5b6120db85828601611d43565b9150509250929050565b6000606082018583526020606081850152818651808452608086019150828801935060005b818110156121265784518352938301939183019160010161210a565b50508481036040860152855180825290820192508186019060005b8181101561215d57825185529383019391830191600101612141565b509298975050505050505050565b6000806040838503121561217e57600080fd5b823591506020830135801515811461219557600080fd5b809150509250929050565b6000602082840312156121b257600080fd5b813567ffffffffffffffff8111156121c957600080fd5b6121d584828501611d43565b949350505050565b600081518084526020808501945080840160005b838110156122165781516001600160a01b0316875295820195908201906001016121f1565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561236f57888303603f190185528151805160ff1684526101c081890151858a01528782015188860152606080830151908601526080808301519086015260a0808301518187018390526122a183880182611ef3565b9250505060c080830151868303828801526122bc8382611ef3565b9250505060e080830151868303828801526122d78382611ef3565b9250505061010080830151868303828801526122f38382611ef3565b9250505061012080830151612312828801826001600160a01b03169052565b5050610140808301518683038288015261232c83826121dd565b92505050610160808301516123448288018215159052565b5050610180828101511515908601526101a09182015191909401529386019390860190600101612248565b509098975050505050505050565b6000806000806080858703121561239357600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff8111156123bf57600080fd5b6123cb87828801611d43565b91505092959194509250565b600060208083850312156123ea57600080fd5b823567ffffffffffffffff8082111561240257600080fd5b818501915085601f83011261241657600080fd5b81358181111561242857612428611cfc565b8060051b9150612439848301611d12565b818152918301840191848101908884111561245357600080fd5b938501935b838510156124785761246985611e8e565b82529385019390850190612458565b98975050505050505050565b600081518084526020808501808196508360051b8101915082860160005b858110156124cc5782840389526124ba848351611ef3565b988501989350908401906001016124a2565b5091979650505050505050565b60006040808301818452808651808352606092508286019150828160051b8701016020808a0160005b848110156125a057605f198a8503018652815160e0815186528482015185870152898201518a87015288820151818a88015261254082880182611ef3565b9150506080808301518783038289015261255a8382611ef3565b9250505060a080830151878303828901526125758382611ef3565b60c0948501516001600160a01b03169890940197909752505095830195935090820190600101612502565b5050878203908801526125b38189612484565b9998505050505050505050565b6020808252602e908201527f4f6e6c792073656c6563746564206d656e746f7220616464726573736573206360408201526d30b71031b932b0ba329038bab4bd60911b606082015260800190565b600181811c9082168061262257607f821691505b6020821081036112b357634e487b7160e01b600052602260045260246000fd5b601f821115611ce157600081815260208120601f850160051c810160208610156126695750805b601f850160051c820191505b8181101561268857828155600101612675565b505050505050565b815167ffffffffffffffff8111156126aa576126aa611cfc565b6126be816126b8845461260e565b84612642565b602080601f8311600181146126f357600084156126db5750858301515b600019600386901b1c1916600185901b178555612688565b600085815260208120601f198616915b8281101561272257888601518255948401946001909101908401612703565b50858210156127405787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b60006001820161277857612778612750565b5060010190565b81810381811115610bd457610bd4612750565b6040815260006127a56040830185611ef3565b90508260208301529392505050565b60208082526027908201527f53747564656e7420616c726561647920617474657374656420666f72207468696040820152661cc8195d995b9d60ca1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810361281c575050565b612826825461260e565b67ffffffffffffffff81111561283e5761283e611cfc565b61284c816126b8845461260e565b6000601f82116001811461288057600083156128685750848201545b600019600385901b1c1916600184901b1784556128e5565b600085815260209020601f19841690600086815260209020845b838110156128ba578286015482556001958601959091019060200161289a565b50858310156128d85781850154600019600388901b60f8161c191681555b50505060018360011b0184555b505050505056fea2646970667358221220d0c9be07129c5d40bd1cbaf56bc80194f6134cdff819ec02eedbf7f1ece8f5d064736f6c63430008140033", "devdoc": { "kind": "dev", "methods": {}, diff --git a/packages/hardhat/deployments/baseSepolia/solcInputs/301ce0e94e99800111e7736a3262e994.json b/packages/hardhat/deployments/baseSepolia/solcInputs/301ce0e94e99800111e7736a3262e994.json new file mode 100644 index 000000000..51fccd3fc --- /dev/null +++ b/packages/hardhat/deployments/baseSepolia/solcInputs/301ce0e94e99800111e7736a3262e994.json @@ -0,0 +1,48 @@ +{ + "language": "Solidity", + "sources": { + "contracts/EASOnboarding.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport \"./lib/Structs.sol\";\nimport \"./storage/EASOnboardingStorage.sol\";\n\ncontract EASOnboarding is EASOnboardingStorage {\n\tconstructor() {\n\t\tdeployer = msg.sender;\n\t}\n\n\tmodifier isMentorAddress(address _mentorAddress) {\n\t\trequire(\n\t\t\tisMentor[_mentorAddress] || _mentorAddress == deployer,\n\t\t\t\"Only selected mentor addresses can create quiz\"\n\t\t);\n\t\t_;\n\t}\n\n\tevent EventCreated(\n\t\tuint256 indexed eventId,\n\t\tstring eventName,\n\t\taddress indexed mentorAddress,\n\t\tuint256 closingTimestamp\n\t);\n\n\tevent AttestationAdded(\n\t\taddress indexed studentAddress,\n\t\tuint256 indexed eventId,\n\t\tbytes32 attestation\n\t);\n\tevent MentorAdded(address indexed mentorAddress);\n\tevent OverrideEventFlagToggled(uint256 indexed eventId, bool status);\n\tevent MentorRemoved(address indexed mentorAddress);\n\n\tfunction getAttested(\n\t\tuint256 _eventId,\n\t\tuint256 _level,\n\t\tbytes32 _msgHash,\n\t\tbytes memory _signature\n\t) public returns (bool) {\n\t\t// This should take care of failed attempt to getAttested\n\t\trequire(\n\t\t\tstudentEventMap[msg.sender][_eventId].attestation == bytes32(0),\n\t\t\t\"Student already attested for this event\"\n\t\t);\n\t\trequire(isVerified(_msgHash, _signature), \"Invalid Txn Source\");\n\t\trequire(\n\t\t\tevents[_eventId].isActive ||\n\t\t\t\t!events[_eventId].overrideClosingTimestamp,\n\t\t\t\"Event is no longer active\"\n\t\t);\n\t\trequire(\n\t\t\t(events[_eventId].closingTimestamp > block.timestamp) ||\n\t\t\t\t!events[_eventId].overrideClosingTimestamp,\n\t\t\t\"Event is past closing timestamp\"\n\t\t);\n\t\tattestationProfile[msg.sender].studentLevel = _level;\n\t\tstudentEventMap[msg.sender][_eventId].eventId = _eventId;\n\t\tstudentEventMap[msg.sender][_eventId].eventName = events[_eventId]\n\t\t\t.eventName;\n\t\tstudentEventMap[msg.sender][_eventId].eventDescription = events[\n\t\t\t_eventId\n\t\t].eventDescription;\n\t\tstudentEventMap[msg.sender][_eventId].mentorName = events[_eventId]\n\t\t\t.mentorName;\n\t\tstudentEventMap[msg.sender][_eventId].mentorAddress = events[_eventId]\n\t\t\t.mentorAddress;\n\t\tstudentEventMap[msg.sender][_eventId].level = _level;\n\t\treturn true;\n\t}\n\n\tfunction addAttestation(\n\t\tbytes32 _attestation,\n\t\taddress _studentAddress,\n\t\tuint256 _eventId\n\t) public {\n\t\trequire(msg.sender == deployer);\n\t\trequire(\n\t\t\tstudentEventMap[_studentAddress][_eventId].attestation ==\n\t\t\t\tbytes32(0),\n\t\t\t\"Student already attested for this event\"\n\t\t);\n\t\tevents[_eventId].attendees.push(_studentAddress);\n\t\tevents[_eventId].attendeeCount++;\n\t\tattestationProfile[_studentAddress].eventsCompleted.push(_eventId);\n\t\tattestationProfile[_studentAddress].attestations.push(_attestation);\n\t\tstudentEventMap[_studentAddress][_eventId].attestation = _attestation;\n\n\t\temit AttestationAdded(_studentAddress, _eventId, _attestation);\n\t}\n\n\tfunction toggleOverrideEventFlag(\n\t\tuint256 _eventId,\n\t\tbool _res\n\t) public isMentorAddress(msg.sender) {\n\t\tevents[_eventId].overrideClosingTimestamp = _res;\n\t\temit OverrideEventFlagToggled(_eventId, _res);\n\t}\n\n\tfunction createEvent(\n\t\tuint256 _closingTimestamp,\n\t\tuint256 _level,\n\t\tuint8 _type,\n\t\tstring memory _eventName,\n\t\tstring memory _eventDescription,\n\t\tstring memory _mentorName,\n\t\tstring memory _badgeUri,\n\t\tbytes32 _schemaUID\n\t) public isMentorAddress(msg.sender) {\n\t\trequire(\n\t\t\t_closingTimestamp > block.timestamp,\n\t\t\t\"Closing timestamp cannot be in the past.\"\n\t\t);\n\n\t\tevents[eventIdCounter].typeOf = _type;\n\t\tevents[eventIdCounter].eventId = eventIdCounter;\n\t\tevents[eventIdCounter].level = _level;\n\t\tevents[eventIdCounter].closingTimestamp = _closingTimestamp;\n\t\tevents[eventIdCounter].attendeeCount = 1;\n\t\tevents[eventIdCounter].eventName = _eventName;\n\t\tevents[eventIdCounter].eventDescription = _eventDescription;\n\t\tevents[eventIdCounter].mentorName = _mentorName;\n\t\tevents[eventIdCounter].badgeUri = _badgeUri;\n\t\tevents[eventIdCounter].mentorAddress = msg.sender;\n\t\tevents[eventIdCounter].attendees.push(msg.sender);\n\t\tevents[eventIdCounter].isActive = true;\n\t\tevents[eventIdCounter].overrideClosingTimestamp = false;\n\t\tevents[eventIdCounter].schemaUID = _schemaUID;\n\t\teventIdCounter++;\n\n\t\temit EventCreated(\n\t\t\teventIdCounter - 1,\n\t\t\t_eventName,\n\t\t\tmsg.sender,\n\t\t\t_closingTimestamp\n\t\t);\n\t}\n\n\tfunction isVerified(\n\t\tbytes32 _messageHash,\n\t\tbytes memory _signature\n\t) public view returns (bool) {\n\t\t// The ethSignedMessageHash is the hash that the signer actually signed\n\t\tbytes32 ethSignedMessageHash = getEthSignedMessageHash(_messageHash);\n\n\t\t// Recover the signer's address from the signature\n\t\taddress signer = recoverSigner(ethSignedMessageHash, _signature);\n\n\t\trequire(signer == deployer, \"Unauthorized Contract call\");\n\n\t\treturn true;\n\t}\n\n\tfunction addMentors(\n\t\taddress[] memory _newMentors\n\t) public isMentorAddress(msg.sender) {\n\t\tfor (uint256 i = 0; i < _newMentors.length; i++) {\n\t\t\tisMentor[_newMentors[i]] = true;\n\t\t\temit MentorAdded(_newMentors[i]);\n\t\t}\n\t}\n\n\tfunction removeMentors(address[] memory _mentors) public {\n\t\trequire(msg.sender == deployer, \"Only deployer can remove mentors\");\n\n\t\tfor (uint256 i = 0; i < _mentors.length; i++) {\n\t\t\tif (isMentor[_mentors[i]]) {\n\t\t\t\tisMentor[_mentors[i]] = false;\n\t\t\t\temit MentorRemoved(_mentors[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getEthSignedMessageHash(\n\t\tbytes32 _messageHash\n\t) public pure returns (bytes32) {\n\t\treturn\n\t\t\tkeccak256(\n\t\t\t\tabi.encodePacked(\n\t\t\t\t\t\"\\x19Ethereum Signed Message:\\n32\",\n\t\t\t\t\t_messageHash\n\t\t\t\t)\n\t\t\t);\n\t}\n\n\tfunction recoverSigner(\n\t\tbytes32 _ethSignedMessageHash,\n\t\tbytes memory _signature\n\t) public pure returns (address) {\n\t\t(uint8 v, bytes32 r, bytes32 s) = splitSignature(_signature);\n\t\treturn ecrecover(_ethSignedMessageHash, v, r, s);\n\t}\n\n\tfunction splitSignature(\n\t\tbytes memory sig\n\t) public pure returns (uint8, bytes32, bytes32) {\n\t\trequire(sig.length == 65, \"invalid signature length\");\n\t\tbytes32 r;\n\t\tbytes32 s;\n\t\tuint8 v;\n\n\t\tassembly {\n\t\t\t// first 32 bytes, after the length prefix\n\t\t\tr := mload(add(sig, 32))\n\t\t\t// second 32 bytes\n\t\t\ts := mload(add(sig, 64))\n\t\t\t// final byte (first byte of the next 32 bytes)\n\t\t\tv := byte(0, mload(add(sig, 96)))\n\t\t}\n\t\treturn (v, r, s);\n\t}\n}\n" + }, + "contracts/lib/Structs.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nlibrary Structs {\n struct Event {\n uint8 typeOf;\n uint256 eventId;\n uint256 level;\n uint256 closingTimestamp;\n uint256 attendeeCount;\n string eventName;\n string eventDescription;\n string mentorName;\n string badgeUri;\n address mentorAddress;\n address[] attendees;\n bool isActive;\n bool overrideClosingTimestamp;\n bytes32 schemaUID;\n }\n\n struct AttestationProfile {\n uint256 studentLevel;\n uint256[] eventsCompleted;\n bytes32[] attestations;\n }\n\n struct metaEvent {\n bytes32 attestation;\n uint256 eventId;\n uint256 level;\n string eventName;\n string eventDescription;\n string mentorName;\n address mentorAddress;\n }\n}\n" + }, + "contracts/storage/EASOnboardingStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.20;\n\nimport \"../lib/Structs.sol\";\nimport \"hardhat/console.sol\";\n\ncontract EASOnboardingStorage {\n address deployer;\n\n mapping(address => Structs.AttestationProfile) public attestationProfile;\n mapping(address => mapping(uint256 => Structs.metaEvent)) public studentEventMap;\n mapping(uint256 => Structs.Event) public events;\n mapping(address => bool) public isMentor;\n uint256 public eventIdCounter = 1;\n\n function getAllEvents() public view returns (Structs.Event[] memory) {\n Structs.Event[] memory eventsArray = new Structs.Event[](eventIdCounter - 1);\n for (uint256 i = 1; i < eventIdCounter; i++) {\n eventsArray[i - 1] = events[i];\n }\n return eventsArray;\n }\n // Function to get eventsCompleted\n\n function getAllStudentEventsWithAttestations(address _studentAddress)\n public\n view\n returns (Structs.metaEvent[] memory, string[] memory)\n {\n string[] memory uris = new string[](attestationProfile[_studentAddress].eventsCompleted.length);\n Structs.metaEvent[] memory metaArray =\n new Structs.metaEvent[](attestationProfile[_studentAddress].eventsCompleted.length);\n for (uint256 i = 0; i < attestationProfile[_studentAddress].eventsCompleted.length; i++) {\n metaArray[i] = studentEventMap[_studentAddress][attestationProfile[_studentAddress].eventsCompleted[i]];\n uris[i] = events[attestationProfile[_studentAddress].eventsCompleted[i]].badgeUri; \n }\n return (metaArray, uris);\n }\n\n function getEventsCompleted(address _studentAddress)\n public\n view\n returns (uint256 _studentLevel, uint256[] memory, bytes32[] memory)\n {\n return (\n attestationProfile[_studentAddress].studentLevel,\n attestationProfile[_studentAddress].eventsCompleted,\n attestationProfile[_studentAddress].attestations\n );\n }\n}\n" + }, + "contracts/YourContract.sol": { + "content": "//SPDX-License-Identifier: MIT\npragma solidity >=0.8.0 <0.9.0;\n\n// Useful for debugging. Remove when deploying to a live network.\nimport \"hardhat/console.sol\";\n\n// Use openzeppelin to inherit battle-tested implementations (ERC20, ERC721, etc)\n// import \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * A smart contract that allows changing a state variable of the contract and tracking the changes\n * It also allows the owner to withdraw the Ether in the contract\n * @author BuidlGuidl\n */\ncontract YourContract {\n\t// State Variables\n\taddress public immutable owner;\n\tstring public greeting = \"Building Unstoppable Apps!!!\";\n\tbool public premium = false;\n\tuint256 public totalCounter = 0;\n\tmapping(address => uint) public userGreetingCounter;\n\n\t// Events: a way to emit log statements from smart contract that can be listened to by external parties\n\tevent GreetingChange(\n\t\taddress indexed greetingSetter,\n\t\tstring newGreeting,\n\t\tbool premium,\n\t\tuint256 value\n\t);\n\n\t// Constructor: Called once on contract deployment\n\t// Check packages/hardhat/deploy/00_deploy_your_contract.ts\n\tconstructor(address _owner) {\n\t\towner = _owner;\n\t}\n\n\t// Modifier: used to define a set of rules that must be met before or after a function is executed\n\t// Check the withdraw() function\n\tmodifier isOwner() {\n\t\t// msg.sender: predefined variable that represents address of the account that called the current function\n\t\trequire(msg.sender == owner, \"Not the Owner\");\n\t\t_;\n\t}\n\n\t/**\n\t * Function that allows anyone to change the state variable \"greeting\" of the contract and increase the counters\n\t *\n\t * @param _newGreeting (string memory) - new greeting to save on the contract\n\t */\n\tfunction setGreeting(string memory _newGreeting) public payable {\n\t\t// Print data to the hardhat chain console. Remove when deploying to a live network.\n\t\tconsole.log(\n\t\t\t\"Setting new greeting '%s' from %s\",\n\t\t\t_newGreeting,\n\t\t\tmsg.sender\n\t\t);\n\n\t\t// Change state variables\n\t\tgreeting = _newGreeting;\n\t\ttotalCounter += 1;\n\t\tuserGreetingCounter[msg.sender] += 1;\n\n\t\t// msg.value: built-in global variable that represents the amount of ether sent with the transaction\n\t\tif (msg.value > 0) {\n\t\t\tpremium = true;\n\t\t} else {\n\t\t\tpremium = false;\n\t\t}\n\n\t\t// emit: keyword used to trigger an event\n\t\temit GreetingChange(msg.sender, _newGreeting, msg.value > 0, msg.value);\n\t}\n\n\t/**\n\t * Function that allows the owner to withdraw all the Ether in the contract\n\t * The function can only be called by the owner of the contract as defined by the isOwner modifier\n\t */\n\tfunction withdraw() public isOwner {\n\t\t(bool success, ) = owner.call{ value: address(this).balance }(\"\");\n\t\trequire(success, \"Failed to send Ether\");\n\t}\n\n\t/**\n\t * Function that allows the contract to receive ETH\n\t */\n\treceive() external payable {}\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/packages/hardhat/hardhat.config.ts b/packages/hardhat/hardhat.config.ts index c43049a73..bb9eaa055 100644 --- a/packages/hardhat/hardhat.config.ts +++ b/packages/hardhat/hardhat.config.ts @@ -133,7 +133,7 @@ const config: HardhatUserConfig = { chainId: 84532, urls: { apiURL: "https://api-sepolia.basescan.org/api", - browserURL: "https://sepolia.basescan.io", + browserURL: "https://sepolia.basescan.org", }, }, ], diff --git a/packages/nextjs/app/create-event/page.tsx b/packages/nextjs/app/create-event/page.tsx index a1f84e622..b2cdacfba 100644 --- a/packages/nextjs/app/create-event/page.tsx +++ b/packages/nextjs/app/create-event/page.tsx @@ -48,7 +48,7 @@ const CreateQuizForm: React.FC = () => { } | null>(null); const { writeAsync } = useScaffoldContractWrite({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "createEvent", args: [1n, 1n, 1, "", "", "", "", "0x"], onBlockConfirmation: async txnReceipt => { @@ -66,7 +66,7 @@ const CreateQuizForm: React.FC = () => { isFetching: getAllEventsIsFetching, isRefetching: getAllEventsIsRefetching, } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getAllEvents", }); diff --git a/packages/nextjs/app/create-quiz/page.tsx b/packages/nextjs/app/create-quiz/page.tsx index baf724886..ba6e489bb 100644 --- a/packages/nextjs/app/create-quiz/page.tsx +++ b/packages/nextjs/app/create-quiz/page.tsx @@ -224,7 +224,7 @@ const CreateQuizForm: React.FC = () => { }; const { data: eventData } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getAllEvents", }); diff --git a/packages/nextjs/app/event/[eventId]/page.tsx b/packages/nextjs/app/event/[eventId]/page.tsx index 9215ca48e..5ac3c4014 100644 --- a/packages/nextjs/app/event/[eventId]/page.tsx +++ b/packages/nextjs/app/event/[eventId]/page.tsx @@ -27,29 +27,28 @@ export default function EventDetailPage() { const { address: connectedAddress } = useAccount(); const { data: eventDetails } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "events", args: [parseUnits(params?.eventId as string, 0)], enabled: params?.eventId !== undefined, }); const { data: eventCreatedEvent } = useScaffoldEventHistory({ - contractName: "SEEDtest", + contractName: "EASOnboarding", eventName: "EventCreated", - fromBlock: 119579120n, + fromBlock: 15339640n, filters: { eventId: parseUnits(params?.eventId as string, 0) }, blockData: true, }); const { data: attestationAddedEvent } = useScaffoldEventHistory({ - contractName: "SEEDtest", + contractName: "EASOnboarding", eventName: "AttestationAdded", - fromBlock: 119579120n, + fromBlock: 15339640n, filters: { eventId: parseUnits(params?.eventId as string, 0) }, blockData: true, }); - const { data: userData } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getEventsCompleted", args: [connectedAddress], }); diff --git a/packages/nextjs/app/event/[eventId]/register/page.tsx b/packages/nextjs/app/event/[eventId]/register/page.tsx index 9f2ab2071..8ca1853fc 100644 --- a/packages/nextjs/app/event/[eventId]/register/page.tsx +++ b/packages/nextjs/app/event/[eventId]/register/page.tsx @@ -41,7 +41,7 @@ const RegisterToEventPage: React.FC = () => { }, [params?.eventId]); const { data: eventDetails } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "events", args: [parseUnits(params?.eventId as string, 0)], enabled: params?.eventId !== undefined, diff --git a/packages/nextjs/app/page.tsx b/packages/nextjs/app/page.tsx index 54c5ab718..56caea9ee 100644 --- a/packages/nextjs/app/page.tsx +++ b/packages/nextjs/app/page.tsx @@ -38,12 +38,12 @@ const Home = () => { const router = useRouter(); const { data: events } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getAllEvents", }); const { data: userData } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getEventsCompleted", args: [connectedAddress], }); diff --git a/packages/nextjs/app/profile/page.tsx b/packages/nextjs/app/profile/page.tsx index f7924363c..10326c101 100644 --- a/packages/nextjs/app/profile/page.tsx +++ b/packages/nextjs/app/profile/page.tsx @@ -12,13 +12,13 @@ const Profile = () => { const { address: connectedAddress } = useAccount(); const { data: eventDetails } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getAllStudentEventsWithAttestations", args: [connectedAddress], }); // const { data: attestationData } = useScaffoldContractRead({ - // contractName: "SEEDtest", + // contractName: "EASOnboarding", // functionName: "getEventsCompleted", // args: [connectedAddress], // }); diff --git a/packages/nextjs/app/quiz/page.tsx b/packages/nextjs/app/quiz/page.tsx index fe3e471dd..45db5bbb3 100644 --- a/packages/nextjs/app/quiz/page.tsx +++ b/packages/nextjs/app/quiz/page.tsx @@ -149,7 +149,7 @@ const Quiz = () => { }, [eventId]); const { data: userData } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getEventsCompleted", args: [connectedAddress], }); @@ -166,7 +166,7 @@ const Quiz = () => { } const { data: eventDetails } = useScaffoldContractRead({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "events", args: [BigInt(eventId)], }); @@ -193,7 +193,7 @@ const Quiz = () => { // } const { writeAsync } = useScaffoldContractWrite({ - contractName: "SEEDtest", + contractName: "EASOnboarding", functionName: "getAttested", args: [1n, 1n, "0x", "0x"], onBlockConfirmation: async txnReceipt => { diff --git a/packages/nextjs/components/EventCard.tsx b/packages/nextjs/components/EventCard.tsx index fe0f8d6c9..5bac39270 100644 --- a/packages/nextjs/components/EventCard.tsx +++ b/packages/nextjs/components/EventCard.tsx @@ -17,6 +17,19 @@ export const EventCard = ({ }) => { const account = useAccount(); + // console.log(eventDetails.eventId, { userData, eventDetails }); + // console.log(eventDetails?.eventId, userData?.[0] == eventDetails?.eventId); + // console.log( + // eventDetails?.eventId.toString() === "1" + // ? { + // id: eventDetails?.eventId.toString(), + // a: userData?.[0] == eventDetails?.eventId, + // b: userData?.[1].includes(eventDetails?.eventId), + // userData, + // eventDetails, + // } + // : null, + // ); return (
Date.now() ? ( ) : null} - {eventDetails.startTimestamp && !(Number(eventDetails.startTimestamp) < Date.now()) ? ( + {eventDetails.startTimestamp && + !(Number(eventDetails.startTimestamp) < Date.now()) && + !userData?.[1].includes(eventDetails?.eventId) ? ( ) : null} + {/* TODO: chequear con habacuc la condicion correcta para mostrar registrar a evento y reclamar badge */} {!account?.address && ( diff --git a/packages/nextjs/components/Header.tsx b/packages/nextjs/components/Header.tsx index 983f5f25e..5f20f1ecb 100644 --- a/packages/nextjs/components/Header.tsx +++ b/packages/nextjs/components/Header.tsx @@ -41,6 +41,7 @@ export const HeaderMenuLinks = () => { "0x04cc6b487566B1C821bEa04d7ac0d23CEDe05cC9", "0xeCB4C1245665e8A1F43826355aaB0Dd6bF336e05", "0xe2A45CA9Ec5780FC389FBD8991980397b8B470AF", + "0xD4BAD65991F6362DB367e9F40e8f9CE115b83a9E", ].includes(connectedAddress) ) { additionalLinks.push( diff --git a/packages/nextjs/components/withAuth.tsx b/packages/nextjs/components/withAuth.tsx index 7200f3317..a21908dde 100644 --- a/packages/nextjs/components/withAuth.tsx +++ b/packages/nextjs/components/withAuth.tsx @@ -20,6 +20,7 @@ export const withAuth = (WrappedComponent: React.FC) => { "0x04cc6b487566B1C821bEa04d7ac0d23CEDe05cC9", "0xeCB4C1245665e8A1F43826355aaB0Dd6bF336e05", "0xe2A45CA9Ec5780FC389FBD8991980397b8B470AF", + "0xD4BAD65991F6362DB367e9F40e8f9CE115b83a9E", ].includes(connectedAddress) && (pathname == "/create-quiz" || pathname == "/create-event") ) { diff --git a/packages/nextjs/contracts/deployedContracts.ts b/packages/nextjs/contracts/deployedContracts.ts index aafbc599d..d8e6f8940 100644 --- a/packages/nextjs/contracts/deployedContracts.ts +++ b/packages/nextjs/contracts/deployedContracts.ts @@ -6,8 +6,8 @@ import { GenericContractsDeclaration } from "~~/utils/scaffold-eth/contract"; const deployedContracts = { 84532: { - SEEDtest: { - address: "0x5022fA30B3158051fBa6EdA14d98e31a44B3A561", + EASOnboarding: { + address: "0x304892F028a4EB10261f47B535Ca1E13C86Fdf74", abi: [ { inputs: [], @@ -720,7 +720,16 @@ const deployedContracts = { type: "function", }, ], - inheritedFunctions: {}, + inheritedFunctions: { + attestationProfile: "contracts/storage/EASOnboardingStorage.sol", + eventIdCounter: "contracts/storage/EASOnboardingStorage.sol", + events: "contracts/storage/EASOnboardingStorage.sol", + getAllEvents: "contracts/storage/EASOnboardingStorage.sol", + getAllStudentEventsWithAttestations: "contracts/storage/EASOnboardingStorage.sol", + getEventsCompleted: "contracts/storage/EASOnboardingStorage.sol", + isMentor: "contracts/storage/EASOnboardingStorage.sol", + studentEventMap: "contracts/storage/EASOnboardingStorage.sol", + }, }, }, } as const; diff --git a/packages/nextjs/utils/scaffold-eth/abi.ts b/packages/nextjs/utils/scaffold-eth/abi.ts index 169f810d7..f373034f7 100644 --- a/packages/nextjs/utils/scaffold-eth/abi.ts +++ b/packages/nextjs/utils/scaffold-eth/abi.ts @@ -1725,7 +1725,7 @@ if (process.env.VERCEL_ENV == "production") { }; } else { deployedContractTemplate = { - address: "0xaF66288e6c7865F3E66B72DCB5bB0aB92f1306bA", // this is baseSepolia + address: "0x304892F028a4EB10261f47B535Ca1E13C86Fdf74", // this is baseSepolia abi: [ { inputs: [], @@ -2165,6 +2165,11 @@ if (process.env.VERCEL_ENV == "production") { name: "", type: "tuple[]", }, + { + internalType: "string[]", + name: "", + type: "string[]", + }, ], stateMutability: "view", type: "function", @@ -2251,6 +2256,25 @@ if (process.env.VERCEL_ENV == "production") { stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "isMentor", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ { From b9eb6b015a5d55c43b2e471ca4f1b397970965bb Mon Sep 17 00:00:00 2001 From: Marcos Iglesias Date: Tue, 24 Sep 2024 18:32:18 -0300 Subject: [PATCH 2/2] feat: main repo updates: decoded data on att, schema fields, dynamic network, event type 4 w/multiple questions --- packages/hardhat/hardhat.config.ts | 2 +- packages/nextjs/app/create-event/page.tsx | 2 +- packages/nextjs/app/quiz/page.tsx | 20 +++++++++-------- packages/nextjs/components/EventCard.tsx | 22 ++----------------- packages/nextjs/pages/api/middleware.ts | 7 +++--- packages/nextjs/pages/api/userQuiz.ts | 14 +++--------- packages/nextjs/scaffold.config.ts | 5 +++-- packages/nextjs/schema/index.json | 15 ++++++++----- packages/nextjs/utils/scaffold-eth/abi.ts | 26 ++++++++++++++++++++++- 9 files changed, 59 insertions(+), 54 deletions(-) diff --git a/packages/hardhat/hardhat.config.ts b/packages/hardhat/hardhat.config.ts index bb9eaa055..c43049a73 100644 --- a/packages/hardhat/hardhat.config.ts +++ b/packages/hardhat/hardhat.config.ts @@ -133,7 +133,7 @@ const config: HardhatUserConfig = { chainId: 84532, urls: { apiURL: "https://api-sepolia.basescan.org/api", - browserURL: "https://sepolia.basescan.org", + browserURL: "https://sepolia.basescan.io", }, }, ], diff --git a/packages/nextjs/app/create-event/page.tsx b/packages/nextjs/app/create-event/page.tsx index b2cdacfba..0eb366547 100644 --- a/packages/nextjs/app/create-event/page.tsx +++ b/packages/nextjs/app/create-event/page.tsx @@ -31,7 +31,7 @@ const CreateQuizForm: React.FC = () => { startTimeStamp: 0, timeStamp: 0, mentorName: "", - type: "0", + type: "1", schemaId: "0x", eventurl: "", }); diff --git a/packages/nextjs/app/quiz/page.tsx b/packages/nextjs/app/quiz/page.tsx index 45db5bbb3..1e00447fe 100644 --- a/packages/nextjs/app/quiz/page.tsx +++ b/packages/nextjs/app/quiz/page.tsx @@ -52,8 +52,8 @@ const Quiz = () => { const { address: connectedAddress } = useAccount(); const [loading, setLoading] = useState(false); const router = useRouter(); - const baseProvider = - process.env.VERCEL_ENV == "production" ? "https://optimism.drpc.org" : "https://sepolia.base.org"; + const baseProvider = "https://sepolia.base.org"; + // process.env.NEXT_PUBLIC_VERCEL_ENV == "production" ? "https://optimism.drpc.org" : "https://sepolia.base.org"; // TODO: DEV_NOTE: update this ternary when we stop using testnet for production const provider = new JsonRpcProvider(process.env.JSON_RPC_PROVIDER || baseProvider); const privateProvider = new JsonRpcProvider(process.env.PRIVATE_JSON_RPC_PROVIDER || baseProvider); const [data, setData] = useState({ @@ -72,6 +72,7 @@ const Quiz = () => { safeAddress: "", eventURL: "", quizType: "", + daoENS: "", }); async function grantAttestation(easContract: Contract, data: string, recipient: Address) { @@ -125,6 +126,7 @@ const Quiz = () => { const searchParams = useSearchParams(); const { eventId = "" } = searchParams ? Object.fromEntries(searchParams) : {}; + if (!eventId) { alert("1"); router.push("/"); @@ -359,33 +361,33 @@ const Quiz = () => { const value = parseDomain(subDomain); - const result = await client.getAddressRecord({ name: value }); + const daoAddress = await client.getAddressRecord({ name: value }); - if (!result) { + if (!daoAddress) { alert("No perteneces a esa DAO, por favor verifica"); return; } - const gnosisContractObj = new Contract(result?.value, gnosisContract.abi, provider); + const gnosisContractObj = new Contract(daoAddress?.value, gnosisContract.abi, provider); const txResponse = await gnosisContractObj.getOwners(); if (txResponse) { if (!txResponse.includes(connectedAddress)) { alert("No perteneces a esa DAO, por favor verifica"); } else { - setState({ ...state, safeAddress: result?.value, answer: answer }); + setState({ ...state, safeAddress: daoAddress?.value, answer: answer, daoENS: subDomain }); } return; } } else if (eventDetails?.[0] == 4) { - const answer = Object.values(answers)[0]; + // const answer = Object.values(answers)[0]; const response = await fetch("/api/userQuiz", { method: "POST", headers: { "Content-Type": "application/json", "x-api-key": process.env.API_KEY || "", }, - body: JSON.stringify({ eventId: eventId, value: answer, eventType: eventDetails?.[0].toString() }), + body: JSON.stringify({ eventId: eventId, value: answers, eventType: eventDetails?.[0].toString() }), }); const result = await response.json(); if (result && result.data) { @@ -430,7 +432,7 @@ const Quiz = () => { } }; - // // Check for the access to the questions before rendering the component + // Check for the access to the questions before rendering the component return loading ? ( ) : ( diff --git a/packages/nextjs/components/EventCard.tsx b/packages/nextjs/components/EventCard.tsx index 5bac39270..4048729e9 100644 --- a/packages/nextjs/components/EventCard.tsx +++ b/packages/nextjs/components/EventCard.tsx @@ -16,20 +16,6 @@ export const EventCard = ({ router: any; }) => { const account = useAccount(); - - // console.log(eventDetails.eventId, { userData, eventDetails }); - // console.log(eventDetails?.eventId, userData?.[0] == eventDetails?.eventId); - // console.log( - // eventDetails?.eventId.toString() === "1" - // ? { - // id: eventDetails?.eventId.toString(), - // a: userData?.[0] == eventDetails?.eventId, - // b: userData?.[1].includes(eventDetails?.eventId), - // userData, - // eventDetails, - // } - // : null, - // ); return (
Date.now() ? ( + Number(eventDetails.startTimestamp) < Date.now() ? ( ) : null} - {eventDetails.startTimestamp && - !(Number(eventDetails.startTimestamp) < Date.now()) && - !userData?.[1].includes(eventDetails?.eventId) ? ( + {eventDetails.startTimestamp && Number(eventDetails.startTimestamp) > Date.now() ? ( ) : null} - {/* TODO: chequear con habacuc la condicion correcta para mostrar registrar a evento y reclamar badge */} - {!account?.address && ( Conecta tu cartera web3 🦊 ↗️ diff --git a/packages/nextjs/pages/api/middleware.ts b/packages/nextjs/pages/api/middleware.ts index ec0fca53b..d9bc6fa60 100644 --- a/packages/nextjs/pages/api/middleware.ts +++ b/packages/nextjs/pages/api/middleware.ts @@ -3,14 +3,13 @@ import { NextApiRequest, NextApiResponse } from "next"; const authMiddleware = (req: NextApiRequest, res: NextApiResponse, next: () => void) => { // Get the referring website URL from the request headers const referringWebsite = req.headers.referer; - console.log(referringWebsite); // Define the allowed website URL - console.log(`https://${process.env.VERCEL_URL}`); - const allowedWebsite = process.env.ALLOWED_WEBSITE || `https://${process.env.VERCEL_URL}`; + // const allowedWebsite = process.env.ALLOWED_WEBSITE || `https://${process.env.VERCEL_URL}`; + const allowedWebsite = process.env.ALLOWED_WEBSITE || `https://${process.env.VERCEL_BRANCH_URL}`; // `https://${process.env.VERCEL_URL}`; const apiKey = req.headers["x-api-key"]; // Check if the referring website matches the allowed website - if (!referringWebsite?.includes(allowedWebsite || "")) { + if (!referringWebsite?.includes(allowedWebsite)) { // If not, return a 403 Forbidden response return res.status(403).json({ message: "Access Forbidden" }); } diff --git a/packages/nextjs/pages/api/userQuiz.ts b/packages/nextjs/pages/api/userQuiz.ts index cc9d2ae53..4b7a9092e 100644 --- a/packages/nextjs/pages/api/userQuiz.ts +++ b/packages/nextjs/pages/api/userQuiz.ts @@ -1,6 +1,6 @@ import authMiddleware from "./middleware"; import type { NextApiRequest, NextApiResponse } from "next"; -import { checkAnswer, checkLiveEventAnswer, getEventQuestion } from "~~/lib/actions/quiz.actions"; +import { checkAnswer, getEventQuestion } from "~~/lib/actions/quiz.actions"; // Define a type for the response data type ResponseData = { @@ -21,16 +21,8 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< } } else if (req.method === "POST") { try { - if (req.body.eventType !== "4") { - const result = await checkAnswer(req.body); - - res.status(200).json({ data: result, message: "Quiz answer checked successfully" }); - } else { - // check correct secret word for event type LIVE EVENT - const result = await checkLiveEventAnswer(req.body); - - res.status(200).json({ data: result, message: "Quiz answer checked successfully" }); - } + const result = await checkAnswer(req.body); + res.status(200).json({ data: result, message: "Quiz answer checked successfully" }); } catch (error) { console.error("Error:", error); res.status(500).json({ message: "Internal Server Error" }); diff --git a/packages/nextjs/scaffold.config.ts b/packages/nextjs/scaffold.config.ts index d4233b658..63046a429 100644 --- a/packages/nextjs/scaffold.config.ts +++ b/packages/nextjs/scaffold.config.ts @@ -8,9 +8,10 @@ export type ScaffoldConfig = { onlyLocalBurnerWallet: boolean; walletAutoConnect: boolean; }; -// const isProd = process.env.VERCEL_ENV == "production"; +const isProd = process.env.NEXT_PUBLIC_VERCEL_ENV == "production"; -// const targetNetwork = isProd ? chains.optimism : chains.baseSepolia; +const targetNetwork = isProd ? chains.optimism : chains.baseSepolia; // TODO: When defined, adjust to target network +console.log("isProd : " + isProd + " | targetNetwork: " + targetNetwork.name); const scaffoldConfig = { // The networks on which your DApp is live diff --git a/packages/nextjs/schema/index.json b/packages/nextjs/schema/index.json index d3df7d0c1..b4481734c 100644 --- a/packages/nextjs/schema/index.json +++ b/packages/nextjs/schema/index.json @@ -74,12 +74,17 @@ "value": "eventDetails[7]", "state": false }, - "Event_Type": { + "DAO_Multisig": { + "type": "address", + "value": "safeAddress", + "state": true + }, + "DAO_ENS_Name": { "type": "string", - "value": "eventDetails[0]", - "state": false + "value": "daoENS", + "state": true }, - "Event_URL": { + "Incubation_URL": { "type": "string", "value": "answer", "state": true @@ -113,7 +118,7 @@ }, "Event_URL": { "type": "string", - "value": "answer", + "value": "eventURL", "state": true } } diff --git a/packages/nextjs/utils/scaffold-eth/abi.ts b/packages/nextjs/utils/scaffold-eth/abi.ts index f373034f7..578e98ce6 100644 --- a/packages/nextjs/utils/scaffold-eth/abi.ts +++ b/packages/nextjs/utils/scaffold-eth/abi.ts @@ -1033,7 +1033,7 @@ let deployedContractTemplate; if (process.env.VERCEL_ENV == "production") { deployedContractTemplate = { - address: "0xE383f2B3Ff9024bAa09b33923b8DBd0F2AF98ad0", + address: "0x304892F028a4EB10261f47B535Ca1E13C86Fdf74", // forced to baseSepolia as we don't have a mainnet deployment yet abi: [ { inputs: [], @@ -1473,6 +1473,11 @@ if (process.env.VERCEL_ENV == "production") { name: "", type: "tuple[]", }, + { + internalType: "string[]", + name: "", + type: "string[]", + }, ], stateMutability: "view", type: "function", @@ -1559,6 +1564,25 @@ if (process.env.VERCEL_ENV == "production") { stateMutability: "view", type: "function", }, + { + inputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + name: "isMentor", + outputs: [ + { + internalType: "bool", + name: "", + type: "bool", + }, + ], + stateMutability: "view", + type: "function", + }, { inputs: [ {