Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding skip ack option, wip #204

Merged
merged 1 commit into from
Sep 24, 2024
Merged

Adding skip ack option, wip #204

merged 1 commit into from
Sep 24, 2024

Conversation

mvpoyatt
Copy link

@mvpoyatt mvpoyatt commented Sep 23, 2024

Summary by CodeRabbit

Release Notes

  • New Features

    • Enhanced acknowledgment handling across multiple contracts with a new boolean return value, skipAck.
  • Bug Fixes

    • Improved control flow in acknowledgment processing to allow skipping based on skipAck.
  • Tests

    • Added a new test function to validate acknowledgment behavior in the Pluto contract.
    • Introduced a new event DummyEvent for testing purposes.

@mvpoyatt mvpoyatt requested a review from RnkSngh September 23, 2024 14:24
Copy link

coderabbitai bot commented Sep 23, 2024

Walkthrough

The pull request introduces modifications across multiple contracts to enhance the handling of acknowledgment packets. The primary change involves updating function signatures to return both an AckPacket and a boolean value skipAck, allowing for more nuanced control over acknowledgment processing. This adjustment affects the GeneralMiddleware, Dispatcher, UniversalChannelHandler, and various example contracts, ensuring consistency in how acknowledgment behavior is managed throughout the codebase.

Changes

File Path Change Summary
contracts/base/GeneralMiddleware.sol Updated function signatures to return (AckPacket, bool skipAck) for packet processing methods.
contracts/core/Dispatcher.sol Modified response decoding in _callIfContract to handle (AckPacket, bool skipAck).
contracts/core/UniversalChannelHandler.sol Altered method signature to include bool skipAck in acknowledgment handling.
contracts/examples/Earth.sol Updated onRecvUniversalPacket method to return (AckPacket, bool skipAck).
contracts/examples/Mars.sol Changed onRecvPacket method across multiple derived contracts to return (AckPacket, bool skipAck).
bindings/go/earth/Earth.go Updated ABI and method signatures to reflect new return type including bool skipAck.
bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go Updated ABI and method signatures to include bool skipAck.
bindings/go/mars/Mars.go Updated ABI and method signatures to include bool skipAck.
bindings/go/mars/PanickingMars.go Updated ABI and method signatures to include bool skipAck.
bindings/go/mars/RevertingBytesMars.go Updated ABI and method signatures to include bool skipAck.
bindings/go/mars/RevertingEmptyMars.go Updated ABI and method signatures to include bool skipAck.
bindings/go/mars/RevertingStringMars.go Updated ABI and method signatures to include bool skipAck.
bindings/go/moon/Moon.go Updated ABI and method signatures to include bool skipAck.
bindings/go/universalchannelhandler/UniversalChannelHandler.go Updated ABI and method signatures to include bool skipAck.
test/Dispatcher/Dispatcher.t.sol Added test_skip_ack to verify acknowledgment behavior in the Pluto contract.

Possibly related PRs

Suggested labels

bug

Poem

🐰 In the meadow where packets flow,
Acknowledgments dance, a new way to show.
With skipAck now in tow,
We hop and skip, our logic aglow!
Through contracts bright, we leap and play,
Enhancing the flow, come join the fray! 🌼


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    -- I pushed a fix in commit <commit_id>, please review it.
    -- Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    -- @coderabbitai generate unit testing code for this file.
    -- @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    -- @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    -- @coderabbitai read src/utils.ts and generate unit testing code.
    -- @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    -- @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@mvpoyatt mvpoyatt marked this pull request as draft September 23, 2024 14:24
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 10

Outside diff range and nitpick comments (9)
contracts/examples/Pluto.sol (1)

25-30: LGTM: Well-documented contract purpose.

The documentation clearly explains the contract's role as an IBC receiver that doesn't send acknowledgments. It also mentions its use for testing and as an example for developers.

Consider adding a brief explanation of how this contract differs from the Mars contract it extends, to provide more context for developers.

contracts/examples/Earth.sol (1)

111-114: LGTM! Consider adding a comment for the new skipAck parameter.

The changes to the onRecvUniversalPacket function look good. The addition of the skipAck boolean to the return type allows for more flexible control over acknowledgment processing in the future, while maintaining backwards compatibility with the current behavior.

Consider adding a brief comment explaining the purpose of the skipAck parameter, for example:

/**
 * @notice Handles the recv callback of a universal packet.
 * @param channelId The channel ID.
 * @param packet The universal packet.
 * @return ackPacket The acknowledgement packet.
 * @return skipAck A boolean indicating whether to skip the acknowledgment (false in this implementation).
 * @dev It's recommended to always validate the authorized channel of any packet or channel using the
 * onlyAuthorizedChannel modifier.
 */
contracts/examples/Mars.sol (4)

250-250: Remove unreachable code after revert

The assignment skipAck = false; occurs after a revert, so it is unreachable code. Consider removing this line to clean up the function.

Apply this diff:

     require(false, "on recv packet is reverting");
-    ack = AckPacket(false, "");
-    skipAck = false;
 }

286-286: Remove unreachable code after revert

The line skipAck = false; is placed after a revert statement and will never be executed. It can be safely removed.

Apply this diff:

     revert OnRecvPacketRevert();
-    skipAck = false;
 }

303-303: Remove unreachable code after revert

The assignment skipAck = false; is unreachable due to the preceding require(false);. Consider removing it.

Apply this diff:

     require(false);
-    ack = AckPacket(false, "");
-    skipAck = false;
 }

313-313: Remove unreachable code after assert

The line skipAck = false; is unreachable because assert(false); halts execution. Removing this line tidies up the code.

Apply this diff:

     assert(false);
-    ack = AckPacket(false, "");
-    skipAck = false;
 }
contracts/interfaces/IbcMiddleware.sol (3)

106-106: Attention: Interface Modification Requires Documentation Update

The function onRecvUniversalPacket in the IbcUniversalPacketReceiver interface now returns an additional bool skipAck. It's important to update the function's documentation to explain the purpose and usage of the skipAck parameter. This clarification will assist developers in correctly implementing the interface and understanding how the acknowledgment process is affected.


Line range hint 229-231: Inconsistent Contract Name in Documentation

The contract UCHUser is documented with the title IbcMwUser, which is inconsistent with its actual name. This could lead to confusion for developers and maintainers.

Apply the following change to correct the contract name in the documentation:

- * @title IbcMwUser
+ * @title UCHUser

Line range hint 323-325: Potential Duplicate or Conflicting Contracts

There are two contracts named IbcMwUser defined in the code:

  1. Lines 229-282: An abstract contract named UCHUser with documentation referring to IbcMwUser.
  2. Lines 323-376: A contract named IbcMwUser with similar documentation.

This duplication may cause confusion and potential conflicts within the codebase. Verify whether both contracts are necessary and appropriately named. If they serve different purposes, consider renaming one to better reflect its functionality.

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between bb93db8 and 5f49221.

Files selected for processing (10)
  • contracts/base/GeneralMiddleware.sol (2 hunks)
  • contracts/core/Dispatcher.sol (1 hunks)
  • contracts/core/UniversalChannelHandler.sol (1 hunks)
  • contracts/examples/Earth.sol (1 hunks)
  • contracts/examples/Mars.sol (4 hunks)
  • contracts/examples/Pluto.sol (1 hunks)
  • contracts/interfaces/IbcMiddleware.sol (2 hunks)
  • contracts/interfaces/IbcReceiver.sol (1 hunks)
  • test/Dispatcher/Dispatcher.t.sol (3 hunks)
  • test/mocks/GasUsingMars.sol (1 hunks)
Additional comments not posted (11)
contracts/examples/Pluto.sol (3)

1-23: LGTM: License and imports are correctly specified.

The SPDX license identifier and Apache 2.0 license header are properly included. The import statements are relevant to the contract's functionality, importing necessary components from other contracts and interfaces.


31-32: LGTM: Contract definition and constructor are correctly implemented.

The Pluto contract properly extends Mars and the constructor correctly initializes the parent contract with the provided IbcDispatcher.


34-50: Implement packet validation and consider dynamic acknowledgment.

The onRecvPacket function correctly implements the new signature returning both AckPacket and skipAck. However, there are a few points to consider:

  1. The comment mentions validating the packet's source and destination, but this validation is not implemented. Consider adding this validation for security.

  2. The acknowledgment message is hardcoded. For a more flexible implementation, consider generating the acknowledgment dynamically based on the received packet's content.

  3. The skipAck is always set to true. Ensure this aligns with the intended behavior for all possible scenarios.

Implement the packet validation as mentioned in the comment. Here's a suggested structure:

require(
    packet.srcPort == expectedSrcPort && 
    packet.srcChannel == expectedSrcChannel &&
    packet.dstPort == expectedDstPort &&
    packet.dstChannel == expectedDstChannel,
    "Invalid packet source or destination"
);

Consider making the acknowledgment message dynamic:

string memory reply = string(abi.encodePacked("Received packet with sequence: ", packet.sequence));
return (AckPacket(true, abi.encodePacked('{ "account": "account", "reply": "', reply, '" }')), true);

To ensure consistency with other contracts, let's check how onRecvPacket is implemented elsewhere:

contracts/base/GeneralMiddleware.sol (3)

101-101: LGTM! Verify impact on dependent code.

The addition of the skipAck boolean to the return type enhances control over the acknowledgment process. This change aligns with the PR objectives.

To ensure consistency across the codebase, run the following script to check for any potential mismatches in function calls or implementations:

#!/bin/bash
# Description: Check for potential mismatches in onRecvMWPacket function calls or implementations

# Search for onRecvMWPacket function calls or implementations
rg --type solidity -e 'onRecvMWPacket.*returns' -e 'onRecvMWPacket.*=.*\(' -A 5

Line range hint 1-224: Summary: Enhanced acknowledgment control implemented consistently.

The changes to both onRecvMWPacket and onRecvUniversalPacket functions, adding a skipAck boolean to their return types, are consistent and align with the PR objectives. These modifications provide more granular control over the acknowledgment process.

To ensure these changes are consistently applied and don't introduce any breaking changes, consider the following:

  1. Review all contracts that inherit from or implement GeneralMiddleware to ensure they're updated accordingly.
  2. Check for any custom implementations of IbcMwPacketReceiver or IbcUniversalPacketReceiver interfaces that might need to be updated.
  3. Verify that any code calling these functions is updated to handle the new return value.

Run the following script to identify potential areas that might need attention:

#!/bin/bash
# Description: Identify potential areas affected by the changes

# Search for contracts inheriting from GeneralMiddleware
echo "Contracts inheriting from GeneralMiddleware:"
rg --type solidity "contract.*is.*GeneralMiddleware"

# Search for implementations of IbcMwPacketReceiver or IbcUniversalPacketReceiver
echo "\nImplementations of IbcMwPacketReceiver or IbcUniversalPacketReceiver:"
rg --type solidity "contract.*is.*(IbcMwPacketReceiver|IbcUniversalPacketReceiver)"

# Search for function calls to onRecvMWPacket or onRecvUniversalPacket
echo "\nFunction calls to onRecvMWPacket or onRecvUniversalPacket:"
rg --type solidity "(onRecvMWPacket|onRecvUniversalPacket).*\("

Ensure that all affected areas are properly updated to maintain consistency with these changes.


183-183: LGTM! Verify impact on dependent code.

The addition of the skipAck boolean to the return type of onRecvUniversalPacket is consistent with the changes made to onRecvMWPacket. This modification enhances control over the acknowledgment process for universal packets.

To ensure consistency across the codebase, run the following script to check for any potential mismatches in function calls or implementations:

contracts/core/UniversalChannelHandler.sol (1)

139-139: Implement skipAck logic and update related components

The addition of the skipAck boolean to the return type aligns with the PR objectives of adding a skip ack option. This change enhances the flexibility of the acknowledgment process in the IBC protocol.

However, there are a few points to consider:

  1. The function body hasn't been updated to implement the skipAck logic. Please update the implementation to determine and return the appropriate skipAck value.

  2. Ensure that all related interfaces (e.g., IbcDispatcher) and implementations are updated to accommodate this change.

  3. Update unit tests and integration tests to cover the new skipAck return value and its various scenarios.

To verify the impact of this change on the entire IBC packet handling flow, please run the following script:

This script will help identify other areas of the codebase that might be affected by this change and need to be updated accordingly.

Verification successful

Change Verified: skipAck Parameter Consistently Implemented

The addition of the skipAck boolean to the onRecvPacket function return type has been consistently applied across all relevant implementations and interfaces in the codebase. This enhancement aligns with the PR objectives of introducing a skip acknowledgment option without removing or replacing existing code.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for other occurrences of onRecvPacket and related IBC functions

# Search for onRecvPacket implementations
echo "Searching for onRecvPacket implementations:"
rg --type solidity -A 5 'function\s+onRecvPacket'

# Search for IbcDispatcher interface
echo "\nSearching for IbcDispatcher interface:"
rg --type solidity -A 10 'interface\s+IbcDispatcher'

# Search for calls to onRecvPacket
echo "\nSearching for calls to onRecvPacket:"
rg --type solidity 'onRecvPacket\('

Length of output: 518


Script:

#!/bin/bash
# Description: Check for other occurrences of onRecvPacket and related IBC functions in .sol files

# Search for onRecvPacket implementations
echo "Searching for onRecvPacket implementations:"
rg --glob "*.sol" -A 5 'function\s+onRecvPacket'

# Search for IbcDispatcher interface
echo "\nSearching for IbcDispatcher interface:"
rg --glob "*.sol" -A 10 'interface\s+IbcDispatcher'

# Search for calls to onRecvPacket
echo "\nSearching for calls to onRecvPacket:"
rg --glob "*.sol" 'onRecvPacket\('

Length of output: 8297

test/Dispatcher/Dispatcher.t.sol (2)

341-341: LGTM: Event declaration for testing purposes.

The DummyEvent declaration looks good. It's appropriately named and structured for its intended use in the test suite.


Line range hint 341-380: Overall, good test coverage for the new skip acknowledgment feature.

The additions to the DispatcherRecvPacketTestSuite effectively test the new feature for skipping acknowledgments. The DummyEvent and test_skip_ack function work together to provide a comprehensive test case. These changes align well with the PR objective of "Adding skip ack option".

A few minor improvements have been suggested, but overall, this is a solid addition to the test suite that should help ensure the reliability of the new feature.

contracts/examples/Mars.sol (2)

90-90: Confirm the value of skipAck in the return statement

In the return statement, skipAck is hardcoded to false. If the intention is to sometimes return true to skip acknowledgment under certain conditions, please ensure that the logic reflects this. If skipAck is always false, consider whether this parameter is necessary.


85-85: Verify consistency across all overrides of onRecvPacket

Ensure that all contracts inheriting from Mars and overriding onRecvPacket have updated their function signatures and implementations to handle the new skipAck return value appropriately.

test/mocks/GasUsingMars.sol Show resolved Hide resolved
contracts/interfaces/IbcReceiver.sol Show resolved Hide resolved
test/Dispatcher/Dispatcher.t.sol Outdated Show resolved Hide resolved
contracts/examples/Mars.sol Show resolved Hide resolved
contracts/examples/Mars.sol Outdated Show resolved Hide resolved
contracts/examples/Mars.sol Outdated Show resolved Hide resolved
contracts/examples/Mars.sol Outdated Show resolved Hide resolved
contracts/examples/Mars.sol Outdated Show resolved Hide resolved
contracts/interfaces/IbcMiddleware.sol Show resolved Hide resolved
contracts/core/Dispatcher.sol Show resolved Hide resolved
Copy link
Collaborator

@RnkSngh RnkSngh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, aside from a couple of small nits

contracts/examples/Earth.sol Show resolved Hide resolved
contracts/examples/Mars.sol Show resolved Hide resolved
contracts/examples/Mars.sol Show resolved Hide resolved
@mvpoyatt mvpoyatt marked this pull request as ready for review September 23, 2024 19:41
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 14

Outside diff range and nitpick comments (6)
test/Dispatcher/Dispatcher.t.sol (1)

Pending Implementation of Additional Tests

The current test suite lacks implementations for unordered channels, wrong ports, and invalid proofs. Please add the following tests to enhance coverage and ensure the reliability of the dispatcher:

  • Tests for unordered channels
  • Tests for wrong ports
  • Tests for invalid proofs
Analysis chain

Line range hint 1-416: Good progress on test coverage, don't forget remaining TODOs.

The addition of the test_skip_ack function and related helpers has improved the test coverage for the skip acknowledgment feature. This is a positive step towards ensuring the reliability of the codebase.

However, there's still a TODO comment at the end of the file:

// TODO: add tests for unordered channel, wrong port, and invalid proof

Let's check if these tests have been implemented elsewhere:

If the search doesn't yield results, consider implementing these additional test cases to further improve the test coverage.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for tests related to unordered channel, wrong port, and invalid proof
rg -i "test.*unordered channel|test.*wrong port|test.*invalid proof" --type solidity

Length of output: 119


Script:

#!/bin/bash
# Search for tests related to unordered channel, wrong port, and invalid proof in Solidity files
rg -i "test.*unordered channel|test.*wrong port|test.*invalid proof" --glob "*.sol"

Length of output: 194

src/evm/contracts/factories/Earth__factory.ts (1)

Impact of ABI changes on dependent files

The ABI modification in Earth__factory.ts, specifically the addition of the skipAck return value to the onRecvUniversalPacket function, affects the following files:

  • test/VirtualChain.sol
  • test/Dispatcher/Dispatcher.t.sol
  • test/Dispatcher/Dispatcher.timeout.t.sol
  • test/Dispatcher/Dispatcher.ack.sol
  • test/Dispatcher/Dispatcher.dappHandlerRevert.t.sol
  • script/Deploy.s.sol

These files import the Earth contract and may require updates to handle the new skipAck return value. Ensure that all interactions with the onRecvUniversalPacket function accommodate the additional return value and update related test cases accordingly.

Analysis chain

Line range hint 1-607: Consider the impact of ABI changes on existing implementations

The addition of the skipAck return value to the onRecvUniversalPacket function in the ABI represents a significant change to the contract's interface. This modification may have far-reaching effects:

  1. Existing client code that calls this function will need to be updated to handle the new return value.
  2. Any middleware or services that interact with this contract may need to be modified to accommodate the new return structure.
  3. Test suites will need to be updated to verify the correct handling of the skipAck value.

To mitigate potential issues:

  1. Consider versioning the contract interface if backward compatibility is a concern.
  2. Update all relevant documentation to reflect this change in the function's behavior.
  3. Conduct a thorough review of all code that interacts with the Earth contract to ensure it can handle the new return value structure.

Let's check for any import statements of the Earth contract to identify potentially affected files:

This will help us identify files that may need to be updated to accommodate the new ABI structure.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for imports of the Earth contract
rg --type typescript --type solidity "import.*Earth" -A 2

Length of output: 168


Script:

#!/bin/bash
# Search for imports of the Earth contract in .ts and .sol files
rg 'import.*Earth' --glob '*.ts' --glob '*.sol' -A 2

Length of output: 1679

src/evm/contracts/factories/Moon__factory.ts (1)

Line range hint 1-896: Summary: Skip acknowledgment option added to Moon contract

