creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "USDRouter.sol": {
        "content": "//SPDX-License-Identifier: Unlicense\npragma solidity ^0.8.0;\n\n// --------------------------------------------------------------------------------\n// --------------------------------------------------------------------------------\n// GENERATED CODE - do not edit manually!!\n// --------------------------------------------------------------------------------\n// --------------------------------------------------------------------------------\n\ncontract USDRouter {\n    error UnknownSelector(bytes4 sel);\n\n    address private constant _INITIAL_MODULE_BUNDLE = 0x828EED723cAF0A8F822249231266E38dF614923C;\n    address private constant _ASSOCIATED_SYSTEMS_MODULE = 0xBD7CB42c738E73D5b51966Dc51f3E9d8EcaafA1d;\n    address private constant _USDTOKEN_MODULE = 0x9620A3be76aCe6c1CAd55ed31C1eaA052DdcC51A;\n\n    fallback() external payable {\n        // Lookup table: Function selector => implementation contract\n        bytes4 sig4 = msg.sig;\n        address implementation;\n\n        assembly {\n            let sig32 := shr(224, sig4)\n\n            function findImplementation(sig) -> result {\n                if lt(sig,0x70a08231) {\n                    if lt(sig,0x3659cfe6) {\n                        switch sig\n                        case 0x06fdde03 { result := _USDTOKEN_MODULE } // USDTokenModule.name()\n                        case 0x095ea7b3 { result := _USDTOKEN_MODULE } // USDTokenModule.approve()\n                        case 0x1624f6c6 { result := _USDTOKEN_MODULE } // USDTokenModule.initialize()\n                        case 0x1627540c { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.nominateNewOwner()\n                        case 0x18160ddd { result := _USDTOKEN_MODULE } // USDTokenModule.totalSupply()\n                        case 0x23b872dd { result := _USDTOKEN_MODULE } // USDTokenModule.transferFrom()\n                        case 0x2d22bef9 { result := _ASSOCIATED_SYSTEMS_MODULE } // AssociatedSystemsModule.initOrUpgradeNft()\n                        case 0x313ce567 { result := _USDTOKEN_MODULE } // USDTokenModule.decimals()\n                        leave\n                    }\n                    switch sig\n                    case 0x3659cfe6 { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.upgradeTo()\n                    case 0x392e53cd { result := _USDTOKEN_MODULE } // USDTokenModule.isInitialized()\n                    case 0x39509351 { result := _USDTOKEN_MODULE } // USDTokenModule.increaseAllowance()\n                    case 0x40c10f19 { result := _USDTOKEN_MODULE } // USDTokenModule.mint()\n                    case 0x42966c68 { result := _USDTOKEN_MODULE } // USDTokenModule.burn()\n                    case 0x53a47bb7 { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.nominatedOwner()\n                    case 0x60988e09 { result := _ASSOCIATED_SYSTEMS_MODULE } // AssociatedSystemsModule.getAssociatedSystem()\n                    leave\n                }\n                if lt(sig,0xaaa15fd1) {\n                    switch sig\n                    case 0x70a08231 { result := _USDTOKEN_MODULE } // USDTokenModule.balanceOf()\n                    case 0x718fe928 { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.renounceNomination()\n                    case 0x79ba5097 { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.acceptOwnership()\n                    case 0x8da5cb5b { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.owner()\n                    case 0x95d89b41 { result := _USDTOKEN_MODULE } // USDTokenModule.symbol()\n                    case 0x9dc29fac { result := _USDTOKEN_MODULE } // USDTokenModule.burn()\n                    case 0xa457c2d7 { result := _USDTOKEN_MODULE } // USDTokenModule.decreaseAllowance()\n                    case 0xa9059cbb { result := _USDTOKEN_MODULE } // USDTokenModule.transfer()\n                    leave\n                }\n                switch sig\n                case 0xaaa15fd1 { result := _USDTOKEN_MODULE } // USDTokenModule.burnWithAllowance()\n                case 0xaaf10f42 { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.getImplementation()\n                case 0xc6f79537 { result := _ASSOCIATED_SYSTEMS_MODULE } // AssociatedSystemsModule.initOrUpgradeToken()\n                case 0xc7f62cda { result := _INITIAL_MODULE_BUNDLE } // InitialModuleBundle.simulateUpgradeTo()\n                case 0xd245d983 { result := _ASSOCIATED_SYSTEMS_MODULE } // AssociatedSystemsModule.registerUnmanagedSystem()\n                case 0xda46098c { result := _USDTOKEN_MODULE } // USDTokenModule.setAllowance()\n                case 0xdd62ed3e { result := _USDTOKEN_MODULE } // USDTokenModule.allowance()\n                leave\n            }\n\n            implementation := findImplementation(sig32)\n        }\n\n        if (implementation == address(0)) {\n            revert UnknownSelector(sig4);\n        }\n\n        // Delegatecall to the implementation contract\n        assembly {\n            calldatacopy(0, 0, calldatasize())\n\n            let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n            returndatacopy(0, 0, returndatasize())\n\n            switch result\n            case 0 {\n                revert(0, returndatasize())\n            }\n            default {\n                return(0, returndatasize())\n            }\n        }\n    }\n}\n"
      }
    },
    "settings": {
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      }
    }
  }}