The changes in this file implement the "skip ack option" mentioned in the PR title. Key points:

  1. A new skipAck boolean property has been added to the onRecvPacket function's output in the ABI.
  2. The contract's bytecode has been updated to reflect this change.

These modifications allow for more flexible control over the acknowledgment process in the Moon contract. The changes appear to be correctly implemented, but thorough testing is recommended to ensure the new functionality works as intended and doesn't introduce any regressions.

Consider the following architectural implications:

  1. Ensure that all components interacting with the Moon contract are updated to handle the new skipAck option correctly.
  2. Update any documentation or specifications to reflect this new functionality.
  3. Consider adding logging or monitoring for the usage of the skipAck option to track its impact on system behavior.
src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (1)

482-486: LGTM: ABI updated with new skipAck property

The addition of the skipAck boolean property to the onRecvPacket function's output in the ABI is consistent with the PR objective. This change will allow for more granular control over the acknowledgment process.

Ensure that all components interacting with this contract are updated to handle the new skipAck property correctly.

bindings/go/mars/RevertingStringCloseChannelMars.go (1)

Missing onRecvPacket Implementation with skipAck

The Go bindings expect the onRecvPacket function to return a bool skipAck, but no such implementation exists in the identified smart contracts:

  • test/upgradeableProxy/upgrades/UCHV2.sol
  • contracts/examples/Mars.sol
  • contracts/core/UniversalChannelHandler.sol

This discrepancy can lead to runtime issues when interacting with the smart contracts.

  • Action Required:
    • Smart Contracts: Implement the onRecvPacket function with the bool skipAck return value in the relevant contracts.
    • Go Bindings: If the smart contracts are not intended to include skipAck, revert the Go bindings to align with the existing contract implementations.
Analysis chain

Line range hint 1-1023: Verify smart contract implementation for skipAck handling

While the bindings have been correctly updated to include the new skipAck return value for the OnRecvPacket function, it's important to note that these bindings do not include the actual implementation of this function.

To ensure full compatibility and correct behavior:

  1. Verify that the Solidity smart contract correctly implements the onRecvPacket function with the new skipAck return value.
  2. Check any Go code that calls this function to ensure it properly handles the new return value.

To help verify the smart contract implementation, you can run the following command to search for the onRecvPacket function definition in Solidity files:

This will help confirm that the smart contract has been updated to match these bindings.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for the onRecvPacket function definition in Solidity files
rg --type solidity 'function\s+onRecvPacket.*returns.*bool\s+skipAck' -A 10

Length of output: 110


Script:

#!/bin/bash
# Search for the onRecvPacket function definition in Solidity (.sol) files
rg 'function\s+onRecvPacket.*returns\s*\(.*bool\s+skipAck.*\)' -g "*.sol" -A 10

Length of output: 1049


Script:

#!/bin/bash
# Search for implementations of the onRecvPacket function in Solidity (.sol) files excluding interfaces
rg 'contract\s+\w+\s+is\s+.*IbcReceiver.*\{[^}]*function\s+onRecvPacket.*returns\s*\(.*bool\s+skipAck.*\)' -g "*.sol" -A 20

Length of output: 125


Script:

#!/bin/bash
# Step 1: Find all contracts that inherit from IbcReceiver
contracts=$(rg 'contract\s+\w+\s+is\s+.*IbcReceiver' -g "*.sol" --only-filename)

# Check if any contracts were found
if [ -z "$contracts" ]; then
  echo "No contracts found inheriting from IbcReceiver."
  exit 0
fi

# Step 2: Search for onRecvPacket implementation with skipAck in the identified contracts
for contract in $contracts; do
  rg -M 1000 'function\s+onRecvPacket\s*\(.*\)\s*external\s*returns\s*\(.*bool\s+skipAck.*\)' "$contract" -A 10
done

Length of output: 660


Script:

#!/bin/bash
# Step 1: Find all contracts that inherit from IbcReceiver
contracts=$(rg 'contract\s+\w+\s+is\s+.*IbcReceiver' -g "*.sol" -l)

# Check if any contracts were found
if [ -z "$contracts" ]; then
  echo "No contracts found inheriting from IbcReceiver."
  exit 0
fi

# Step 2: Search for onRecvPacket implementation with skipAck in the identified contracts
for contract in $contracts; do
  rg -M 1000 'function\s+onRecvPacket\s*\(.*\)\s*external\s*returns\s*\(.*bool\s+skipAck.*\)' "$contract" -A 10
done

Length of output: 809

src/evm/contracts/factories/Dispatcher__factory.ts (1)

Line range hint 2172-2185: Add validation for missing library addresses in linkBytecode().

Currently, the linkBytecode method does not handle cases where the required library addresses are missing from the linkLibraryAddresses parameter. This could result in placeholders not being replaced, potentially leading to deployment errors or incorrect bytecode.

Consider adding validation to ensure that each required library address is provided, and throw a descriptive error if any are missing.

Apply this diff to implement the validation:

 static linkBytecode(
   linkLibraryAddresses: DispatcherLibraryAddresses
 ): string {
   let linkedBytecode = _bytecode;

+  if (!linkLibraryAddresses["contracts/libs/Ibc.sol:Ibc"]) {
+    throw new Error("Missing address for contracts/libs/Ibc.sol:Ibc");
+  }
+  if (!linkLibraryAddresses["contracts/libs/IbcUtils.sol:IbcUtils"]) {
+    throw new Error("Missing address for contracts/libs/IbcUtils.sol:IbcUtils");
+  }

   linkedBytecode = linkedBytecode.replace(
     new RegExp("__\\$d825222459c46c14afb2efe0967c30e98d\\$__", "g"),
     linkLibraryAddresses["contracts/libs/Ibc.sol:Ibc"]
       .replace(/^0x/, "")
       .toLowerCase()
   );
   linkedBytecode = linkedBytecode.replace(
     new RegExp("__\\$f61eb90c6f674e787d51c07f105fa231e2\\$__", "g"),
     linkLibraryAddresses["contracts/libs/IbcUtils.sol:IbcUtils"]
       .replace(/^0x/, "")
       .toLowerCase()
   );

   return linkedBytecode;
 }
Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 5f49221 and ed0c7ee.

Files selected for processing (35)
  • bindings/go/earth/Earth.go (2 hunks)
  • bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go (2 hunks)
  • bindings/go/mars/Mars.go (2 hunks)
  • bindings/go/mars/PanickingMars.go (2 hunks)
  • bindings/go/mars/RevertingBytesMars.go (2 hunks)
  • bindings/go/mars/RevertingEmptyMars.go (2 hunks)
  • bindings/go/mars/RevertingStringCloseChannelMars.go (2 hunks)
  • bindings/go/mars/RevertingStringMars.go (2 hunks)
  • bindings/go/moon/Moon.go (2 hunks)
  • bindings/go/universalchannelhandler/UniversalChannelHandler.go (2 hunks)
  • contracts/examples/Earth.sol (1 hunks)
  • contracts/examples/Mars.sol (4 hunks)
  • package.json (1 hunks)
  • src/evm/contracts/Earth.ts (2 hunks)
  • src/evm/contracts/IUniversalChannelHandler.ts (2 hunks)
  • src/evm/contracts/Mars.sol/Mars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/PanickingMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingBytesMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingEmptyMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingStringMars.ts (2 hunks)
  • src/evm/contracts/Moon.ts (2 hunks)
  • src/evm/contracts/UniversalChannelHandler.ts (2 hunks)
  • src/evm/contracts/factories/Dispatcher__factory.ts (1 hunks)
  • src/evm/contracts/factories/Earth__factory.ts (2 hunks)
  • src/evm/contracts/factories/IUniversalChannelHandler__factory.ts (1 hunks)
  • src/evm/contracts/factories/Mars.sol/Mars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Moon__factory.ts (2 hunks)
  • src/evm/contracts/factories/UniversalChannelHandler__factory.ts (2 hunks)
  • test/Dispatcher/Dispatcher.t.sol (4 hunks)
Files skipped from review as they are similar to previous changes (2)
  • contracts/examples/Earth.sol
  • contracts/examples/Mars.sol
Additional comments not posted (72)
package.json (1)

3-3: Confirm the rationale for the major version bump.

I notice that the version has been updated from 3.0.6 to 4.0.0, which represents a major version bump. While this aligns with the addition of a new feature (skip ack option) mentioned in the PR title, I have a few points to consider:

  1. Major version bumps typically indicate breaking changes or significant new features. Can you confirm that the changes in this PR warrant a major version increment?
  2. The PR is marked as "wip" (work in progress). Is it appropriate to bump the major version at this stage, or should this be done when the feature is complete and ready for release?
  3. If this is intentional, please ensure that all breaking changes are documented and that the changelog is updated accordingly.

To help verify the extent of changes, let's check for modifications in other files:

This will help assess whether the changes are extensive enough to justify a major version bump.

src/evm/contracts/IUniversalChannelHandler.ts (3)

329-334: LGTM: Enhanced return type for onRecvPacket

The modification to the onRecvPacket method's return type is well-structured and adds valuable functionality:

  1. It now returns a tuple containing an AckPacketStructOutput and a boolean.
  2. The tuple includes named properties ackPacket and skipAck, improving clarity.

This change suggests the introduction of a feature to optionally skip acknowledgments, which could provide more flexibility in packet handling.


458-463: LGTM: Consistent update in getFunction for onRecvPacket

The getFunction method for onRecvPacket has been correctly updated to reflect the new return type:

  1. The return type matches the earlier modification in the file.
  2. This change maintains consistency and type safety throughout the interface.

This update ensures that developers retrieving the onRecvPacket function will have accurate type information, reducing the risk of runtime errors.


329-334: Summary: Introduction of skip acknowledgment option

The changes to IUniversalChannelHandler.ts introduce a new feature for optional acknowledgment skipping:

  1. The onRecvPacket method now returns a tuple with an AckPacketStructOutput and a skipAck boolean.
  2. This change is consistently applied in both the method declaration and the getFunction retrieval.

Implications:

  • Increased flexibility in packet handling, allowing for scenarios where acknowledgments can be skipped.
  • Improved type safety and code clarity through structured return types and named properties.

These modifications enhance the interface's capabilities while maintaining a clear and type-safe contract for implementations.

Also applies to: 458-463

src/evm/contracts/Mars.sol/RevertingStringMars.ts (2)

407-412: Approve: Enhanced packet acknowledgment control

The modification to the onRecvPacket method signature, returning a tuple of [AckPacketStructOutput, boolean], introduces more granular control over packet acknowledgment. This change aligns with the PR objective of adding a "skip ack option".

The boolean value, likely representing skipAck, allows the contract to decide whether to skip the acknowledgment process for a received packet. This can potentially optimize gas usage and provide more flexibility in handling different packet scenarios.

Also applies to: 598-603


407-412: Verify: Consistency of onRecvPacket signature change

The modification to the onRecvPacket method signature has been consistently applied in both the interface definition and the getFunction method. This is good for maintaining the integrity of the interface.

However, it's crucial to ensure that this change is reflected in:

  1. The actual contract implementation
  2. Any other files that might be using or implementing this interface

To verify the consistency of this change across the codebase, please run the following script:

This script will help identify any inconsistencies or places where the change might need to be applied.

Also applies to: 598-603

src/evm/contracts/Mars.sol/RevertingBytesMars.ts (3)

407-412: LGTM: New skipAck option added to onRecvPacket

The modification to the onRecvPacket method's return type introduces a new skipAck boolean, which aligns with the PR objective of adding a "skip ack option". This change allows for more granular control over the acknowledgment process.

The updated return type is well-structured and maintains type safety:

[
  [AckPacketStructOutput, boolean] & {
    ack: AckPacketStructOutput;
    skipAck: boolean;
  }
]

594-599: LGTM: Consistent update in getFunction for onRecvPacket

The getFunction method for onRecvPacket has been correctly updated to match the new method signature:

[
  [AckPacketStructOutput, boolean] & {
    ack: AckPacketStructOutput;
    skipAck: boolean;
  }
]

This consistency is crucial for maintaining type safety and preventing potential runtime errors. It ensures that the contract interface remains coherent throughout the file.


407-412: Summary: Successfully implemented "skip ack option"

The changes in this file successfully implement the "skip ack option" mentioned in the PR objectives. The modifications are well-structured, type-safe, and consistently applied to both the onRecvPacket method declaration and its corresponding getFunction entry.

Key points:

  1. Added a skipAck boolean to the return type of onRecvPacket.
  2. Maintained type safety with a well-defined return structure.
  3. Ensured consistency between the method declaration and getFunction.

These changes provide more granular control over the acknowledgment process in the IBC protocol implementation.

Also applies to: 594-599

src/evm/contracts/Moon.ts (3)

407-412: LGTM: Enhanced packet acknowledgment control

The modification to the onRecvPacket method's return type is well-structured and aligns with the PR's objective of adding a skip acknowledgment option. This change allows for more granular control over the packet acknowledgment process.

The new return type, which includes both the AckPacketStructOutput and a skipAck boolean, provides a clear mechanism to optionally bypass the acknowledgment step when necessary.


598-603: LGTM: Consistent interface update

The changes to the getFunction method for onRecvPacket are consistent with the modifications made to the onRecvPacket method definition. This consistency is crucial for maintaining a coherent contract interface and ensuring type safety when retrieving the onRecvPacket function.

The updated return type correctly reflects the new structure, including both the AckPacketStructOutput and the skipAck boolean.


407-412: Summary: Successfully implemented skip acknowledgment option

The changes in this file successfully implement the skip acknowledgment option for the onRecvPacket method. The modifications are consistent across both the method definition and its retrieval through getFunction. This enhancement allows for more flexible packet handling in the IBC protocol implementation.

Developers using this interface should be aware of the new skipAck boolean and handle it appropriately in their implementations.

Also applies to: 598-603

src/evm/contracts/Mars.sol/PanickingMars.ts (3)

407-412: LGTM: Enhanced packet acknowledgment control

The modification to the onRecvPacket method's return type introduces a more granular control over packet acknowledgment. The new tuple return type, which includes both the AckPacketStructOutput and a skipAck boolean, allows for conditional skipping of the acknowledgment process. This change aligns well with the PR objective of adding a skip ack option.


598-603: LGTM: Consistent type updates

The getFunction method for onRecvPacket has been correctly updated to reflect the new return type. This change maintains type consistency throughout the interface, which is crucial for ensuring type safety when interacting with the contract. Good job on keeping the types synchronized.


Line range hint 1-724: Verify implementation files for skip ack handling

The changes to the PanickingMars interface successfully introduce the skip ack option. However, it's important to ensure that the corresponding implementation files are updated to handle this new option correctly.

Please run the following script to check for potential implementation files that might need updates:

Verification successful

Verify PanickingMars implementation in contracts/examples/Mars.sol for skip ack handling

The script identified contracts/examples/Mars.sol as a potential implementation file for PanickingMars. Please run the following script to verify whether PanickingMars is implemented in this file and if the skip ack option is handled correctly:


Verification Successful: PanickingMars correctly implements skip ack handling

The PanickingMars implementation in contracts/examples/Mars.sol includes handling for the skipAck option as required. No further implementation files require updates.

Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Find potential implementation files for PanickingMars

# Search for Solidity files that might implement PanickingMars
echo "Potential Solidity implementation files:"
fd -e sol | xargs grep -l "contract.*PanickingMars"

# Search for TypeScript files that might use PanickingMars
echo "Potential TypeScript files using PanickingMars:"
fd -e ts | xargs grep -l "PanickingMars"

Length of output: 772


Script:

#!/bin/bash
# Description: Check implementation of PanickingMars for skip ack handling in contracts/examples/Mars.sol

# Path to the implementation file
IMPLEMENTATION_FILE="contracts/examples/Mars.sol"

# Verify if PanickingMars is implemented in the file
if grep -q "contract.*PanickingMars" "$IMPLEMENTATION_FILE"; then
  echo "PanickingMars implementation found in $IMPLEMENTATION_FILE."
  
  # Check for skip ack handling
  if grep -q "skipAck" "$IMPLEMENTATION_FILE"; then
    echo "Skip ack handling is implemented."
  else
    echo "Skip ack handling is NOT implemented."
  fi
else
  echo "No implementation of PanickingMars found in $IMPLEMENTATION_FILE."
fi

Length of output: 379

src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts (2)

407-412: LGTM: New return type enhances acknowledgment control

The modification to the onRecvPacket method's return type introduces a skipAck boolean, which aligns with the PR's objective of adding a skip acknowledgment option. This change provides more granular control over the packet acknowledgment process, potentially allowing for optimizations or special handling in certain scenarios.


598-603: LGTM: Consistent update in getFunction method

The changes to the getFunction method for "onRecvPacket" mirror those made to the onRecvPacket method definition. This consistency ensures that the new return type, including the skipAck boolean, is correctly reflected when retrieving the function, maintaining type safety and accurate representation of the new functionality throughout the interface.

test/Dispatcher/Dispatcher.t.sol (2)

342-343: LGTM: New event for testing purposes.

The DummyEvent is well-named and has clear parameters, making it suitable for its testing purpose in the test_skip_ack function.


411-416: LGTM: Well-structured helper function for event testing.

The batch_expected_events function is a well-designed helper for testing event order. Its purpose is clearly explained in the comment, and its implementation is straightforward and effective.

src/evm/contracts/UniversalChannelHandler.ts (1)

495-500: LGTM! Improved return type for onRecvPacket

The changes to the onRecvPacket method's return type are well-implemented and align with the PR objective of adding a skip acknowledgment option. The new return type, which includes both an AckPacketStructOutput and a boolean skipAck, allows for more granular control over acknowledgment handling. The use of named properties in the return type enhances readability and type safety.

These changes have been consistently applied in both the interface definition and the getFunction method, ensuring coherence throughout the contract interface.

Also applies to: 649-654

src/evm/contracts/factories/Earth__factory.ts (2)

Line range hint 1-607: Summary and Recommendations

The changes to the Earth__factory.ts file, particularly the addition of the skipAck property to the ABI, are consistent with the PR objective of adding a skip acknowledgment option. However, this change has potential far-reaching implications:

  1. The contract's interface has been modified, which may affect existing implementations and integrations.
  2. The bytecode has been updated, indicating changes in the contract's compiled form.

Recommendations:

  1. Thoroughly test the new skipAck functionality to ensure it behaves as expected.
  2. Update all relevant documentation to reflect the changes in the contract's interface.
  3. Review and update any code that interacts with the Earth contract to handle the new return value structure.
  4. Consider implementing a version control mechanism for the contract if backward compatibility is a concern.
  5. Conduct a comprehensive impact analysis across the entire codebase to identify and address any potential issues arising from this change.

To assist with the impact analysis, let's search for files that might be affected by this change:

This will help identify files that reference the Earth contract and may need to be reviewed or updated.


298-302: New skipAck property added to ABI

The onRecvUniversalPacket function in the ABI has been updated to include a new skipAck boolean return value. This change aligns with the PR objective of adding a skip acknowledgment option.

However, there are a few points to consider:

  1. The skipAck property is added as a return value, which might affect existing implementations that expect only the ackPacket to be returned.
  2. The change may require updates to other parts of the codebase that interact with this function.

To ensure this change is consistently applied across the codebase, let's check for other occurrences of onRecvUniversalPacket:

This will help us identify if there are any inconsistencies in the implementation of this function across different contracts or interfaces.

Verification successful

skipAck Property Consistently Implemented Across Codebase

All occurrences of onRecvUniversalPacket have been reviewed, and the skipAck property has been consistently added as a return value. This ensures that existing implementations are aware of the new property and can handle it appropriately without issues.

  • Verified in the following files:
    • test/upgradeableProxy/upgrades/UCHV2.sol
    • contracts/interfaces/IbcMiddleware.sol
    • contracts/examples/Earth.sol
    • contracts/base/GeneralMiddleware.sol
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other occurrences of onRecvUniversalPacket
rg --type typescript --type solidity "function onRecvUniversalPacket" -A 10

Length of output: 168


Script:

#!/bin/bash
# Search for other occurrences of onRecvUniversalPacket
rg --type ts --type solidity "function onRecvUniversalPacket" -A 10

Length of output: 102


Script:

#!/bin/bash
# Search for other occurrences of onRecvUniversalPacket
rg --type ts --type sol "function onRecvUniversalPacket" -A 10

Length of output: 92


Script:

#!/bin/bash
# Search for other occurrences of onRecvUniversalPacket in TypeScript and Solidity files
rg "function onRecvUniversalPacket" --glob "*.ts" --glob "*.sol" -A 10

Length of output: 3418

src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts (2)

482-486: LGTM. Please provide more context about the skipAck functionality.

The addition of the skipAck boolean output to the onRecvPacket function in the ABI is consistent with the PR title. This change suggests a new feature for controlling acknowledgment behavior.

Could you please provide more information about the intended use and implications of the skipAck option? This would help in understanding the broader impact of this change on the contract's behavior.


909-909: Bytecode updated. Please confirm proper compilation.

The bytecode has been updated, which is consistent with the ABI changes. This is expected when modifying the contract's functionality.

To ensure the integrity of the changes, please confirm that:

  1. The contract was compiled with the correct Solidity version.
  2. The compilation process was performed in a clean environment.
  3. The resulting bytecode matches what's expected for the updated contract.

You can verify this by running the following commands:

If the diff command shows no output, it means the bytecode in the factory file matches the newly compiled bytecode.

src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts (2)

899-899: Bytecode updated to reflect ABI changes

The contract's bytecode has been updated, which is expected due to the ABI change. The new bytecode is significantly longer than the previous version.

Consider the following:

  1. The increased bytecode size may lead to higher deployment costs. Ensure this is acceptable for your use case.
  2. Verify that the new bytecode correctly implements the skipAck functionality.
  3. If this contract is part of a system with size constraints, ensure that the increased size doesn't cause issues.

To verify the bytecode changes, run the following script:

#!/bin/bash
# Description: Compare bytecode size and check for potential issues

# Get the old bytecode size (assuming it's in a previous commit)
old_size=$(git show HEAD^:src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts | grep -oP '(?<=_bytecode = ").+(?=";)' | wc -c)

# Get the new bytecode size
new_size=$(echo "$_bytecode" | wc -c)

echo "Old bytecode size: $old_size"
echo "New bytecode size: $new_size"
echo "Size difference: $((new_size - old_size))"

# Check if the size increase is significant (e.g., more than 10%)
if (( new_size > old_size * 1.1 )); then
    echo "Warning: Significant increase in bytecode size. Review for potential optimization opportunities."
fi

# Check for potential size-related issues in other contracts
echo "\nChecking for contracts close to size limit:"
rg --type solidity --max-filesize 1M '(contract|library|interface)(?=.*\{)' -C 2

482-486: New skipAck property added to ABI

A new boolean property skipAck has been added to the ABI in the onRecvPacket function's output. This change suggests the introduction of a feature to control acknowledgment behavior.

Ensure that:

  1. The contract implementation correctly handles this new skipAck property.
  2. Any calling contracts or interfaces are updated to accommodate this change.
  3. The behavior change is documented in the contract's comments or external documentation.

To verify the impact of this change, run the following script:

src/evm/contracts/factories/UniversalChannelHandler__factory.ts (2)

865-865: Bytecode updated. Ensure correct compilation and deployment.

The contract's bytecode has been updated, which is expected due to the ABI changes. While direct review of bytecode is not practical, it's crucial to ensure that the new bytecode correctly represents the updated contract.

To verify the integrity of the new bytecode, please run the following checks:

#!/bin/bash
# Description: Verify the integrity of the new bytecode

# Check if the bytecode length is within expected range
BYTECODE_LENGTH=$(echo "0x60a0604052306080523480156200001557600080fd5b506200002062000030565b6200002a62000030565b620000f1565b600054610100900460ff16156200009d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000ef576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161268e62000129600039600081816106000152818161064901528181610a9301528181610ad30152610b66015261268e6000f3fe60806040526004361061016a5760003560e01c806379ba5097116100d1578063c4d66de81161008a578063e847e28011610064578063e847e28014610408578063f2fde38b14610428578063fad28a2414610448578063ffa1ad741461046857600080fd5b8063c4d66de8146103aa578063cb7e9057146103ca578063e30c3978146103ea57600080fd5b806379ba5097146102ee5780637e1d42b5146103035780638da5cb5b14610323578063ace02de714610355578063ba22bd7614610375578063c1cb44e51461039557600080fd5b80634c2ee09d116101235780634c2ee09d146102355780634dcc0aa6146102555780634f1ef2861461028357806352d1902d14610296578063602f9834146102b9578063715018a6146102d957600080fd5b80631eb7dd5e146101765780631f3a5830146101985780633659cfe6146101d55780633f9fdbe414610176578063462fdf83146101f55780634bdb55971461020857600080fd5b3661017157005b600080fd5b34801561018257600080fd5b5061019661019136600461194a565b610497565b005b3480156101a457600080fd5b506101b86101b33660046119b1565b6104c8565b6040516001600160401b0390911681526020015b60405180910390f35b3480156101e157600080fd5b506101966101f0366004611a30565b6105f6565b6101b8610203366004611a5e565b6106de565b34801561021457600080fd5b50610228610223366004611bc9565b610870565b6040516101cc9190611d5a565b34801561024157600080fd5b50610196610250366004611d6d565b6108b5565b34801561026157600080fd5b50610275610270366004611d9e565b61091e565b6040516101cc929190611dd2565b610196610291366004611e0c565b610a89565b3480156102a257600080fd5b506102ab610b59565b6040519081526020016101cc565b3480156102c557600080fd5b506101966102d4366004611d9e565b610c0c565b3480156102e557600080fd5b50610196610d41565b3480156102fa57600080fd5b50610196610d55565b34801561030f57600080fd5b5061019661031e366004611e6f565b610dcc565b34801561032f57600080fd5b506033546001600160a01b03165b6040516001600160a01b0390911681526020016101cc565b34801561036157600080fd5b50610196610370366004611ee7565b610f04565b34801561038157600080fd5b50610196610390366004611a30565b610f86565b3480156103a157600080fd5b506102ab600181565b3480156103b657600080fd5b506101966103c5366004611a30565b610fb0565b3480156103d657600080fd5b5060975461033d906001600160a01b031681565b3480156103f657600080fd5b506065546001600160a01b031661033d565b34801561041457600080fd5b50610196610423366004611fd9565b6110c2565b34801561043457600080fd5b50610196610443366004611a30565b6110f8565b34801561045457600080fd5b50610196610463366004611d6d565b611169565b34801561047457600080fd5b50610228604051806040016040528060038152602001620312e360ec1b81525081565b6097546001600160a01b031633146104c2576040516321bf7f4960e01b815260040160405180910390fd5b50505050565b60008061053860405180608001604052806104e9336001600160a01b031690565b81526020016001815260200188815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611194565b60408051338152602081018990529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16097546040516330f8455760e21b81526001600160a01b039091169063c3e1155c906105a8908a908590889060040161202b565b6020604051808303816000875af11580156105c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105eb919061205d565b979650505050505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036106475760405162461bcd60e51b815260040161063e9061207a565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610690600080516020612612833981519152546001600160a01b031690565b6001600160a01b0316146106b65760405162461bcd60e51b815260040161063e906120c6565b6106bf816111d0565b604080516000808252602082019092526106db918391906111d8565b50565b60975460408051608081019091526000916001600160a01b03169082906107509080338152602001600181526020018b81526020018a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250611194565b60408051338152602081018c90529192507f9831d8c66285bfd33de069ced58ad437d6bf08f63446bf06c3713e40b4b7e873910160405180910390a16040516330f8455760e21b81526001600160a01b0383169063c3e1155c906107bc908d9085908b9060040161202b565b6020604051808303816000875af11580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff919061205d565b609754604080518082018252929550610863926001600160a01b03909216918d918791908a9060029083908390808284376000920191909152505060408051808201825291508a906002908390839080828437600092019190915250611348915050565b5050979650505050505050565b6097546060906001600160a01b0316331461089e576040516321bf7f4960e01b815260040160405180910390fd5b6108a9868484611417565b98975050505050505050565b6108bd6114e1565b6097546040516381bc079b60e01b8152600481018390526001600160a01b03909116906381bc079b90602401600060405180830381600087803b15801561090357600080fd5b505af1158015610917573d6000803e3d6000fd5b5050505050565b6040805180820190915260008152606060208201526097546000906001600160a01b03163314610961576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d61098a6060870187612112565b6040518363ffffffff1660e01b81526004016109a7929190612181565b600060405180830381865af41580156109c4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109ec91908101906121da565b90506109fb816040015161153b565b6001600160a01b0316635b761585610a16602087018761227c565b60200135836040518363ffffffff1660e01b8152600401610a389291906122cf565b6000604051808303816000875af1158015610a57573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a7f91908101906122e8565b9250925050915091565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610ad15760405162461bcd60e51b815260040161063e9061207a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b1a600080516020612612833981519152546001600160a01b031690565b6001600160a01b031614610b405760405162461bcd60e51b815260040161063e906120c6565b610b49826111d0565b610b55828260016111d8565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bf95760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161063e565b5060008051602061261283398151915290565b6097546001600160a01b03163314610c37576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610c606060850185612112565b6040518363ffffffff1660e01b8152600401610c7d929190612181565b600060405180830381865af4158015610c9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc291908101906121da565b9050610cd1816000015161153b565b6001600160a01b031663400d9f5d610ce9848061227c565b60200135836040518363ffffffff1660e01b8152600401610d0b9291906122cf565b600060405180830381600087803b158015610d2557600080fd5b505af1158015610d39573d6000803e3d6000fd5b505050505050565b610d496114e1565b610d53600061154c565b565b60655433906001600160a01b03168114610dc35760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161063e565b6106db8161154c565b6097546001600160a01b03163314610df7576040516321bf7f4960e01b815260040160405180910390fd5b600073__$f61eb90c6f674e787d51c07f105fa231e2$__63d5c39a9d610e206060860186612112565b6040518363ffffffff1660e01b8152600401610e3d929190612181565b600060405180830381865af4158015610e5a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610e8291908101906121da565b9050610e91816000015161153b565b6001600160a01b031663588152ca610ea9858061227c565b6020013583856040518463ffffffff1660e01b8152600401610ecd939291906123ce565b600060405180830381600087803b158015610ee757600080fd5b505af1158015610efb573d6000803e3d6000fd5b50505050505050565b610f0c6114e1565b60975460405163418925b760e01b81526001600160a01b039091169063418925b790610f4a908b908b908b908b908b908b908b908b90600401612420565b600060405180830381600087803b158015610f6457600080fd5b505af1158015610f78573d6000803e3d6000fd5b505050505050505050505050565b610f8e6114e1565b609780546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff1615808015610fd05750600054600160ff909116105b80610fea5750303b158015610fea575060005460ff166001145b61104d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161063e565b6000805460ff191660011790558015611070576000805461ff0019166101001790555b61107982611565565b8015610b55576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6097546001600160a01b031633146110ed576040516321bf7f4960e01b815260040160405180910390fd5b610917848383611417565b6111006114e1565b606580546001600160a01b0383166001600160a01b031990911681179091556111316033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6097546001600160a01b031633146106db576040516321bf7f4960e01b815260040160405180910390fd5b8051602080830151604080850151606086810151925190956111ba9590949391016124de565b6040516020818303038152906040529050919050565b6106db6114e1565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156112105761120b83611594565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561126a575060408051601f3d908101601f1916820190925261126791810190612512565b60015b6112cd5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161063e565b600080516020612612833981519152811461133c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161063e565b5061120b838383611630565b846001600160a01b031663478222c26040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac919061252b565b6001600160a01b03166318e3404b34868686866040518663ffffffff1660e01b81526004016113de949392919061256b565b6000604051808303818588803b1580156113f757600080fd5b505af115801561140b573d6000803e3d6000fd5b50505050505050505050565b6060604051806040016040528060038152602001620312e360ec1b81525060405160200161144591906125a4565b60405160208183030381529060405280519060200120838360405160200161146e9291906125b6565b60405160208183030381529060405280519060200120146114a25760405163b01318a560e01b815260040160405180910390fd5b82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092979650505050505050565b6033546001600160a01b03163314610d535760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161063e565b600061154682611655565b92915050565b606580546001600160a01b03191690556106db816116c2565b600054610100900460ff1661158c5760405162461bcd60e51b815260040161063e906125c6565b610f8e611714565b6001600160a01b0381163b6116015760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161063e565b60008051602061261283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61163983611743565b6000825111806116465750805b1561120b576104c28383611783565b60006001600160a01b038211156116be5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663630206269747360c81b606482015260840161063e565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1661173b5760405162461bcd60e51b815260040161063e906125c6565b610d536117af565b61174c81611594565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606117a88383604051806060016040528060278152602001612632602791396117df565b9392505050565b600054610100900460ff166117d65760405162461bcd60e51b815260040161063e906125c6565b610d533361154c565b6060600080856001600160a01b0316856040516117fc91906125a4565b600060405180830381855af49150503d8060008114611837576040519150601f19603f3d011682016040523d82523d6000602084013e61183c565b606091505b509150915061184d86838387611857565b9695505050505050565b606083156118c65782516000036118bf576001600160a01b0385163b6118bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063e565b50816118d0565b6118d083836118d8565b949350505050565b8151156118e85781518083602001fd5b8060405162461bcd60e51b815260040161063e9190611d5a565b60008083601f84011261191457600080fd5b5081356001600160401b0381111561192b57600080fd5b60208301915083602082850101111561194357600080fd5b9250929050565b6000806000806060858703121561196057600080fd5b8435935060208501356001600160401b0381111561197d57600080fd5b61198987828801611902565b9598909750949560400135949350505050565b6001600160401b03811681146106db57600080fd5b6000806000806000608086880312156119c957600080fd5b853594506020860135935060408601356001600160401b038111156119ed57600080fd5b6119f988828901611902565b9094509250506060860135611a0d8161199c565b809150509295509295909350565b6001600160a01b03811681146106db57600080fd5b600060208284031215611a4257600080fd5b81356117a881611a1b565b806040810183101561154657600080fd5b6000806000806000806000610100888a031215611a7a57600080fd5b873596506020880135955060408801356001600160401b03811115611a9e57600080fd5b611aaa8a828b01611902565b9096509450506060880135611abe8161199c565b9250611acd8960808a01611a4d565b9150611adc8960c08a01611a4d565b905092959891949750929550565b803560038110611af957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611b3c57611b3c611afe565b604052919050565b60006001600160401b03821115611b5d57611b5d611afe565b50601f01601f191660200190565b6000611b7e611b7984611b44565b611b14565b9050828152838383011115611b9257600080fd5b828260208301376000602084830101529392505050565b600082601f830112611bba57600080fd5b6117a883833560208501611b6b565b600080600080600080600060c0888a031215611be457600080fd5b611bed88611aea565b965060208801356001600160401b0380821115611c0957600080fd5b818a0191508a601f830112611c1d57600080fd5b813581811115611c2f57611c2f611afe565b8060051b611c3f60208201611b14565b9182526020818501810192908101908e841115611c5b57600080fd5b6020860192505b83831015611c99578483351115611c7857600080fd5b611c888f60208535890101611ba9565b825260209283019290910190611c62565b9a5050505060408a0135965060608a0135915080821115611cb957600080fd5b611cc58b838c01611ba9565b955060808a0135945060a08a0135915080821115611ce257600080fd5b50611cef8a828b01611902565b989b979a50959850939692959293505050565b60005b83811015611d1d578181015183820152602001611d05565b838111156104c25750506000910152565b60008151808452611d46816020860160208601611d02565b601f01601f19169290920160200192915050565b6020815260006117a86020830184611d2e565b600060208284031215611d7f57600080fd5b5035919050565b600060e08284031215611d9857600080fd5b50919050565b600060208284031215611db057600080fd5b81356001600160401b03811115611dc657600080fd5b6118d084828501611d86565b604081528251151560408201526000602084015160406060840152611dfa6080840182611d2e565b91505082151560208301529392505050565b60008060408385031215611e1f57600080fd5b8235611e2a81611a1b565b915060208301356001600160401b03811115611e4557600080fd5b8301601f81018513611e5657600080fd5b611e6585823560208401611b6b565b9150509250929050565b60008060408385031215611e8257600080fd5b82356001600160401b0380821115611e9957600080fd5b611ea586838701611d86565b93506020850135915080821115611ebb57600080fd5b50830160408186031215611ece57600080fd5b809150509250929050565b80151581146106db57600080fd5b60008060008060008060008060a0898b031215611f0357600080fd5b88356001600160401b0380821115611f1a57600080fd5b611f268c838d01611902565b909a509850889150611f3a60208c01611aea565b975060408b01359150611f4c82611ed9565b90955060608a01359080821115611f6257600080fd5b818b0191508b601f830112611f7657600080fd5b813581811115611f8557600080fd5b8c60208260051b8501011115611f9a57600080fd5b6020

---

`419-423`: **LGTM. Verify the impact of this change on dependent systems.**

The addition of the `skipAck` boolean return value to the `onRecvPacket` function aligns with the PR objective of adding a skip acknowledgment option. This change enhances the contract's flexibility in handling packet acknowledgments.



To ensure this change is properly integrated, please run the following script to check for any other components that might need updates:

</blockquote></details>
<details>
<summary>src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts (3)</summary><blockquote>

Line range hint `1-899`: **Summary: ABI and bytecode updates align with PR objective.**

The changes in this file, namely the addition of the `skipAck` field in the ABI and the corresponding bytecode update, are consistent with the PR's goal of adding a skip acknowledgment option. These modifications appear to be correct and well-implemented. 

However, to ensure the changes are fully integrated and functioning as expected:

1. Verify that all components interacting with the `onRecvPacket` function are updated to handle the new `skipAck` return value.
2. Ensure comprehensive test coverage for the new functionality.
3. Consider updating relevant documentation to reflect this new feature.

---

`899-899`: **Bytecode updated. Ensure comprehensive testing.**

The contract's bytecode has been significantly modified, which is expected due to the addition of the `skipAck` functionality. While manual verification of bytecode is not feasible, it's crucial to ensure that this change doesn't introduce any unintended side effects.


To verify the correctness of the new bytecode:

1. Ensure that all existing tests pass with the updated contract.
2. Add new tests specifically for the `skipAck` functionality.
3. Consider running a diff on the contract's source code to confirm that only the expected changes are present.

```shell
#!/bin/bash
# Description: Check for unexpected changes in the contract source

# Test: Diff the contract source file
git diff HEAD~1 src/evm/contracts/Mars.sol/RevertingEmptyMars.sol

482-486: LGTM. Verify the usage of the new skipAck field.

The addition of the skipAck boolean field to the onRecvPacket function's output in the ABI is consistent with the PR's objective of adding a skip acknowledgment option. This change looks good and aligns with the expected modifications.

To ensure this change is properly implemented and used, please run the following script to check for its usage across the codebase:

src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts (3)

482-486: LGTM: New skipAck output added to onRecvPacket function

The addition of the skipAck boolean output to the onRecvPacket function is a significant change that enhances the contract's flexibility in handling IBC packet acknowledgments. This modification allows the contract to indicate whether the acknowledgment should be skipped, potentially optimizing the IBC communication process.

Developers integrating with this contract should be aware of this new output and update their implementations accordingly to handle cases where acknowledgment might be skipped.


Line range hint 1-899: Summary: PanickingMars contract factory updated with new skipAck feature

The PanickingMars__factory.ts file has been updated to incorporate the new skipAck feature. Key changes include:

  1. ABI modification: The onRecvPacket function now includes a skipAck boolean output.
  2. Bytecode update: The contract's bytecode has been regenerated to implement the new functionality.

These changes enhance the contract's capabilities in handling IBC packet acknowledgments. Developers using this contract should:

  1. Update their integrations to handle the new skipAck output from onRecvPacket.
  2. Review and test the updated contract behavior, especially in IBC-related scenarios.
  3. Ensure that any dependent systems or contracts are compatible with this new feature.

The factory class itself remains unchanged, maintaining backward compatibility for instantiation and deployment processes.


899-899: Bytecode updated to reflect ABI changes

The contract's bytecode has been updated, which is consistent with the addition of the skipAck feature in the ABI. This change is expected and necessary to implement the new functionality.

To ensure the integrity of the changes:

  1. Verify that the new bytecode correctly implements the skipAck functionality.
  2. Consider running tests to confirm that the contract behaves as expected with the new feature.
  3. If possible, compare the Solidity source code changes with the bytecode diff to ensure consistency.

To help verify the bytecode changes, you can run the following command to search for references to the skipAck functionality in the Solidity source files:

src/evm/contracts/factories/Moon__factory.ts (2)

896-896: Bytecode updated: Verify contract compilation

The bytecode has been updated, which is expected given the changes to the contract's functionality. While it's not feasible to manually verify the correctness of the bytecode, it's important to ensure that it accurately reflects the intended changes.

To ensure the bytecode update is correct:

  1. Verify that the contract compiles without errors.
  2. Run the contract's test suite to ensure all functionality works as expected.
  3. Consider using a bytecode comparison tool to highlight the specific changes between the old and new bytecode.
#!/bin/bash
# Description: Verify the contract compilation and test execution

# Test: Check if the contract compiles without errors
echo "Compiling contract..."
# Replace with your actual compilation command
# npm run compile

# Test: Run the contract's test suite
echo "Running tests..."
# Replace with your actual test command
# npm run test

479-483: LGTM: New skipAck property added to ABI

The addition of the skipAck boolean property to the onRecvPacket function's output in the ABI is consistent with the PR objective of adding a skip acknowledgment option. This change allows for more granular control over the acknowledgment process.

To ensure this change is properly implemented and used, please run the following script:

src/evm/contracts/factories/Mars.sol/Mars__factory.ts (1)

479-483: LGTM: New skipAck property added to ABI

The addition of the skipAck boolean property to the onRecvPacket function output in the ABI is correct and aligns with the PR objective. This change allows the contract to indicate whether the acknowledgment should be skipped for a received packet, providing more flexibility in packet handling.

src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (2)

Line range hint 1-899: Verify factory class compatibility with updated contract

While no changes were made to the RevertingStringCloseChannelMars__factory class, it's important to ensure that it remains compatible with the updated contract, especially considering the new skipAck functionality.

Please confirm that:

  1. The factory class can successfully deploy the updated contract.
  2. Any methods in the factory class that interact with the contract's ABI (if any) are still functioning correctly.

You can use the following script to verify the factory class compatibility:


899-899: Bytecode updated: Verify compilation and testing

The contract's bytecode has been updated, which is expected due to the ABI changes. While manual verification of the bytecode is not feasible, it's crucial to ensure that the new bytecode correctly implements the intended functionality.

Please confirm that:

  1. The contract compiles without errors.
  2. All existing tests pass with the new implementation.
  3. New tests have been added to cover the skipAck functionality.

You can use the following script to verify the compilation and run tests:

bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go (4)

62-62: ABI update for skip ack option looks good.

The ABI string has been correctly updated to include the new skipAck return value for the onRecvPacket function. This change aligns with the PR objective of adding a skip ack option.


422-423: OnRecvPacket function signature updates are correct.

The OnRecvPacket function signatures have been properly updated to include the new skipAck boolean return value. This change is consistent with the ABI update and correctly implements the skip ack option functionality.

Also applies to: 429-430, 436-437


Line range hint 1-1: Auto-generated file with correct changes.

This file is auto-generated, and the changes made are consistent with the PR objective of adding a skip ack option. The modifications to the ABI and function signatures have been correctly implemented by the code generation process. No manual changes or improvements are needed for this file.


Line range hint 1-537: Overall assessment: Changes are correct and well-implemented.

The modifications to this auto-generated file accurately reflect the addition of the skip ack option. The ABI string and OnRecvPacket function signatures have been updated correctly. These changes are consistent with the PR objective and have been implemented properly through the code generation process. No issues or necessary improvements were identified during the review.

bindings/go/mars/RevertingStringCloseChannelMars.go (2)

62-62: ABI updated correctly for onRecvPacket function

The ABI string has been properly updated to include the new skipAck boolean return value for the onRecvPacket function. This change is essential for correct interaction with the smart contract.


688-689: OnRecvPacket function signatures updated consistently

The OnRecvPacket function signatures have been correctly updated in all three instances (Transactor, Session, and TransactorSession) to include the new skipAck boolean return value. This consistency is crucial for proper functioning of the generated bindings.

Also applies to: 695-696, 702-703

bindings/go/universalchannelhandler/UniversalChannelHandler.go (3)

606-607: OnRecvPacket function signature updated in UniversalChannelHandlerTransactor

The function signature and comment for OnRecvPacket in UniversalChannelHandlerTransactor have been correctly updated to reflect the new skipAck return value. This change is consistent with the ABI update and accurately describes the new function behavior.


613-614: OnRecvPacket function signatures updated in Session structs

The function signatures and comments for OnRecvPacket in both UniversalChannelHandlerSession and UniversalChannelHandlerTransactorSession have been correctly updated to reflect the new skipAck return value. These changes are consistent with the ABI update and the UniversalChannelHandlerTransactor change, ensuring consistency across all relevant structs.

Also applies to: 620-621


62-62: ABI update adds new return parameter for onRecvPacket function

The ABI string has been updated to include a new bool skipAck return parameter for the onRecvPacket function. This change reflects an update in the underlying Solidity contract and will affect how the contract interacts with other components in the system.

To ensure this change is consistent across the codebase, run the following script:

Verification successful

ABI update verified across all relevant Go bindings

The onRecvPacket function has been consistently updated across multiple Go files to include the new bool skipAck return parameter. This ensures that the ABI changes are correctly propagated throughout the codebase, maintaining consistency and integrity in contract interactions.

  • Updated in the following files:
    • bindings/go/moon/Moon.go
    • bindings/go/mars/RevertingStringCloseChannelMars.go
    • bindings/go/mars/RevertingStringMars.go
    • bindings/go/mars/RevertingEmptyMars.go
    • bindings/go/mars/PanickingMars.go
    • bindings/go/mars/RevertingBytesMars.go
    • bindings/go/mars/Mars.go
    • bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go
Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for other occurrences of onRecvPacket in Go files
rg --type go "func.*onRecvPacket.*\(.*\).*\(.*\)" -g '!UniversalChannelHandler.go'

Length of output: 4821

src/evm/contracts/Earth.ts (2)

421-426: Ensure consistency in function retrieval logic

The getFunction method for onRecvUniversalPacket has been updated to reflect the new return type [AckPacketStructOutput, boolean]. Confirm that all related interface definitions and usages are consistently updated to match this change.


304-309: Update onRecvUniversalPacket method signature and usage

The onRecvUniversalPacket method's return type has been changed to include [AckPacketStructOutput, boolean] with properties ackPacket and skipAck. Ensure that all implementations and calls to this method are updated to handle the new return type appropriately.

Run the following script to verify that all instances of onRecvUniversalPacket have been updated:

src/evm/contracts/Mars.sol/Mars.ts (2)

407-411: Ensure implementations of onRecvPacket are updated to match the new return type

The return type of onRecvPacket has been updated to include both ackPacket and skipAck. Please verify that all implementations of this method across the codebase have been updated accordingly to prevent type mismatches or runtime errors.

Run the following script to find implementations of onRecvPacket and check their return types:

#!/bin/bash
# Description: Verify implementations of `onRecvPacket` match the new return type.

# Test: Search for `onRecvPacket` implementations with the old return type.
# Expect: No implementations should use the old return type.

rg --type ts 'onRecvPacket\(.*\): AckPacketStructOutput' -A 5

598-603: Ensure usage of getFunction('onRecvPacket') reflects the updated return type

The return type of getFunction('onRecvPacket') has been updated. Please verify that any code using this function is updated to handle the new return structure to prevent potential type errors.

Run the following script to find usages of getFunction('onRecvPacket'):

src/evm/contracts/Mars.sol/RevertingEmptyMars.ts (2)

598-603: Confirm consistency of getFunction signature for onRecvPacket

The getFunction method for onRecvPacket reflects the updated return type. Ensure that this signature aligns with the implementation and that any code retrieving this function handles the new return structure appropriately.

Run the following script to locate all references to getFunction with onRecvPacket and verify usage:

#!/bin/bash
# Description: Locate references to `getFunction` for `onRecvPacket`.

# Search for `getFunction` calls with `onRecvPacket` as an argument.
rg --type typescript -A 5 'getFunction\(.*"onRecvPacket"'

407-412: Ensure proper handling of the updated return type in onRecvPacket

The onRecvPacket method's return type has been updated to include both ack and skipAck. Please verify that all implementations and calls to this method correctly handle the new tuple return type to prevent any runtime errors or unexpected behavior.

Run the following script to find all usages of onRecvPacket and check for proper handling:

bindings/go/earth/Earth.go (1)

48-48: ABI updated correctly in EarthMetaData

The ABI in EarthMetaData has been updated to include the new skipAck boolean in the onRecvUniversalPacket function's return parameters. This change reflects the modifications made in the Solidity contract and appears to be consistent.

bindings/go/moon/Moon.go (1)

62-62: Verify the updated ABI string reflects the latest contract changes

The ABI string at line 62 has been modified to include the new output parameters for the onRecvPacket function. Please ensure that this ABI accurately represents the current Solidity contract to prevent any potential mismatches.

bindings/go/mars/PanickingMars.go (6)

62-62: ABI update for onRecvPacket function is correctly implemented.

The ABI definition now correctly includes the skipAck boolean output for the onRecvPacket function, matching the updated contract interface.


320-324: Function signature of OnRecvPacket in PanickingMarsCaller is updated appropriately.

The function now returns a struct containing AckPacket and SkipAck, which aligns with the updated ABI and provides the necessary output for acknowledgment handling.


328-331: Struct definition for output of OnRecvPacket is properly defined.

The outstruct is correctly defined to include both Ack of type AckPacket and SkipAck of type bool, ensuring accurate representation of the return values.


336-337: Output assignments in OnRecvPacket are correctly implemented.

The conversion and assignment of the returned values to outstruct.Ack and outstruct.SkipAck are correctly performed, ensuring accurate retrieval of the function outputs.


345-349: Function signature of OnRecvPacket in PanickingMarsSession is correctly updated.

The session method now correctly returns a struct with Ack and SkipAck, maintaining consistency with the updated contract interface.


355-359: Function signature of OnRecvPacket in PanickingMarsCallerSession is correctly updated.

The caller session method reflects the updated return type, ensuring uniformity across different contexts.

bindings/go/mars/RevertingEmptyMars.go (1)

62-62: ABI updated appropriately

The ABI in RevertingEmptyMarsMetaData has been updated to include the skipAck parameter in the onRecvPacket function. This change ensures that the Go bindings correctly reflect the updated contract interface.

bindings/go/mars/RevertingBytesMars.go (4)

62-62: ABI Updated to Reflect New Output Structure

The ABI string has been correctly updated to include the new output structure for the onRecvPacket function. This ensures that the Go bindings are consistent with the Solidity contract.


320-339: Updated OnRecvPacket Method in RevertingBytesMarsCaller

The OnRecvPacket method now returns a struct containing both Ack and SkipAck. This change aligns with the updated contract return values and ensures proper handling of acknowledgment packets.


345-349: Updated Session Method OnRecvPacket in RevertingBytesMarsSession

The session-level OnRecvPacket method has been updated to return the new struct with Ack and SkipAck. This maintains consistency across the binding interfaces and supports the new acknowledgment logic.


355-359: Updated Caller Session Method OnRecvPacket

The OnRecvPacket method in RevertingBytesMarsCallerSession now correctly returns the struct with Ack and SkipAck. This change ensures that all caller sessions are compatible with the updated contract interface.

bindings/go/mars/RevertingStringMars.go (4)

62-62: ABI updated to include skipAck in onRecvPacket

The ABI string has been updated to reflect the new output parameters for the onRecvPacket function, which now returns a tuple containing AckPacket and a bool skipAck. This change is correctly incorporated in the ABI.


378-397: Function OnRecvPacket updated with new return type

The OnRecvPacket function in RevertingStringMarsCaller has been updated to return a struct containing Ack and SkipAck, matching the updated ABI. The implementation correctly unpacks the returned values.


403-407: Function OnRecvPacket in RevertingStringMarsSession updated with new return type

The OnRecvPacket function in RevertingStringMarsSession now returns the updated struct with Ack and SkipAck. The change aligns with the updated ABI and is correctly implemented.


413-417: Function OnRecvPacket in RevertingStringMarsCallerSession updated with new return type

The OnRecvPacket function in RevertingStringMarsCallerSession now returns the updated struct with Ack and SkipAck. This is consistent with the changes in other related structs and matches the updated ABI.

src/evm/contracts/factories/Dispatcher__factory.ts (1)

Line range hint 1-2203: LGTM!

The updates to the _bytecode constant and the Dispatcher__factory class appropriately reflect the changes in the underlying smart contract. The factory is correctly configured to deploy and interact with the Dispatcher contract, and the code adheres to TypeScript best practices.

test/Dispatcher/Dispatcher.t.sol Show resolved Hide resolved
src/evm/contracts/factories/Mars.sol/Mars__factory.ts Outdated Show resolved Hide resolved
src/evm/contracts/Mars.sol/Mars.ts Show resolved Hide resolved
src/evm/contracts/Mars.sol/Mars.ts Show resolved Hide resolved
bindings/go/mars/Mars.go Show resolved Hide resolved
bindings/go/mars/Mars.go Show resolved Hide resolved
bindings/go/mars/Mars.go Show resolved Hide resolved
bindings/go/moon/Moon.go Show resolved Hide resolved
bindings/go/mars/RevertingEmptyMars.go Show resolved Hide resolved
@mvpoyatt mvpoyatt merged commit e4f5184 into main Sep 24, 2024
3 checks passed
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Outside diff range and nitpick comments (1)
bindings/go/mars/RevertingEmptyMars.go (1)

345-349: Session-specific OnRecvPacket implementations updated correctly.

The OnRecvPacket function implementations for both RevertingEmptyMarsSession and RevertingEmptyMarsCallerSession have been properly updated to include the new skipAck boolean return value. These changes ensure consistency with the main OnRecvPacket function modification.

For improved consistency, consider using the same named struct (if implemented as suggested earlier) across all these implementations.

Also applies to: 355-359

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 24b2ce5 and 04c1a61.

Files selected for processing (42)
  • bindings/go/earth/Earth.go (2 hunks)
  • bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go (2 hunks)
  • bindings/go/mars/Mars.go (2 hunks)
  • bindings/go/mars/PanickingMars.go (2 hunks)
  • bindings/go/mars/RevertingBytesMars.go (2 hunks)
  • bindings/go/mars/RevertingEmptyMars.go (2 hunks)
  • bindings/go/mars/RevertingStringCloseChannelMars.go (2 hunks)
  • bindings/go/mars/RevertingStringMars.go (2 hunks)
  • bindings/go/moon/Moon.go (2 hunks)
  • bindings/go/universalchannelhandler/UniversalChannelHandler.go (2 hunks)
  • contracts/base/GeneralMiddleware.sol (2 hunks)
  • contracts/core/Dispatcher.sol (1 hunks)
  • contracts/core/UniversalChannelHandler.sol (1 hunks)
  • contracts/examples/Earth.sol (1 hunks)
  • contracts/examples/Mars.sol (4 hunks)
  • contracts/examples/Pluto.sol (1 hunks)
  • contracts/interfaces/IbcMiddleware.sol (2 hunks)
  • contracts/interfaces/IbcReceiver.sol (1 hunks)
  • package.json (1 hunks)
  • src/evm/contracts/Earth.ts (2 hunks)
  • src/evm/contracts/IUniversalChannelHandler.ts (2 hunks)
  • src/evm/contracts/Mars.sol/Mars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/PanickingMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingBytesMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingEmptyMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts (2 hunks)
  • src/evm/contracts/Mars.sol/RevertingStringMars.ts (2 hunks)
  • src/evm/contracts/Moon.ts (2 hunks)
  • src/evm/contracts/UniversalChannelHandler.ts (2 hunks)
  • src/evm/contracts/factories/Dispatcher__factory.ts (1 hunks)
  • src/evm/contracts/factories/Earth__factory.ts (2 hunks)
  • src/evm/contracts/factories/IUniversalChannelHandler__factory.ts (1 hunks)
  • src/evm/contracts/factories/Mars.sol/Mars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts (2 hunks)
  • src/evm/contracts/factories/Moon__factory.ts (2 hunks)
  • src/evm/contracts/factories/UniversalChannelHandler__factory.ts (2 hunks)
  • test/Dispatcher/Dispatcher.t.sol (4 hunks)
  • test/mocks/GasUsingMars.sol (1 hunks)
Files skipped from review as they are similar to previous changes (39)
  • bindings/go/earth/Earth.go
  • bindings/go/iuniversalchannelhandler/IUniversalChannelHandler.go
  • bindings/go/mars/Mars.go
  • bindings/go/mars/PanickingMars.go
  • bindings/go/mars/RevertingStringCloseChannelMars.go
  • bindings/go/mars/RevertingStringMars.go
  • bindings/go/moon/Moon.go
  • bindings/go/universalchannelhandler/UniversalChannelHandler.go
  • contracts/base/GeneralMiddleware.sol
  • contracts/core/Dispatcher.sol
  • contracts/core/UniversalChannelHandler.sol
  • contracts/examples/Earth.sol
  • contracts/examples/Mars.sol
  • contracts/examples/Pluto.sol
  • contracts/interfaces/IbcMiddleware.sol
  • contracts/interfaces/IbcReceiver.sol
  • package.json
  • src/evm/contracts/Earth.ts
  • src/evm/contracts/IUniversalChannelHandler.ts
  • src/evm/contracts/Mars.sol/Mars.ts
  • src/evm/contracts/Mars.sol/PanickingMars.ts
  • src/evm/contracts/Mars.sol/RevertingBytesMars.ts
  • src/evm/contracts/Mars.sol/RevertingEmptyMars.ts
  • src/evm/contracts/Mars.sol/RevertingStringCloseChannelMars.ts
  • src/evm/contracts/Mars.sol/RevertingStringMars.ts
  • src/evm/contracts/Moon.ts
  • src/evm/contracts/UniversalChannelHandler.ts
  • src/evm/contracts/factories/Earth__factory.ts
  • src/evm/contracts/factories/IUniversalChannelHandler__factory.ts
  • src/evm/contracts/factories/Mars.sol/Mars__factory.ts
  • src/evm/contracts/factories/Mars.sol/PanickingMars__factory.ts
  • src/evm/contracts/factories/Mars.sol/RevertingBytesMars__factory.ts
  • src/evm/contracts/factories/Mars.sol/RevertingEmptyMars__factory.ts
  • src/evm/contracts/factories/Mars.sol/RevertingStringCloseChannelMars__factory.ts
  • src/evm/contracts/factories/Mars.sol/RevertingStringMars__factory.ts
  • src/evm/contracts/factories/Moon__factory.ts
  • src/evm/contracts/factories/UniversalChannelHandler__factory.ts
  • test/Dispatcher/Dispatcher.t.sol
  • test/mocks/GasUsingMars.sol
Additional comments not posted (10)
bindings/go/mars/RevertingEmptyMars.go (3)

62-62: ABI update for onRecvPacket function looks good.

The ABI string has been correctly updated to include the new skipAck boolean return value for the onRecvPacket function. This change accurately reflects the modification in the Solidity contract.


320-324: OnRecvPacket function signature updated correctly.

The OnRecvPacket function has been properly updated to include the new skipAck boolean return value. The changes are consistent with the modifications in the Solidity contract.

However, as mentioned in a previous comment, consider defining a named struct for the return type instead of using an anonymous struct. This would improve code readability and maintainability.

Also applies to: 328-331


Line range hint 1-1127: Overall, the changes look good and are consistently implemented.

The modifications to add the skipAck functionality to the OnRecvPacket function and its related methods have been successfully implemented. The changes are consistent across the ABI, function signatures, and different session implementations.

To further improve the code:

  1. Consider implementing a named struct for the return type of OnRecvPacket, as suggested in a previous comment.
  2. If a named struct is implemented, use it consistently across all implementations of OnRecvPacket.

These suggestions would enhance code readability and maintainability.

src/evm/contracts/factories/Dispatcher__factory.ts (1)

Line range hint 1-2092: LGTM for unchanged sections.

The rest of the file, including imports, type definitions, and factory methods, remains unchanged. This consistency is good, as it suggests the update was focused solely on the contract bytecode without affecting the TypeScript wrapper's structure.

Also applies to: 2094-2095

bindings/go/mars/RevertingBytesMars.go (6)

62-62: ABI updated to include the new output structure

The ABI at line 62 correctly reflects the updated output structure for the onRecvPacket function, now returning both an AckPacket and a bool skipAck.


320-324: Function signature updated to handle acknowledgment control

The OnRecvPacket function signature has been updated to return a struct containing Ack and SkipAck, enhancing control over acknowledgment processing.


328-333: Proper initialization and error handling of output struct

The output struct is correctly initialized, and the error handling ensures that an empty struct is returned alongside the error when err != nil.


336-337: Correct mapping of contract outputs to struct fields

The returned values from the contract call are correctly assigned to outstruct.Ack and outstruct.SkipAck.


345-349: Session method signature updated appropriately

The OnRecvPacket function in RevertingBytesMarsSession now correctly returns both AckPacket and SkipAck, matching the updated contract interface.


355-359: Caller session method signature updated appropriately

The OnRecvPacket function in RevertingBytesMarsCallerSession has been updated to return the new struct with Ack and SkipAck, ensuring consistent handling across sessions.

@@ -2090,7 +2090,7 @@ const _abi = [
] as const;

const _bytecode =
"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158656200011f60003960008181610c1f01528181610c68015281816113c201528181611402015261149501526158656000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b12f89be11610095578063c899e27211610064578063c899e2721461051e578063e30c39781461053e578063f2fde38b1461055c578063f90b8e961461057c57600080fd5b8063b12f89be14610486578063ba5a4d25146104a6578063c00fa7c0146104c6578063c3e1155c146104e657600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780639f59ae711461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613faf565b61059c565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b366004614085565b610926565b34801561024c57600080fd5b506101e761025b36600461412f565b610c15565b34801561026c57600080fd5b506101e761027b36600461418d565b610cfd565b34801561028c57600080fd5b506102a061029b36600461424e565b610db6565b6040516102179190614351565b3480156102b957600080fd5b506101e76102c8366004613faf565b61110e565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e76103143660046144a4565b6113b8565b34801561032557600080fd5b5061032e611488565b604051908152602001610217565b34801561034857600080fd5b506101e7610357366004614507565b61153b565b34801561036857600080fd5b506101e761037736600461456f565b611553565b34801561038857600080fd5b506101e761039736600461456f565b611863565b3480156103a857600080fd5b506101e76103b736600461456f565b611875565b3480156103c857600080fd5b506101e7611f67565b3480156103dd57600080fd5b506103e6611f7b565b60405161021791906145c8565b3480156103ff57600080fd5b506101e7612009565b34801561041457600080fd5b506101e76104233660046145fb565b612080565b34801561043457600080fd5b506101e761044336600461464c565b612209565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506101e7610481366004614665565b6122d1565b34801561049257600080fd5b5061032e6104a13660046146a6565b612326565b3480156104b257600080fd5b506101e76104c13660046146f1565b6123df565b3480156104d257600080fd5b506101e76104e1366004614665565b61291b565b3480156104f257600080fd5b50610506610501366004614795565b612957565b6040516001600160401b039091168152602001610217565b34801561052a57600080fd5b506101e76105393660046147f2565b612aab565b34801561054a57600080fd5b506065546001600160a01b03166102ee565b34801561056857600080fd5b506101e761057736600461412f565b612b56565b34801561058857600080fd5b506101e7610597366004614874565b612bc7565b6105a46131f4565b60028510156105c65760405163af0ba14d60e01b815260040160405180910390fd5b6105ec6105d388806148cc565b60208a01356105e286806148cc565b876020013561324d565b61064e8686600081811061060257610602614912565b905060200281019061061491906148cc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328892505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106818c806148cc565b8d602001356040518463ffffffff1660e01b81526004016106a493929190614951565b600060405180830381865af41580156106c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e991908101906149c5565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e806040019061071691906148cc565b8f8f6107228e806148cc565b8f602001356040518a63ffffffff1660e01b815260040161074b99989796959493929190614a4e565b600060405180830381865af4158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079091908101906149c5565b6040518463ffffffff1660e01b81526004016107ae93929190614b68565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b50600092506107f791506107f2905089806148cc565b613307565b9050600080610869836301d08fc560e71b6020808e01359089013561081f60408b018b6148cc565b6040516024016108329493929190614d16565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261339a565b9150915081156108ce57610882838b8b8b8b8b8b613486565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108c191815260200190565b60405180910390a2610910565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f8260405161090791906145c8565b60405180910390a25b50505061091d6001609755565b50505050505050565b61092e6131f4565b6002831461094f5760405163af0ba14d60e01b815260040160405180910390fd5b61095c6105d388806148cc565b6109728484600081811061060257610602614912565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109a58c806148cc565b8d602001356040518463ffffffff1660e01b81526004016109c893929190614951565b600060405180830381865af41580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906149c5565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a3a91906148cc565b8d8d610a468e806148cc565b8f602001356040518a63ffffffff1660e01b8152600401610a6f99989796959493929190614a4e565b600060405180830381865af4158015610a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab491908101906149c5565b6040518463ffffffff1660e01b8152600401610ad293929190614b68565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b5060009250610b1691506107f2905089806148cc565b9050600080610b6c83634bdb559760e01b8b8a8a8f602001358b8060000190610b3f91906148cc565b8d602001358e8060400190610b5491906148cc565b60405160240161083299989796959493929190614d86565b915091508115610bdc57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610bb59190614deb565b8b8b8b8b610bc38c806148cc565b8d602001356040516108c1989796959493929190614e33565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd8260405161090791906145c8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c665760405162461bcd60e51b8152600401610c5d90614e99565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610caf6000805160206157e9833981519152546001600160a01b031690565b6001600160a01b031614610cd55760405162461bcd60e51b8152600401610c5d90614ee5565b610cde81613726565b60408051600080825260208201909252610cfa9183919061372e565b50565b610d056131f4565b600283141580610d13575080155b15610d3157604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d535760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610d9a989796959493929190614f31565b60405180910390a2610dac6001609755565b5050505050505050565b610dfc6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e3990614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590614f91565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610ed957610ed96142d2565b6002811115610eea57610eea6142d2565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015610fd0578382906000526020600020018054610f4390614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6f90614f91565b8015610fbc5780601f10610f9157610100808354040283529160200191610fbc565b820191906000526020600020905b815481529060010190602001808311610f9f57829003601f168201915b505050505081526020019060010190610f24565b505050508152602001600382018054610fe890614f91565b80601f016020809104026020016040519081016040528092919081815260200182805461101490614f91565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b505050505081526020016004820154815260200160058201805461108490614f91565b80601f01602080910402602001604051908101604052809291908181526020018280546110b090614f91565b80156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505050505081525050905092915050565b6111166131f4565b60028510156111385760405163af0ba14d60e01b815260040160405180910390fd5b6111456105d388806148cc565b61115b8686600081811061060257610602614912565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361118e8c806148cc565b8d602001356040518463ffffffff1660e01b81526004016111b193929190614951565b600060405180830381865af41580156111ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f691908101906149c5565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e806040019061122391906148cc565b8f8f61122f8e806148cc565b8f602001356040518a63ffffffff1660e01b815260040161125899989796959493929190614a4e565b600060405180830381865af4158015611275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129d91908101906149c5565b6040518463ffffffff1660e01b81526004016112bb93929190614b68565b600060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50600092506112ff91506107f2905089806148cc565b90506000806113278363fad28a2460e01b8c6020013560405160240161083291815260200190565b91509150811561137f57611340838b8b8b8b8b8b613486565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108c191815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a8260405161090791906145c8565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114005760405162461bcd60e51b8152600401610c5d90614e99565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114496000805160206157e9833981519152546001600160a01b031690565b6001600160a01b03161461146f5760405162461bcd60e51b8152600401610c5d90614ee5565b61147882613726565b6114848282600161372e565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115285760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c5d565b506000805160206157e983398151915290565b611543613899565b61154e8383836138f3565b505050565b61155b6131f4565b61157461156b6020840184614fc5565b6020013561398e565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ba9190615047565b600060405180830381865af41580156115d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ff91908101906149c5565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611636908990600401615047565b602060405180830381865af4158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116779190615109565b60405160200161168991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116b693929190614b68565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006117078380602001906116fd9190614fc5565b6107f290806148cc565b6001600160a01b0381166000908152610100602090815260408220929350909190829061173690870187614fc5565b602001358152602001908152602001600020600085604001602081019061175d9190615122565b6001600160401b0316815260208101919091526040016000205460ff169050801561179b5760405163066c745760e01b815260040160405180910390fd5b6117c36117ae60e0860160c08701615122565b6117be60c0870160a08801615122565b613a59565b6117e0576040516312c9cc9f60e01b815260040160405180910390fd5b6117ed6020850185614fc5565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61182c6060880160408901615122565b6080880161184060e08a0160c08b01615122565b60405161184f9392919061513d565b60405180910390a350506114846001609755565b61186b6131f4565b6114846001609755565b61187d6131f4565b61188d61156b6020840184614fc5565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016118d39190615047565b600060405180830381865af41580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261191891908101906149c5565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da9061194f908990600401615047565b602060405180830381865af415801561196c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119909190615109565b6040516020016119a291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016119cf93929190614b68565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506000611a168380602001906116fd9190614fc5565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a4590870187614fc5565b6020013581526020019081526020016000206000856040016020810190611a6c9190615122565b6001600160401b0316815260208101919091526040016000205460ff1690508015611aaa5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611ad690880188614fc5565b6020013581526020019081526020016000206000866040016020810190611afd9190615122565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b4f90880188614fc5565b60209081013582528101919091526040016000206001015460ff166002811115611b7b57611b7b6142d2565b03611c7a576001600160a01b038216600090815260fd6020908152604082209190611ba890870187614fc5565b60209081013582528101919091526040908101600020546001600160401b031690611bd99060608701908701615122565b6001600160401b031614611c005760405163362a414d60e01b815260040160405180910390fd5b611c106060850160408601615122565b611c1b90600161516d565b6001600160a01b038316600090815260fd6020908152604082209190611c4390880188614fc5565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611c876020850185614fc5565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cc66060880160408901615122565b6040516001600160401b03909116815260200160405180910390a3611cf46117ae60e0860160c08701615122565b15611d7757611d066020850185614fc5565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d456060880160408901615122565b60808801611d5960e08a0160c08b01615122565b604051611d689392919061513d565b60405180910390a3505061186b565b604080518082019091526000815260606020820152600080611dac85634dcc0aa660e01b896040516024016108329190615257565b915091508115611dd15780806020019051810190611dca919061526a565b9250611de9565b60408051808201909152600081526020810182905292505b6001600160a01b0385166000908152610101602090815260408220908290611e13908b018b614fc5565b6020013581526020019081526020016000206000896040016020810190611e3a9190615122565b6001600160401b0316815260208101919091526040016000205460ff1690508015611e7857604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03861660009081526101016020908152604082206001929091611ea4908c018c614fc5565b60200135815260200190815260200160002060008a6040016020810190611ecb9190615122565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f0190890189614fc5565b602001356001600160a01b0387167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f4060608c0160408d01615122565b87604051611f4f929190615320565b60405180910390a35050505050506114846001609755565b611f6f613899565b611f796000613aa7565b565b60f98054611f8890614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054611fb490614f91565b80156120015780601f10611fd657610100808354040283529160200191612001565b820191906000526020600020905b815481529060010190602001808311611fe457829003601f168201915b505050505081565b60655433906001600160a01b031681146120775760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c5d565b610cfa81613aa7565b600054600290610100900460ff161580156120a2575060005460ff8083169116105b6121055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c5d565b6000805461ffff191660ff8316176101001790556121216131f4565b82516000036121435760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b03821661216a5760405163cbdd34cf60e01b815260040160405180910390fd5b612172613ac0565b61217a613aef565b60f96121868482615388565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6122116131f4565b61221a81613b1e565b33600090815260fb6020908152604080832084845290915281209061223f8282613e39565b60018201805461ffff1916905561225a600283016000613e73565b612268600383016000613e39565b60048201600090556005820160006122809190613e39565b505060008181526101036020526040812061229a91613e39565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610cfa6001609755565b6122d9613899565b60008190036122fb5760405163e8cf362360e01b815260040160405180910390fd5b60f9612308828483615447565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b600061236783838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328892505050565b6001600160a01b03166344c9af28856040518263ffffffff1660e01b815260040161239491815260200190565b602060405180830381865afa1580156123b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d59190615109565b90505b9392505050565b6123e76131f4565b60006123f66116fd8680614fc5565b905061240561156b8680614fc5565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b815260040161244b9190615047565b600060405180830381865af4158015612468573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261249091908101906149c5565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906124c9908b908b90600401615507565b602060405180830381865af41580156124e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061250a9190615109565b60405160200161251c91815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161254993929190614b68565b600060405180830381600087803b15801561256357600080fd5b505af1158015612577573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff602052604081208161259e8880614fc5565b60200135815260200190815260200160002060008760400160208101906125c59190615122565b6001600160401b0316815260208101919091526040016000205460ff169050806126025760405163ca89746b60e01b815260040160405180910390fd5b6000806126a184637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b815260040161264b929190615507565b600060405180830381865af4158015612668573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612690919081019061526a565b60405160240161083292919061551b565b9150915081156128c55760026001600160a01b038516600090815260fb60205260408120906126d08b80614fc5565b60209081013582528101919091526040016000206001015460ff1660028111156126fc576126fc6142d2565b036127f1576001600160a01b038416600090815260fe60205260408120906127248a80614fc5565b60209081013582528101919091526040908101600020546001600160401b0316906127559060608b01908b01615122565b6001600160401b03161461277c5760405163362a414d60e01b815260040160405180910390fd5b61278c6060890160408a01615122565b61279790600161516d565b6001600160a01b038516600090815260fe60205260408120906127ba8b80614fc5565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff60205260408120906128148a80614fc5565b602001358152602001908152602001600020600089604001602081019061283b9190615122565b6001600160401b031681526020810191909152604001600020805460ff191690556128668880614fc5565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16128a560608c0160408d01615122565b6040516001600160401b03909116815260200160405180910390a3612907565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc826040516128fe91906145c8565b60405180910390a25b505050506129156001609755565b50505050565b612923613899565b6101048282604051612936929190615540565b90815260405190819003602001902080546001600160a01b03191690555050565b60006129616131f4565b61296a85613b1e565b42826001600160401b0316116129935760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b0316908190036129d957604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612a1d90829061516d565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612a91908890889087908990615550565b60405180910390a3612aa36001609755565b949350505050565b612aea82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061328892505050565b6001600160a01b03166349ff245e878787876040518563ffffffff1660e01b8152600401612b1b9493929190615585565b600060405180830381600087803b158015612b3557600080fd5b505af1158015612b49573d6000803e3d6000fd5b505050505b505050505050565b612b5e613899565b606580546001600160a01b0383166001600160a01b03199091168117909155612b8f6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612bcf6131f4565b6001600160a01b038316612bf65760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c3290614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5e90614f91565b8015612cab5780601f10612c8057610100808354040283529160200191612cab565b820191906000526020600020905b815481529060010190602001808311612c8e57829003601f168201915b5050509183525050600182015460209091019060ff166002811115612cd257612cd26142d2565b6002811115612ce357612ce36142d2565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612dc9578382906000526020600020018054612d3c90614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612d6890614f91565b8015612db55780601f10612d8a57610100808354040283529160200191612db5565b820191906000526020600020905b815481529060010190602001808311612d9857829003601f168201915b505050505081526020019060010190612d1d565b505050508152602001600382018054612de190614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612e0d90614f91565b8015612e5a5780601f10612e2f57610100808354040283529160200191612e5a565b820191906000526020600020905b815481529060010190602001808311612e3d57829003601f168201915b5050505050815260200160048201548152602001600582018054612e7d90614f91565b80601f0160208091040260200160405190810160405280929190818152602001828054612ea990614f91565b8015612ef65780601f10612ecb57610100808354040283529160200191612ef6565b820191906000526020600020905b815481529060010190602001808311612ed957829003601f168201915b5050509190925250505060a0810151909150612f2557604051634d93b09d60e11b815260040160405180910390fd5b612f2e8361398e565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612f7a9291906155ac565b600060405180830381865af4158015612f97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fbf91908101906149c5565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a8956130159560099592949193909291906004016155ce565b600060405180830381865af4158015613032573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261305a91908101906149c5565b6040518463ffffffff1660e01b815260040161307893929190614b68565b600060405180830381600087803b15801561309257600080fd5b505af11580156130a6573d6000803e3d6000fd5b505050506000806130d686633f9fdbe460e01b8786608001518760a0015160405160240161083293929190615676565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506131098282613e39565b60018201805461ffff19169055613124600283016000613e73565b613132600383016000613e39565b600482016000905560058201600061314a9190613e39565b505060008581526101036020526040812061316491613e39565b81156131a55760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36131e7565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516131de91906145c8565b60405180910390a25b50505061154e6001609755565b6002609754036132465760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002609755565b841580613258575081155b80613261575083155b8061326a575080155b15612b4e57604051637d6ba8a560e01b815260040160405180910390fd5b600081516000036132b65760405163524e171160e01b81526020600482015260006024820152604401610c5d565b610104826040516132c7919061569f565b908152604051908190036020019020546001600160a01b0316905080613302578160405163036c4d8760e11b8152600401610c5d91906145c8565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061333c90859063ffffffff1681886156b1565b6040518363ffffffff1660e01b8152600401613359929190615507565b602060405180830381865af4158015613376573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d891906156db565b600060606001600160a01b0384163b6133e257505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b602082015260009061347f565b60005a9050846001600160a01b0316846040516133ff919061569f565b6000604051808303816000865af19150503d806000811461343c576040519150601f19603f3d011682016040523d82523d6000602084013e613441565b606091505b5090935091508215801561345f575061345b6040826156f8565b5a11155b1561347d5760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906134a191906148cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020018460028111156134ed576134ed6142d2565b81528315156020820152604001613504868861571a565b815260200161351383806148cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161356188806148cc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b83013584529091529020825190915081906135cb9082615388565b50602082015160018083018054909160ff19909116908360028111156135f3576135f36142d2565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613632916002840191602090910190613e91565b50608082015160038201906136479082615388565b5060a0820151600482015560c082015160058201906136669082615388565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe84528285209185529252822080549093161790915585908590816136ec576136ec614912565b90506020028101906136fe91906148cc565b60208089013560009081526101039091526040902091610dac919083615447565b6001609755565b610cfa613899565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137615761154e83613b59565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137bb575060408051601f3d908101601f191682019092526137b891810190615109565b60015b61381e5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c5d565b6000805160206157e9833981519152811461388d5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c5d565b5061154e838383613bf5565b6033546001600160a01b03163314611f795760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c5d565b600082900361391f5760405163524e171160e01b81526020600482015260006024820152604401610c5d565b6001600160a01b0381166139465760405163cbdd34cf60e01b815260040160405180910390fd5b80610104848460405161395a929190615540565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b60008181526101036020526040812080548291906139ab90614f91565b80601f01602080910402602001604051908101604052809291908181526020018280546139d790614f91565b8015613a245780601f106139f957610100808354040283529160200191613a24565b820191906000526020600020905b815481529060010190602001808311613a0757829003601f168201915b505050505090508051600003613a50576040516363b99a9d60e11b815260048101849052602401610c5d565b6123d881613288565b60006001600160401b03831615801590613a7c5750826001600160401b03164210155b806123d857506001600160401b038216158015906123d85750506001600160401b0316431015919050565b606580546001600160a01b0319169055610cfa81613c1a565b600054610100900460ff16613ae75760405162461bcd60e51b8152600401610c5d9061579d565b611f79613c6c565b600054610100900460ff16613b165760405162461bcd60e51b8152600401610c5d9061579d565b611f79613c9c565b33600090815260fb60209081526040808320848452909152902060040154610cfa57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613bc65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c5d565b6000805160206157e983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613bfe83613cc3565b600082511180613c0b5750805b1561154e576129158383613d03565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613c935760405162461bcd60e51b8152600401610c5d9061579d565b611f7933613aa7565b600054610100900460ff1661371f5760405162461bcd60e51b8152600401610c5d9061579d565b613ccc81613b59565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606123d88383604051806060016040528060278152602001615809602791396060600080856001600160a01b031685604051613d40919061569f565b600060405180830381855af49150503d8060008114613d7b576040519150601f19603f3d011682016040523d82523d6000602084013e613d80565b606091505b5091509150613d9186838387613d9b565b9695505050505050565b60608315613e0a578251600003613e03576001600160a01b0385163b613e035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c5d565b5081612aa3565b612aa38383815115613e1f5781518083602001fd5b8060405162461bcd60e51b8152600401610c5d91906145c8565b508054613e4590614f91565b6000825580601f10613e55575050565b601f016020900490600052602060002090810190610cfa9190613ee7565b5080546000825590600052602060002090810190610cfa9190613efc565b828054828255906000526020600020908101928215613ed7579160200282015b82811115613ed75782518290613ec79082615388565b5091602001919060010190613eb1565b50613ee3929150613efc565b5090565b5b80821115613ee35760008155600101613ee8565b80821115613ee3576000613f108282613e39565b50600101613efc565b600060608284031215613f2b57600080fd5b50919050565b60008083601f840112613f4357600080fd5b5081356001600160401b03811115613f5a57600080fd5b6020830191508360208260051b850101111561347f57600080fd5b80356003811061330257600080fd5b8015158114610cfa57600080fd5b803561330281613f84565b600060408284031215613f2b57600080fd5b600080600080600080600060c0888a031215613fca57600080fd5b87356001600160401b0380821115613fe157600080fd5b613fed8b838c01613f19565b985060208a013591508082111561400357600080fd5b61400f8b838c01613f31565b909850965086915061402360408b01613f75565b955061403160608b01613f92565b945060808a013591508082111561404757600080fd5b6140538b838c01613f19565b935060a08a013591508082111561406957600080fd5b506140768a828b01613f9d565b91505092959891949750929550565b600080600080600080600060c0888a0312156140a057600080fd5b87356001600160401b03808211156140b757600080fd5b6140c38b838c01613f19565b98506140d160208b01613f75565b97506140df60408b01613f92565b965060608a01359150808211156140f557600080fd5b6141018b838c01613f31565b909650945060808a013591508082111561404757600080fd5b6001600160a01b0381168114610cfa57600080fd5b60006020828403121561414157600080fd5b81356123d88161411a565b60008083601f84011261415e57600080fd5b5081356001600160401b0381111561417557600080fd5b60208301915083602082850101111561347f57600080fd5b60008060008060008060008060a0898b0312156141a957600080fd5b88356001600160401b03808211156141c057600080fd5b6141cc8c838d0161414c565b909a5098508891506141e060208c01613f75565b975060408b013591506141f282613f84565b90955060608a0135908082111561420857600080fd5b6142148c838d01613f31565b909650945060808b013591508082111561422d57600080fd5b5061423a8b828c0161414c565b999c989b5096995094979396929594505050565b6000806040838503121561426157600080fd5b823561426c8161411a565b946020939093013593505050565b60005b8381101561429557818101518382015260200161427d565b838111156129155750506000910152565b600081518084526142be81602086016020860161427a565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b600381106142f8576142f86142d2565b9052565b600081518084526020808501808196508360051b8101915082860160005b858110156143445782840389526143328483516142a6565b9885019893509084019060010161431a565b5091979650505050505050565b602081526000825160e0602084015261436e6101008401826142a6565b9050602084015161438260408501826142e8565b506040840151151560608401526060840151601f19808584030160808601526143ab83836142fc565b925060808601519150808584030160a08601526143c883836142a6565b925060a086015160c086015260c08601519150808584030160e0860152506143f082826142a6565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614437576144376143f9565b604052919050565b60006001600160401b03821115614458576144586143f9565b50601f01601f191660200190565b60006144796144748461443f565b61440f565b905082815283838301111561448d57600080fd5b828260208301376000602084830101529392505050565b600080604083850312156144b757600080fd5b82356144c28161411a565b915060208301356001600160401b038111156144dd57600080fd5b8301601f810185136144ee57600080fd5b6144fd85823560208401614466565b9150509250929050565b60008060006040848603121561451c57600080fd5b83356001600160401b0381111561453257600080fd5b61453e8682870161414c565b90945092505060208401356145528161411a565b809150509250925092565b600060e08284031215613f2b57600080fd5b6000806040838503121561458257600080fd5b82356001600160401b038082111561459957600080fd5b6145a58683870161455d565b935060208501359150808211156145bb57600080fd5b506144fd85828601613f9d565b6020815260006123d860208301846142a6565b600082601f8301126145ec57600080fd5b6123d883833560208501614466565b6000806040838503121561460e57600080fd5b82356001600160401b0381111561462457600080fd5b614630858286016145db565b92505060208301356146418161411a565b809150509250929050565b60006020828403121561465e57600080fd5b5035919050565b6000806020838503121561467857600080fd5b82356001600160401b0381111561468e57600080fd5b61469a8582860161414c565b90969095509350505050565b6000806000604084860312156146bb57600080fd5b8335925060208401356001600160401b038111156146d857600080fd5b6146e48682870161414c565b9497909650939450505050565b6000806000806060858703121561470757600080fd5b84356001600160401b038082111561471e57600080fd5b61472a8883890161455d565b9550602087013591508082111561474057600080fd5b61474c8883890161414c565b9095509350604087013591508082111561476557600080fd5b5061477287828801613f9d565b91505092959194509250565b80356001600160401b038116811461330257600080fd5b600080600080606085870312156147ab57600080fd5b8435935060208501356001600160401b038111156147c857600080fd5b6147d48782880161414c565b90945092506147e790506040860161477e565b905092959194509250565b6000806000806000806080878903121561480b57600080fd5b86356001600160401b038082111561482257600080fd5b61482e8a838b0161414c565b90985096506020890135955060408901359450606089013591508082111561485557600080fd5b5061486289828a0161414c565b979a9699509497509295939492505050565b60008060006060848603121561488957600080fd5b83356148948161411a565b92506020840135915060408401356001600160401b038111156148b657600080fd5b6148c286828701613f9d565b9150509250925092565b6000808335601e198436030181126148e357600080fd5b8301803591506001600160401b038211156148fd57600080fd5b60200191503681900382131561347f57600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000614965604083018587614928565b9050826020830152949350505050565b60006149836144748461443f565b905082815283838301111561499757600080fd5b6123d883602083018461427a565b600082601f8301126149b657600080fd5b6123d883835160208501614975565b6000602082840312156149d757600080fd5b81516001600160401b038111156149ed57600080fd5b612aa3848285016149a5565b600a81106142f8576142f86142d2565b6000808335601e19843603018112614a2057600080fd5b83016020810192503590506001600160401b03811115614a3f57600080fd5b80360382131561347f57600080fd5b614a58818b6149f9565b60006020614a688184018c6142e8565b60c06040840152614a7d60c084018a8c614928565b8381036060850152878152818101600589901b820183018a60005b8b811015614ad257848303601f19018452614ab3828e614a09565b614abe858284614928565b958801959450505090850190600101614a98565b50508581036080870152614ae781898b614928565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614b1857600080fd5b83016020810192503590506001600160401b03811115614b3757600080fd5b8060051b360382131561347f57600080fd5b60008235603e19833603018112614b5f57600080fd5b90910192915050565b6000606080835260a0808401614b7e8889614b01565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614cde578b830360bf19018452813536889003607e19018112614bc357600080fd5b87016080848101614bd48380614b01565b928752908290528b860191808c1b87018d0191908160005b82811015614c5c57898503609f19018652614c078285614b49565b614c118182614a09565b8e8852614c218f89018284614928565b9150506020614c3281840184614a09565b9350888303828a0152614c46838583614928565b9982019998505093909301925050600101614bec565b5050505060209150614c7082840184614a09565b87830384890152614c82838284614928565b92505050614c9288840184614a09565b8783038a890152614ca4838284614928565b92505050614cb48d840184614a09565b93508682038e880152614cc8828583614928565b9783019796505050929092019150600101614b9d565b505060208d013560808b015289810360208b0152614cfc818d6142a6565b97505050878603818901525050505050613d9181856142a6565b848152836020820152606060408201526000613d91606083018486614928565b81835260006020808501808196508560051b810191508460005b87811015614344578284038952614d678288614a09565b614d72868284614928565b9a87019a9550505090840190600101614d50565b614d90818b6142e8565b60c060208201526000614da760c083018a8c614d36565b8860408401528281036060840152614dc081888a614928565b905085608084015282810360a0840152614ddb818587614928565b9c9b505050505050505050505050565b600060208284031215614dfd57600080fd5b81516001600160401b03811115614e1357600080fd5b8201601f81018413614e2457600080fd5b612aa384825160208401614975565b60c081526000614e4660c083018b6142a6565b614e53602084018b6142e8565b88151560408401528281036060840152614e6e81888a614d36565b90508281036080840152614e83818688614928565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614f4560a083018a8c614928565b614f52602084018a6142e8565b87151560408401528281036060840152614f6d818789614d36565b90508281036080840152614f82818587614928565b9b9a5050505050505050505050565b600181811c90821680614fa557607f821691505b602082108103613f2b57634e487b7160e01b600052602260045260246000fd5b60008235603e19833603018112614fdb57600080fd5b9190910192915050565b6000614ff18283614a09565b60408552615003604086018284614928565b915050602083013560208501528091505092915050565b6001600160401b038061502c8361477e565b1683528061503c6020840161477e565b166020840152505050565b6020815260006150578384614b49565b60e0602084015261506c610100840182614fe5565b905061507b6020850185614b49565b601f19808584030160408601526150928383614fe5565b92506150a06040870161477e565b91506001600160401b0380831660608701526150bf6060880188614a09565b9350828786030160808801526150d6858583614928565b9450506150e960a087016080890161501a565b806150f660c0890161477e565b1660e08701525050508091505092915050565b60006020828403121561511b57600080fd5b5051919050565b60006020828403121561513457600080fd5b6123d88261477e565b6001600160401b038481168252608082019061515c602084018661501a565b808416606084015250949350505050565b60006001600160401b0380831681851680830382111561519d57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006151b28283614b49565b60e084526151c360e0850182614fe5565b90506151d26020840184614b49565b84820360208601526151e48282614fe5565b9150506151f36040840161477e565b6001600160401b0380821660408701526152106060860186614a09565b92508684036060880152615225848483614928565b935050615238608087016080870161501a565b8061524560c0870161477e565b1660c087015250508091505092915050565b6020815260006123d860208301846151a6565b60006020828403121561527c57600080fd5b81516001600160401b038082111561529357600080fd5b90830190604082860312156152a757600080fd5b6040516040810181811083821117156152c2576152c26143f9565b60405282516152d081613f84565b81526020830151828111156152e457600080fd5b6152f0878286016149a5565b60208301525095945050505050565b8051151582526000602082015160406020850152612aa360408501826142a6565b6001600160401b03831681526040602082015260006123d560408301846152ff565b601f82111561154e57600081815260208120601f850160051c810160208610156153695750805b601f850160051c820191505b81811015612b4e57828155600101615375565b81516001600160401b038111156153a1576153a16143f9565b6153b5816153af8454614f91565b84615342565b602080601f8311600181146153ea57600084156153d25750858301515b600019600386901b1c1916600185901b178555612b4e565b600085815260208120601f198616915b82811015615419578886015182559484019460019091019084016153fa565b50858210156154375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b0383111561545e5761545e6143f9565b6154728361546c8354614f91565b83615342565b6000601f8411600181146154a6576000851561548e5750838201355b600019600387901b1c1916600186901b178355615500565b600083815260209020601f19861690835b828110156154d757868501358255602094850194600190920191016154b7565b50868210156154f45760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020815260006123d5602083018486614928565b60408152600061552e60408301856151a6565b82810360208401526143f081856152ff565b8183823760009101908152919050565b606081526000615564606083018688614928565b6001600160401b039485166020840152929093166040909101529392505050565b606081526000615599606083018688614928565b6020830194909452506040015292915050565b6040815260006155bf60408301856142a6565b90508260208301529392505050565b6155d881886149f9565b600060206155e8818401896142e8565b60c060408401526155fc60c08401886142a6565b8381036060850152865180825282820190600581901b83018401848a0160005b8381101561564a57601f198684030185526156388383516142a6565b9487019492509086019060010161561c565b5050868103608088015261565e818a6142a6565b955050505050508260a0830152979650505050505050565b83815260606020820152600061568f60608301856142a6565b9050826040830152949350505050565b60008251614fdb81846020870161427a565b600080858511156156c157600080fd5b838611156156ce57600080fd5b5050820193919092039150565b6000602082840312156156ed57600080fd5b81516123d88161411a565b60008261571557634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b0380841115615734576157346143f9565b8360051b602061574581830161440f565b86815291850191818101903684111561575d57600080fd5b865b84811015615791578035868111156157775760008081fd5b61578336828b016145db565b84525091830191830161575f565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bf8a17eff072122ba44ed6aa283e975964c11923f10fd06add4b4e9ef36c245264736f6c634300080f0033";
"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e7565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e5576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6080516158d46200011f60003960008181610c1f01528181610c68015281816113c201528181611402015261149501526158d46000f3fe6080604052600436106101c25760003560e01c8063715018a6116100f7578063b12f89be11610095578063c899e27211610064578063c899e2721461051e578063e30c39781461053e578063f2fde38b1461055c578063f90b8e961461057c57600080fd5b8063b12f89be14610486578063ba5a4d25146104a6578063c00fa7c0146104c6578063c3e1155c146104e657600080fd5b80637ab4339d116100d15780637ab4339d1461040857806381bc079b146104285780638da5cb5b146104485780639f59ae711461046657600080fd5b8063715018a6146103bc5780637774a6d3146103d157806379ba5097146103f357600080fd5b8063478222c211610164578063556d51781161013e578063556d51781461033c5780635d7adf961461035c5780636050b5f31461037c5780636b67055e1461039c57600080fd5b8063478222c2146102cd5780634f1ef2861461030657806352d1902d1461031957600080fd5b80633659cfe6116101a05780633659cfe614610240578063418925b71461026057806342852d2414610280578063429446b6146102ad57600080fd5b80631eb9fc86146101c75780632494546b146101e95780632bf5d19d14610220575b600080fd5b3480156101d357600080fd5b506101e76101e2366004613fc6565b61059c565b005b3480156101f557600080fd5b5060fa546102069063ffffffff1681565b60405163ffffffff90911681526020015b60405180910390f35b34801561022c57600080fd5b506101e761023b36600461409c565b610926565b34801561024c57600080fd5b506101e761025b366004614146565b610c15565b34801561026c57600080fd5b506101e761027b3660046141a4565b610cfd565b34801561028c57600080fd5b506102a061029b366004614265565b610db6565b6040516102179190614365565b3480156102b957600080fd5b506101e76102c8366004613fc6565b61110e565b3480156102d957600080fd5b50610105546102ee906001600160a01b031681565b6040516001600160a01b039091168152602001610217565b6101e76103143660046144b8565b6113b8565b34801561032557600080fd5b5061032e611488565b604051908152602001610217565b34801561034857600080fd5b506101e761035736600461451b565b61153b565b34801561036857600080fd5b506101e7610377366004614583565b611553565b34801561038857600080fd5b506101e7610397366004614583565b611863565b3480156103a857600080fd5b506101e76103b7366004614583565b611875565b3480156103c857600080fd5b506101e7611f7e565b3480156103dd57600080fd5b506103e6611f92565b60405161021791906145dc565b3480156103ff57600080fd5b506101e7612020565b34801561041457600080fd5b506101e761042336600461460f565b612097565b34801561043457600080fd5b506101e7610443366004614660565b612220565b34801561045457600080fd5b506033546001600160a01b03166102ee565b34801561047257600080fd5b506101e7610481366004614679565b6122e8565b34801561049257600080fd5b5061032e6104a13660046146ba565b61233d565b3480156104b257600080fd5b506101e76104c1366004614705565b6123f6565b3480156104d257600080fd5b506101e76104e1366004614679565b612932565b3480156104f257600080fd5b506105066105013660046147a9565b61296e565b6040516001600160401b039091168152602001610217565b34801561052a57600080fd5b506101e7610539366004614806565b612ac2565b34801561054a57600080fd5b506065546001600160a01b03166102ee565b34801561056857600080fd5b506101e7610577366004614146565b612b6d565b34801561058857600080fd5b506101e7610597366004614888565b612bde565b6105a461320b565b60028510156105c65760405163af0ba14d60e01b815260040160405180910390fd5b6105ec6105d388806148e0565b60208a01356105e286806148e0565b8760200135613264565b61064e8686600081811061060257610602614926565b905060200281019061061491906148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36106818c806148e0565b8d602001356040518463ffffffff1660e01b81526004016106a493929190614965565b600060405180830381865af41580156106c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106e991908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60078a8e806040019061071691906148e0565b8f8f6107228e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161074b99989796959493929190614a62565b600060405180830381865af4158015610768573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261079091908101906149d9565b6040518463ffffffff1660e01b81526004016107ae93929190614b7c565b600060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b50600092506107f791506107f2905089806148e0565b61331e565b9050600080610869836301d08fc560e71b6020808e01359089013561081f60408b018b6148e0565b6040516024016108329493929190614d2a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526133b1565b9150915081156108ce57610882838b8b8b8b8b8b61349d565b826001600160a01b03167fcf8be9ab2b5edf8beb2c45abe8e0cc7646318ac19f6c3164ba2e19e93a8a32af8b602001356040516108c191815260200190565b60405180910390a2610910565b826001600160a01b03167f971a4433f5bff5f011728a4123aeeca4b5275ac20b013cf276e65510491ac26f8260405161090791906145dc565b60405180910390a25b50505061091d6001609755565b50505050505050565b61092e61320b565b6002831461094f5760405163af0ba14d60e01b815260040160405180910390fd5b61095c6105d388806148e0565b6109728484600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb36109a58c806148e0565b8d602001356040518463ffffffff1660e01b81526004016109c893929190614965565b600060405180830381865af41580156109e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a0d91908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60068c8e8060400190610a3a91906148e0565b8d8d610a468e806148e0565b8f602001356040518a63ffffffff1660e01b8152600401610a6f99989796959493929190614a62565b600060405180830381865af4158015610a8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ab491908101906149d9565b6040518463ffffffff1660e01b8152600401610ad293929190614b7c565b600060405180830381600087803b158015610aec57600080fd5b505af1158015610b00573d6000803e3d6000fd5b5060009250610b1691506107f2905089806148e0565b9050600080610b6c83634bdb559760e01b8b8a8a8f602001358b8060000190610b3f91906148e0565b8d602001358e8060400190610b5491906148e0565b60405160240161083299989796959493929190614d97565b915091508115610bdc57826001600160a01b03167ff910705a7a768eb5958f281a5f84cae8bffc5dd811ca5cd303dda140a423698c82806020019051810190610bb59190614dfc565b8b8b8b8b610bc38c806148e0565b8d602001356040516108c1989796959493929190614e44565b826001600160a01b03167f9e2fe55a3b54b57f82334c273f8d048cd7f05ad19c16cf334276a8c1fec4b6fd8260405161090791906145dc565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c665760405162461bcd60e51b8152600401610c5d90614eaa565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610caf600080516020615858833981519152546001600160a01b031690565b6001600160a01b031614610cd55760405162461bcd60e51b8152600401610c5d90614ef6565b610cde8161373d565b60408051600080825260208201909252610cfa91839190613745565b50565b610d0561320b565b600283141580610d13575080155b15610d3157604051637d6ba8a560e01b815260040160405180910390fd5b6000879003610d535760405163f61bbcf360e01b815260040160405180910390fd5b336001600160a01b03167f20fd8a5856711b18d00def4aa6abafbe00ce6d60795e015cc1cad35eb9b463598989898989898989604051610d9a989796959493929190614f42565b60405180910390a2610dac6001609755565b5050505050505050565b610dfc6040805160e08101909152606081526020810160008152602001600015158152602001606081526020016060815260200160008019168152602001606081525090565b6001600160a01b038316600090815260fb6020908152604080832085845290915290819020815160e08101909252805482908290610e3990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6590614fa2565b8015610eb25780601f10610e8757610100808354040283529160200191610eb2565b820191906000526020600020905b815481529060010190602001808311610e9557829003601f168201915b5050509183525050600182015460209091019060ff166002811115610ed957610ed96142e9565b6002811115610eea57610eea6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015610fd0578382906000526020600020018054610f4390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6f90614fa2565b8015610fbc5780601f10610f9157610100808354040283529160200191610fbc565b820191906000526020600020905b815481529060010190602001808311610f9f57829003601f168201915b505050505081526020019060010190610f24565b505050508152602001600382018054610fe890614fa2565b80601f016020809104026020016040519081016040528092919081815260200182805461101490614fa2565b80156110615780601f1061103657610100808354040283529160200191611061565b820191906000526020600020905b81548152906001019060200180831161104457829003601f168201915b505050505081526020016004820154815260200160058201805461108490614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546110b090614fa2565b80156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505050505081525050905092915050565b61111661320b565b60028510156111385760405163af0ba14d60e01b815260040160405180910390fd5b6111456105d388806148e0565b61115b8686600081811061060257610602614926565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634f9b0fb361118e8c806148e0565b8d602001356040518463ffffffff1660e01b81526004016111b193929190614965565b600060405180830381865af41580156111ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111f691908101906149d9565b73__$d825222459c46c14afb2efe0967c30e98d$__6325e0dd0e60088a8e806040019061122391906148e0565b8f8f61122f8e806148e0565b8f602001356040518a63ffffffff1660e01b815260040161125899989796959493929190614a62565b600060405180830381865af4158015611275573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261129d91908101906149d9565b6040518463ffffffff1660e01b81526004016112bb93929190614b7c565b600060405180830381600087803b1580156112d557600080fd5b505af11580156112e9573d6000803e3d6000fd5b50600092506112ff91506107f2905089806148e0565b90506000806113278363fad28a2460e01b8c6020013560405160240161083291815260200190565b91509150811561137f57611340838b8b8b8b8b8b61349d565b826001600160a01b03167fe80f571f70f7cabf9d7ac60ece08421be374117776c311c327a083ca398f802f8b602001356040516108c191815260200190565b826001600160a01b03167ff6a58ef30f66943749e8c29c661c84da143a1c8ed017f5faa92b509e0000875a8260405161090791906145dc565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036114005760405162461bcd60e51b8152600401610c5d90614eaa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611449600080516020615858833981519152546001600160a01b031690565b6001600160a01b03161461146f5760405162461bcd60e51b8152600401610c5d90614ef6565b6114788261373d565b61148482826001613745565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115285760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610c5d565b5060008051602061585883398151915290565b6115436138b0565b61154e83838361390a565b505050565b61155b61320b565b61157461156b6020840184614fd6565b602001356139a5565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016115ba9190615058565b600060405180830381865af41580156115d7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115ff91908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da90611636908990600401615058565b602060405180830381865af4158015611653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611677919061511a565b60405160200161168991815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016116b693929190614b7c565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b5050505060006117078380602001906116fd9190614fd6565b6107f290806148e0565b6001600160a01b0381166000908152610100602090815260408220929350909190829061173690870187614fd6565b602001358152602001908152602001600020600085604001602081019061175d9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050801561179b5760405163066c745760e01b815260040160405180910390fd5b6117c36117ae60e0860160c08701615133565b6117be60c0870160a08801615133565b613a70565b6117e0576040516312c9cc9f60e01b815260040160405180910390fd5b6117ed6020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc61182c6060880160408901615133565b6080880161184060e08a0160c08b01615133565b60405161184f9392919061514e565b60405180910390a350506114846001609755565b61186b61320b565b6114846001609755565b61187d61320b565b61188d61156b6020840184614fd6565b6001600160a01b031663cb535ab58273__$d825222459c46c14afb2efe0967c30e98d$__634b5728d1866040518263ffffffff1660e01b81526004016118d39190615058565b600060405180830381865af41580156118f0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261191891908101906149d9565b604051637e4794ed60e11b815273__$d825222459c46c14afb2efe0967c30e98d$__9063fc8f29da9061194f908990600401615058565b602060405180830381865af415801561196c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611990919061511a565b6040516020016119a291815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b81526004016119cf93929190614b7c565b600060405180830381600087803b1580156119e957600080fd5b505af11580156119fd573d6000803e3d6000fd5b505050506000611a168380602001906116fd9190614fd6565b6001600160a01b03811660009081526101006020908152604082209293509091908290611a4590870187614fd6565b6020013581526020019081526020016000206000856040016020810190611a6c9190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611aaa5760405163066c745760e01b815260040160405180910390fd5b6001600160a01b03821660009081526101006020908152604082206001929091611ad690880188614fd6565b6020013581526020019081526020016000206000866040016020810190611afd9190615133565b6001600160401b031681526020810191909152604001600020805460ff191691151591909117905560026001600160a01b038316600090815260fb6020908152604082209190611b4f90880188614fd6565b60209081013582528101919091526040016000206001015460ff166002811115611b7b57611b7b6142e9565b03611c7a576001600160a01b038216600090815260fd6020908152604082209190611ba890870187614fd6565b60209081013582528101919091526040908101600020546001600160401b031690611bd99060608701908701615133565b6001600160401b031614611c005760405163362a414d60e01b815260040160405180910390fd5b611c106060850160408601615133565b611c1b90600161517e565b6001600160a01b038316600090815260fd6020908152604082209190611c4390880188614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b611c876020850185614fd6565b602001356001600160a01b0383167fde5b57e6566d68a30b0979431df3d5df6db3b9aa89f8820f595b9315bf86d067611cc66060880160408901615133565b6040516001600160401b03909116815260200160405180910390a3611cf46117ae60e0860160c08701615133565b15611d7757611d066020850185614fd6565b602001356001600160a01b0383167fedbcd9eeb09d85c3ea1b5bf002c04478059cb261cab82c903885cefccae374bc611d456060880160408901615133565b60808801611d5960e08a0160c08b01615133565b604051611d689392919061514e565b60405180910390a3505061186b565b6040805180820190915260008152606060208201526000806000611dae86634dcc0aa660e01b8a6040516024016108329190615268565b915091508115611de75780806020019051810190611dcc91906152f4565b90945092508215611de25750505050505061186b565b611dff565b60408051808201909152600081526020810182905293505b6001600160a01b0386166000908152610101602090815260408220908290611e29908c018c614fd6565b60200135815260200190815260200160002060008a6040016020810190611e509190615133565b6001600160401b0316815260208101919091526040016000205460ff1690508015611e8e57604051637aa549d360e01b815260040160405180910390fd5b6001600160a01b03871660009081526101016020908152604082206001929091611eba908d018d614fd6565b60200135815260200190815260200160002060008b6040016020810190611ee19190615133565b6001600160401b03168152602080820192909252604001600020805460ff191692151592909217909155611f17908a018a614fd6565b602001356001600160a01b0388167fa32e6f42b1d63fb83ad73b009a6dbb9413d1da02e95b1bb08f081815eea8db20611f5660608d0160408e01615133565b88604051611f6592919061535b565b60405180910390a3505050505050506114846001609755565b611f866138b0565b611f906000613abe565b565b60f98054611f9f90614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fcb90614fa2565b80156120185780601f10611fed57610100808354040283529160200191612018565b820191906000526020600020905b815481529060010190602001808311611ffb57829003601f168201915b505050505081565b60655433906001600160a01b0316811461208e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610c5d565b610cfa81613abe565b600054600290610100900460ff161580156120b9575060005460ff8083169116105b61211c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610c5d565b6000805461ffff191660ff83161761010017905561213861320b565b825160000361215a5760405163e8cf362360e01b815260040160405180910390fd5b6001600160a01b0382166121815760405163cbdd34cf60e01b815260040160405180910390fd5b612189613ad7565b612191613b06565b60f961219d84826153c3565b50825160fa805463ffffffff191663ffffffff90921691909117905561010580546001600160a01b0319166001600160a01b03841617905560016097556000805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61222861320b565b61223181613b35565b33600090815260fb602090815260408083208484529091528120906122568282613e50565b60018201805461ffff19169055612271600283016000613e8a565b61227f600383016000613e50565b60048201600090556005820160006122979190613e50565b50506000818152610103602052604081206122b191613e50565b604051819033907f21372e37743553ba8e5f61239803174a827c7732d53ec8adcb76c6b3bb2c13f190600090a3610cfa6001609755565b6122f06138b0565b60008190036123125760405163e8cf362360e01b815260040160405180910390fd5b60f961231f828483615482565b5060fa805463ffffffff191663ffffffff9290921691909117905550565b600061237e83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166344c9af28856040518263ffffffff1660e01b81526004016123ab91815260200190565b602060405180830381865afa1580156123c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ec919061511a565b90505b9392505050565b6123fe61320b565b600061240d6116fd8680614fd6565b905061241c61156b8680614fd6565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__6311a7a373896040518263ffffffff1660e01b81526004016124629190615058565b600060405180830381865af415801561247f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124a791908101906149d9565b6040516374e9704560e01b815273__$d825222459c46c14afb2efe0967c30e98d$__906374e97045906124e0908b908b90600401615542565b602060405180830381865af41580156124fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612521919061511a565b60405160200161253391815260200190565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161256093929190614b7c565b600060405180830381600087803b15801561257a57600080fd5b505af115801561258e573d6000803e3d6000fd5b505050506001600160a01b038116600090815260ff60205260408120816125b58880614fd6565b60200135815260200190815260200160002060008760400160208101906125dc9190615133565b6001600160401b0316815260208101919091526040016000205460ff169050806126195760405163ca89746b60e01b815260040160405180910390fd5b6000806126b884637e1d42b560e01b8a73__$d825222459c46c14afb2efe0967c30e98d$__63360b8cd78c8c6040518363ffffffff1660e01b8152600401612662929190615542565b600060405180830381865af415801561267f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126a79190810190615556565b60405160240161083292919061558a565b9150915081156128dc5760026001600160a01b038516600090815260fb60205260408120906126e78b80614fd6565b60209081013582528101919091526040016000206001015460ff166002811115612713576127136142e9565b03612808576001600160a01b038416600090815260fe602052604081209061273b8a80614fd6565b60209081013582528101919091526040908101600020546001600160401b03169061276c9060608b01908b01615133565b6001600160401b0316146127935760405163362a414d60e01b815260040160405180910390fd5b6127a36060890160408a01615133565b6127ae90600161517e565b6001600160a01b038516600090815260fe60205260408120906127d18b80614fd6565b60200135815260200190815260200160002060006101000a8154816001600160401b0302191690836001600160401b031602179055505b6001600160a01b038416600090815260ff602052604081209061282b8a80614fd6565b60200135815260200190815260200160002060008960400160208101906128529190615133565b6001600160401b031681526020810191909152604001600020805460ff1916905561287d8880614fd6565b602001356001600160a01b0385167fe46f6591236abe528fe47a3b281fb002524dadd3e62b1f317ed285d07273c3b16128bc60608c0160408d01615133565b6040516001600160401b03909116815260200160405180910390a361291e565b836001600160a01b03167f625eea143c9dae6915c809da47016c22d9cd006c3ace7c345c5cbcf57d3aefbc8260405161291591906145dc565b60405180910390a25b5050505061292c6001609755565b50505050565b61293a6138b0565b610104828260405161294d9291906155af565b90815260405190819003602001902080546001600160a01b03191690555050565b600061297861320b565b61298185613b35565b42826001600160401b0316116129aa5760405163551ea0fb60e11b815260040160405180910390fd5b5033600090815260fc602090815260408083208784529091528120546001600160401b0316908190036129f057604051631e510bfb60e21b815260040160405180910390fd5b33600090815260ff6020908152604080832088845282528083206001600160401b03851684529091529020805460ff19166001908117909155612a3490829061517e565b33600081815260fc602090815260408083208a845290915290819020805467ffffffffffffffff19166001600160401b03949094169390931790925590518691907fb5bff96e18da044e4e34510d16df9053b9f1920f6a960732e5aaf22fe9b8013690612aa89088908890879089906155bf565b60405180910390a3612aba6001609755565b949350505050565b612b0182828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061329f92505050565b6001600160a01b03166349ff245e878787876040518563ffffffff1660e01b8152600401612b3294939291906155f4565b600060405180830381600087803b158015612b4c57600080fd5b505af1158015612b60573d6000803e3d6000fd5b505050505b505050505050565b612b756138b0565b606580546001600160a01b0383166001600160a01b03199091168117909155612ba66033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b612be661320b565b6001600160a01b038316612c0d5760405163cbdd34cf60e01b815260040160405180910390fd5b6001600160a01b038316600090815260fb60209081526040808320858452909152808220815160e08101909252805482908290612c4990614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612c7590614fa2565b8015612cc25780601f10612c9757610100808354040283529160200191612cc2565b820191906000526020600020905b815481529060010190602001808311612ca557829003601f168201915b5050509183525050600182015460209091019060ff166002811115612ce957612ce96142e9565b6002811115612cfa57612cfa6142e9565b81526001820154610100900460ff161515602080830191909152600283018054604080518285028101850182528281529401939260009084015b82821015612de0578382906000526020600020018054612d5390614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7f90614fa2565b8015612dcc5780601f10612da157610100808354040283529160200191612dcc565b820191906000526020600020905b815481529060010190602001808311612daf57829003601f168201915b505050505081526020019060010190612d34565b505050508152602001600382018054612df890614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612e2490614fa2565b8015612e715780601f10612e4657610100808354040283529160200191612e71565b820191906000526020600020905b815481529060010190602001808311612e5457829003601f168201915b5050505050815260200160048201548152602001600582018054612e9490614fa2565b80601f0160208091040260200160405190810160405280929190818152602001828054612ec090614fa2565b8015612f0d5780601f10612ee257610100808354040283529160200191612f0d565b820191906000526020600020905b815481529060010190602001808311612ef057829003601f168201915b5050509190925250505060a0810151909150612f3c57604051634d93b09d60e11b815260040160405180910390fd5b612f45836139a5565b6001600160a01b031663cb535ab58373__$d825222459c46c14afb2efe0967c30e98d$__636f6547268560c00151886040518363ffffffff1660e01b8152600401612f9192919061561b565b600060405180830381865af4158015612fae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fd691908101906149d9565b602085015185516060870151608088015160a0890151604051631f621e1560e31b815273__$d825222459c46c14afb2efe0967c30e98d$__9563fb10f0a89561302c95600995929491939092919060040161563d565b600060405180830381865af4158015613049573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261307191908101906149d9565b6040518463ffffffff1660e01b815260040161308f93929190614b7c565b600060405180830381600087803b1580156130a957600080fd5b505af11580156130bd573d6000803e3d6000fd5b505050506000806130ed86633f9fdbe460e01b8786608001518760a00151604051602401610832939291906156e5565b6001600160a01b038816600090815260fb602090815260408083208a845290915281209294509092506131208282613e50565b60018201805461ffff1916905561313b600283016000613e8a565b613149600383016000613e50565b60048201600090556005820160006131619190613e50565b505060008581526101036020526040812061317b91613e50565b81156131bc5760405185906001600160a01b038816907f5f010dbbd6bf46aec8131c5456301a75cd688d3cca9bc8380c9e26301be2072990600090a36131fe565b856001600160a01b03167fc9d36d7a317cb116925d5cb66f0069fe825822fe23e9cf3f421c38cf444caa30826040516131f591906145dc565b60405180910390a25b50505061154e6001609755565b60026097540361325d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c5d565b6002609755565b84158061326f575081155b80613278575083155b80613281575080155b15612b6557604051637d6ba8a560e01b815260040160405180910390fd5b600081516000036132cd5760405163524e171160e01b81526020600482015260006024820152604401610c5d565b610104826040516132de919061570e565b908152604051908190036020019020546001600160a01b0316905080613319578160405163036c4d8760e11b8152600401610c5d91906145dc565b919050565b60fa5460009073__$f61eb90c6f674e787d51c07f105fa231e2$__9063a1ef9a989061335390859063ffffffff168188615720565b6040518363ffffffff1660e01b8152600401613370929190615542565b602060405180830381865af415801561338d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef919061574a565b600060606001600160a01b0384163b6133f957505060408051808201909152601481527318d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b6020820152600090613496565b60005a9050846001600160a01b031684604051613416919061570e565b6000604051808303816000865af19150503d8060008114613453576040519150601f19603f3d011682016040523d82523d6000602084013e613458565b606091505b509093509150821580156134765750613472604082615767565b5a11155b156134945760405163b08ede0960e01b815260040160405180910390fd5b505b9250929050565b6040518060e001604052808780604001906134b891906148e0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001846002811115613504576135046142e9565b8152831515602082015260400161351b8688615789565b815260200161352a83806148e0565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050908252506020838101359082015260400161357888806148e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038a16815260fb602090815260408083208b83013584529091529020825190915081906135e290826153c3565b50602082015160018083018054909160ff199091169083600281111561360a5761360a6142e9565b021790555060408201516001820180549115156101000261ff001990921691909117905560608201518051613649916002840191602090910190613ea8565b506080820151600382019061365e90826153c3565b5060a0820151600482015560c0820151600582019061367d90826153c3565b5050506001600160a01b038716600081815260fc602090815260408083208a8301358085529083528184208054600167ffffffffffffffff19918216811790925586865260fd85528386208387528552838620805482168317905595855260fe845282852091855292528220805490931617909155859085908161370357613703614926565b905060200281019061371591906148e0565b60208089013560009081526101039091526040902091610dac919083615482565b6001609755565b610cfa6138b0565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156137785761154e83613b70565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156137d2575060408051601f3d908101601f191682019092526137cf9181019061511a565b60015b6138355760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610c5d565b60008051602061585883398151915281146138a45760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610c5d565b5061154e838383613c0c565b6033546001600160a01b03163314611f905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c5d565b60008290036139365760405163524e171160e01b81526020600482015260006024820152604401610c5d565b6001600160a01b03811661395d5760405163cbdd34cf60e01b815260040160405180910390fd5b8061010484846040516139719291906155af565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b60008181526101036020526040812080548291906139c290614fa2565b80601f01602080910402602001604051908101604052809291908181526020018280546139ee90614fa2565b8015613a3b5780601f10613a1057610100808354040283529160200191613a3b565b820191906000526020600020905b815481529060010190602001808311613a1e57829003601f168201915b505050505090508051600003613a67576040516363b99a9d60e11b815260048101849052602401610c5d565b6123ef8161329f565b60006001600160401b03831615801590613a935750826001600160401b03164210155b806123ef57506001600160401b038216158015906123ef5750506001600160401b0316431015919050565b606580546001600160a01b0319169055610cfa81613c31565b600054610100900460ff16613afe5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613c83565b600054610100900460ff16613b2d5760405162461bcd60e51b8152600401610c5d9061580c565b611f90613cb3565b33600090815260fb60209081526040808320848452909152902060040154610cfa57604051631109bfb360e31b815260040160405180910390fd5b6001600160a01b0381163b613bdd5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610c5d565b60008051602061585883398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b613c1583613cda565b600082511180613c225750805b1561154e5761292c8383613d1a565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16613caa5760405162461bcd60e51b8152600401610c5d9061580c565b611f9033613abe565b600054610100900460ff166137365760405162461bcd60e51b8152600401610c5d9061580c565b613ce381613b70565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606123ef8383604051806060016040528060278152602001615878602791396060600080856001600160a01b031685604051613d57919061570e565b600060405180830381855af49150503d8060008114613d92576040519150601f19603f3d011682016040523d82523d6000602084013e613d97565b606091505b5091509150613da886838387613db2565b9695505050505050565b60608315613e21578251600003613e1a576001600160a01b0385163b613e1a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c5d565b5081612aba565b612aba8383815115613e365781518083602001fd5b8060405162461bcd60e51b8152600401610c5d91906145dc565b508054613e5c90614fa2565b6000825580601f10613e6c575050565b601f016020900490600052602060002090810190610cfa9190613efe565b5080546000825590600052602060002090810190610cfa9190613f13565b828054828255906000526020600020908101928215613eee579160200282015b82811115613eee5782518290613ede90826153c3565b5091602001919060010190613ec8565b50613efa929150613f13565b5090565b5b80821115613efa5760008155600101613eff565b80821115613efa576000613f278282613e50565b50600101613f13565b600060608284031215613f4257600080fd5b50919050565b60008083601f840112613f5a57600080fd5b5081356001600160401b03811115613f7157600080fd5b6020830191508360208260051b850101111561349657600080fd5b80356003811061331957600080fd5b8015158114610cfa57600080fd5b803561331981613f9b565b600060408284031215613f4257600080fd5b600080600080600080600060c0888a031215613fe157600080fd5b87356001600160401b0380821115613ff857600080fd5b6140048b838c01613f30565b985060208a013591508082111561401a57600080fd5b6140268b838c01613f48565b909850965086915061403a60408b01613f8c565b955061404860608b01613fa9565b945060808a013591508082111561405e57600080fd5b61406a8b838c01613f30565b935060a08a013591508082111561408057600080fd5b5061408d8a828b01613fb4565b91505092959891949750929550565b600080600080600080600060c0888a0312156140b757600080fd5b87356001600160401b03808211156140ce57600080fd5b6140da8b838c01613f30565b98506140e860208b01613f8c565b97506140f660408b01613fa9565b965060608a013591508082111561410c57600080fd5b6141188b838c01613f48565b909650945060808a013591508082111561405e57600080fd5b6001600160a01b0381168114610cfa57600080fd5b60006020828403121561415857600080fd5b81356123ef81614131565b60008083601f84011261417557600080fd5b5081356001600160401b0381111561418c57600080fd5b60208301915083602082850101111561349657600080fd5b60008060008060008060008060a0898b0312156141c057600080fd5b88356001600160401b03808211156141d757600080fd5b6141e38c838d01614163565b909a5098508891506141f760208c01613f8c565b975060408b0135915061420982613f9b565b90955060608a0135908082111561421f57600080fd5b61422b8c838d01613f48565b909650945060808b013591508082111561424457600080fd5b506142518b828c01614163565b999c989b5096995094979396929594505050565b6000806040838503121561427857600080fd5b823561428381614131565b946020939093013593505050565b60005b838110156142ac578181015183820152602001614294565b8381111561292c5750506000910152565b600081518084526142d5816020860160208601614291565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b6003811061430f5761430f6142e9565b9052565b6000815180845260208085019450848260051b860182860160005b858110156143585783830389526143468383516142bd565b9885019892509084019060010161432e565b5090979650505050505050565b602081526000825160e060208401526143826101008401826142bd565b9050602084015161439660408501826142ff565b506040840151151560608401526060840151601f19808584030160808601526143bf8383614313565b925060808601519150808584030160a08601526143dc83836142bd565b925060a086015160c086015260c08601519150808584030160e08601525061440482826142bd565b95945050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561444b5761444b61440d565b604052919050565b60006001600160401b0382111561446c5761446c61440d565b50601f01601f191660200190565b600061448d61448884614453565b614423565b90508281528383830111156144a157600080fd5b828260208301376000602084830101529392505050565b600080604083850312156144cb57600080fd5b82356144d681614131565b915060208301356001600160401b038111156144f157600080fd5b8301601f8101851361450257600080fd5b6145118582356020840161447a565b9150509250929050565b60008060006040848603121561453057600080fd5b83356001600160401b0381111561454657600080fd5b61455286828701614163565b909450925050602084013561456681614131565b809150509250925092565b600060e08284031215613f4257600080fd5b6000806040838503121561459657600080fd5b82356001600160401b03808211156145ad57600080fd5b6145b986838701614571565b935060208501359150808211156145cf57600080fd5b5061451185828601613fb4565b6020815260006123ef60208301846142bd565b600082601f83011261460057600080fd5b6123ef8383356020850161447a565b6000806040838503121561462257600080fd5b82356001600160401b0381111561463857600080fd5b614644858286016145ef565b925050602083013561465581614131565b809150509250929050565b60006020828403121561467257600080fd5b5035919050565b6000806020838503121561468c57600080fd5b82356001600160401b038111156146a257600080fd5b6146ae85828601614163565b90969095509350505050565b6000806000604084860312156146cf57600080fd5b8335925060208401356001600160401b038111156146ec57600080fd5b6146f886828701614163565b9497909650939450505050565b6000806000806060858703121561471b57600080fd5b84356001600160401b038082111561473257600080fd5b61473e88838901614571565b9550602087013591508082111561475457600080fd5b61476088838901614163565b9095509350604087013591508082111561477957600080fd5b5061478687828801613fb4565b91505092959194509250565b80356001600160401b038116811461331957600080fd5b600080600080606085870312156147bf57600080fd5b8435935060208501356001600160401b038111156147dc57600080fd5b6147e887828801614163565b90945092506147fb905060408601614792565b905092959194509250565b6000806000806000806080878903121561481f57600080fd5b86356001600160401b038082111561483657600080fd5b6148428a838b01614163565b90985096506020890135955060408901359450606089013591508082111561486957600080fd5b5061487689828a01614163565b979a9699509497509295939492505050565b60008060006060848603121561489d57600080fd5b83356148a881614131565b92506020840135915060408401356001600160401b038111156148ca57600080fd5b6148d686828701613fb4565b9150509250925092565b6000808335601e198436030181126148f757600080fd5b8301803591506001600160401b0382111561491157600080fd5b60200191503681900382131561349657600080fd5b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60408152600061497960408301858761493c565b9050826020830152949350505050565b600061499761448884614453565b90508281528383830111156149ab57600080fd5b6123ef836020830184614291565b600082601f8301126149ca57600080fd5b6123ef83835160208501614989565b6000602082840312156149eb57600080fd5b81516001600160401b03811115614a0157600080fd5b612aba848285016149b9565b600a811061430f5761430f6142e9565b6000808335601e19843603018112614a3457600080fd5b83016020810192503590506001600160401b03811115614a5357600080fd5b80360382131561349657600080fd5b614a6c818b614a0d565b60006020614a7c8184018c6142ff565b60c06040840152614a9160c084018a8c61493c565b8381036060850152878152818101600589901b820183018a60005b8b811015614ae657848303601f19018452614ac7828e614a1d565b614ad285828461493c565b958801959450505090850190600101614aac565b50508581036080870152614afb81898b61493c565b9450505050508260a08301529a9950505050505050505050565b6000808335601e19843603018112614b2c57600080fd5b83016020810192503590506001600160401b03811115614b4b57600080fd5b8060051b360382131561349657600080fd5b60008235603e19833603018112614b7357600080fd5b90910192915050565b6000606080835260a0808401614b928889614b15565b60408786018190529281905260059260c08089019083861b8a01018460005b85811015614cf2578b830360bf19018452813536889003607e19018112614bd757600080fd5b87016080848101614be88380614b15565b928752908290528b860191808c1b87018d0191908160005b82811015614c7057898503609f19018652614c1b8285614b5d565b614c258182614a1d565b8e8852614c358f8901828461493c565b9150506020614c4681840184614a1d565b9350888303828a0152614c5a83858361493c565b9982019998505093909301925050600101614c00565b5050505060209150614c8482840184614a1d565b87830384890152614c9683828461493c565b92505050614ca688840184614a1d565b8783038a890152614cb883828461493c565b92505050614cc88d840184614a1d565b93508682038e880152614cdc82858361493c565b9783019796505050929092019150600101614bb1565b505060208d013560808b015289810360208b0152614d10818d6142bd565b97505050878603818901525050505050613da881856142bd565b848152836020820152606060408201526000613da860608301848661493c565b818352600060208085019450848460051b86018460005b87811015614358578383038952614d788288614a1d565b614d8385828461493c565b9a87019a9450505090840190600101614d61565b614da1818b6142ff565b60c060208201526000614db860c083018a8c614d4a565b8860408401528281036060840152614dd181888a61493c565b905085608084015282810360a0840152614dec81858761493c565b9c9b505050505050505050505050565b600060208284031215614e0e57600080fd5b81516001600160401b03811115614e2457600080fd5b8201601f81018413614e3557600080fd5b612aba84825160208401614989565b60c081526000614e5760c083018b6142bd565b614e64602084018b6142ff565b88151560408401528281036060840152614e7f81888a614d4a565b90508281036080840152614e9481868861493c565b9150508260a08301529998505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60a081526000614f5660a083018a8c61493c565b614f63602084018a6142ff565b87151560408401528281036060840152614f7e818789614d4a565b90508281036080840152614f9381858761493c565b9b9a5050505050505050505050565b600181811c90821680614fb657607f821691505b602082108103613f4257634e487b7160e01b600052602260045260246000fd5b60008235603e19833603018112614fec57600080fd5b9190910192915050565b60006150028283614a1d565b6040855261501460408601828461493c565b915050602083013560208501528091505092915050565b6001600160401b038061503d83614792565b1683528061504d60208401614792565b166020840152505050565b6020815260006150688384614b5d565b60e0602084015261507d610100840182614ff6565b905061508c6020850185614b5d565b601f19808584030160408601526150a38383614ff6565b92506150b160408701614792565b91506001600160401b0380831660608701526150d06060880188614a1d565b9350828786030160808801526150e785858361493c565b9450506150fa60a087016080890161502b565b8061510760c08901614792565b1660e08701525050508091505092915050565b60006020828403121561512c57600080fd5b5051919050565b60006020828403121561514557600080fd5b6123ef82614792565b6001600160401b038481168252608082019061516d602084018661502b565b808416606084015250949350505050565b60006001600160401b038083168185168083038211156151ae57634e487b7160e01b600052601160045260246000fd5b01949350505050565b60006151c38283614b5d565b60e084526151d460e0850182614ff6565b90506151e36020840184614b5d565b84820360208601526151f58282614ff6565b91505061520460408401614792565b6001600160401b0380821660408701526152216060860186614a1d565b9250868403606088015261523684848361493c565b935050615249608087016080870161502b565b8061525660c08701614792565b1660c087015250508091505092915050565b6020815260006123ef60208301846151b7565b60006040828403121561528d57600080fd5b604051604081016001600160401b0382821081831117156152b0576152b061440d565b81604052829350845191506152c482613f9b565b908252602084015190808211156152da57600080fd5b506152e7858286016149b9565b6020830152505092915050565b6000806040838503121561530757600080fd5b82516001600160401b0381111561531d57600080fd5b6153298582860161527b565b925050602083015161465581613f9b565b8051151582526000602082015160406020850152612aba60408501826142bd565b6001600160401b03831681526040602082015260006123ec604083018461533a565b601f82111561154e57600081815260208120601f850160051c810160208610156153a45750805b601f850160051c820191505b81811015612b65578281556001016153b0565b81516001600160401b038111156153dc576153dc61440d565b6153f0816153ea8454614fa2565b8461537d565b602080601f831160018114615425576000841561540d5750858301515b600019600386901b1c1916600185901b178555612b65565b600085815260208120601f198616915b8281101561545457888601518255948401946001909101908401615435565b50858210156154725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160401b038311156154995761549961440d565b6154ad836154a78354614fa2565b8361537d565b6000601f8411600181146154e157600085156154c95750838201355b600019600387901b1c1916600186901b17835561553b565b600083815260209020601f19861690835b8281101561551257868501358255602094850194600190920191016154f2565b508682101561552f5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b6020815260006123ec60208301848661493c565b60006020828403121561556857600080fd5b81516001600160401b0381111561557e57600080fd5b612aba8482850161527b565b60408152600061559d60408301856151b7565b8281036020840152614404818561533a565b8183823760009101908152919050565b6060815260006155d360608301868861493c565b6001600160401b039485166020840152929093166040909101529392505050565b60608152600061560860608301868861493c565b6020830194909452506040015292915050565b60408152600061562e60408301856142bd565b90508260208301529392505050565b6156478188614a0d565b60006020615657818401896142ff565b60c0604084015261566b60c08401886142bd565b8381036060850152865180825282820190600581901b83018401848a0160005b838110156156b957601f198684030185526156a78383516142bd565b9487019492509086019060010161568b565b505086810360808801526156cd818a6142bd565b955050505050508260a0830152979650505050505050565b8381526060602082015260006156fe60608301856142bd565b9050826040830152949350505050565b60008251614fec818460208701614291565b6000808585111561573057600080fd5b8386111561573d57600080fd5b5050820193919092039150565b60006020828403121561575c57600080fd5b81516123ef81614131565b60008261578457634e487b7160e01b600052601260045260246000fd5b500490565b60006001600160401b03808411156157a3576157a361440d565b8360051b60206157b4818301614423565b8681529185019181810190368411156157cc57600080fd5b865b84811015615800578035868111156157e65760008081fd5b6157f236828b016145ef565b8452509183019183016157ce565b50979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203f8f26d60b9aaf3863f5927452254ff0890e5a52ede93e9772d0c793e637860164736f6c634300080f0033";
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Significant bytecode update detected.

The _bytecode constant has been completely replaced with a new value. This indicates substantial changes to the underlying smart contract logic. The new bytecode is significantly longer, suggesting additional functionality or optimizations have been implemented.

Given the extent of this change:

  1. Ensure that all new functionality in the corresponding Solidity contract has been thoroughly tested.
  2. Verify that the new bytecode is generated from the intended source code version.
  3. Consider running the new bytecode through a bytecode analyzer to identify any potential security issues or gas optimizations.
  4. Update any documentation or interfaces that may be affected by the changes in the contract's functionality.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants