{
    "_format": "hh-sol-artifact-1",
    "contractName": "StreamRegistryV5",
    "sourceName": "contracts/StreamRegistry/StreamRegistryV5.sol",
    "abi": [
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "previousAdmin",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "newAdmin",
                    "type": "address"
                }
            ],
            "name": "AdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "beacon",
                    "type": "address"
                }
            ],
            "name": "BeaconUpgraded",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "uint8",
                    "name": "version",
                    "type": "uint8"
                }
            ],
            "name": "Initialized",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "canEdit",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "canDelete",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "publishExpiration",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "subscribeExpiration",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "canGrant",
                    "type": "bool"
                }
            ],
            "name": "PermissionUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "canEdit",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "canDelete",
                    "type": "bool"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "publishExpiration",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "uint256",
                    "name": "subscribeExpiration",
                    "type": "uint256"
                },
                {
                    "indexed": false,
                    "internalType": "bool",
                    "name": "canGrant",
                    "type": "bool"
                }
            ],
            "name": "PermissionUpdatedForUserId",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "previousAdminRole",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "newAdminRole",
                    "type": "bytes32"
                }
            ],
            "name": "RoleAdminChanged",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleGranted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                },
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "sender",
                    "type": "address"
                }
            ],
            "name": "RoleRevoked",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "id",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "metadata",
                    "type": "string"
                }
            ],
            "name": "StreamCreated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "id",
                    "type": "string"
                }
            ],
            "name": "StreamDeleted",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "id",
                    "type": "string"
                },
                {
                    "indexed": false,
                    "internalType": "string",
                    "name": "metadata",
                    "type": "string"
                }
            ],
            "name": "StreamUpdated",
            "type": "event"
        },
        {
            "anonymous": false,
            "inputs": [
                {
                    "indexed": true,
                    "internalType": "address",
                    "name": "implementation",
                    "type": "address"
                }
            ],
            "name": "Upgraded",
            "type": "event"
        },
        {
            "inputs": [],
            "name": "DEFAULT_ADMIN_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "ownerAddress",
                    "type": "address"
                },
                {
                    "internalType": "string",
                    "name": "ensName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "streamIdPath",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "ENScreateStreamCallback",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "MAX_INT",
            "outputs": [
                {
                    "internalType": "uint256",
                    "name": "",
                    "type": "uint256"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "TRUSTED_ROLE",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "_address",
                    "type": "address"
                }
            ],
            "name": "addressToString",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string[]",
                    "name": "streamIdPaths",
                    "type": "string[]"
                },
                {
                    "internalType": "string[]",
                    "name": "metadataJsonStrings",
                    "type": "string[]"
                },
                {
                    "internalType": "address[][]",
                    "name": "users",
                    "type": "address[][]"
                },
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission[][]",
                    "name": "permissions",
                    "type": "tuple[][]"
                }
            ],
            "name": "createMultipleStreamsWithPermissions",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamIdPath",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "createStream",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "ensName",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "streamIdPath",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                }
            ],
            "name": "createStreamWithENS",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamIdPath",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "metadataJsonString",
                    "type": "string"
                },
                {
                    "internalType": "address[]",
                    "name": "users",
                    "type": "address[]"
                },
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission[]",
                    "name": "permissions",
                    "type": "tuple[]"
                }
            ],
            "name": "createStreamWithPermissions",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                }
            ],
            "name": "deleteStream",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "ensCache",
            "outputs": [
                {
                    "internalType": "contract ENSCache",
                    "name": "",
                    "type": "address"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                }
            ],
            "name": "exists",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                }
            ],
            "name": "getAddressKey",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                }
            ],
            "name": "getAddressKeyForUserId",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                }
            ],
            "name": "getDirectPermissionsForUser",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission",
                    "name": "permission",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                }
            ],
            "name": "getDirectPermissionsForUserId",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission",
                    "name": "permission",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                }
            ],
            "name": "getPermissionsForUser",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission",
                    "name": "permission",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                }
            ],
            "name": "getPermissionsForUserId",
            "outputs": [
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission",
                    "name": "permission",
                    "type": "tuple"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                }
            ],
            "name": "getRoleAdmin",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                }
            ],
            "name": "getStreamMetadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "des",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "getTrustedRole",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "pure",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "grantPermission",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "grantPermissionForUserId",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "grantPublicPermission",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "grantRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "hasDirectPermission",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "userHasPermission",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "hasPermission",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "userHasPermission",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "hasPublicPermission",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "userHasPermission",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "hasRole",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "ensCacheAddr",
                    "type": "address"
                },
                {
                    "internalType": "address",
                    "name": "trustedForwarderAddress",
                    "type": "address"
                }
            ],
            "name": "initialize",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "forwarder",
                    "type": "address"
                }
            ],
            "name": "isTrustedForwarder",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [],
            "name": "proxiableUUID",
            "outputs": [
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "renounceRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                }
            ],
            "name": "revokeAllPermissionsForUser",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                }
            ],
            "name": "revokeAllPermissionsForUserId",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "revokePermission",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes",
                    "name": "user",
                    "type": "bytes"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "revokePermissionForUserId",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                }
            ],
            "name": "revokePublicPermission",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes32",
                    "name": "role",
                    "type": "bytes32"
                },
                {
                    "internalType": "address",
                    "name": "account",
                    "type": "address"
                }
            ],
            "name": "revokeRole",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "ensCacheAddr",
                    "type": "address"
                }
            ],
            "name": "setEnsCache",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "enum StreamRegistryV5.PermissionType",
                    "name": "permissionType",
                    "type": "uint8"
                },
                {
                    "internalType": "uint256",
                    "name": "expirationTime",
                    "type": "uint256"
                }
            ],
            "name": "setExpirationTime",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address[]",
                    "name": "users",
                    "type": "address[]"
                },
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission[]",
                    "name": "permissions",
                    "type": "tuple[]"
                }
            ],
            "name": "setPermissions",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "canEdit",
                    "type": "bool"
                },
                {
                    "internalType": "bool",
                    "name": "canDelete",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "publishExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "subscribeExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "canGrant",
                    "type": "bool"
                }
            ],
            "name": "setPermissionsForUser",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "bytes[]",
                    "name": "users",
                    "type": "bytes[]"
                },
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission[]",
                    "name": "permissions",
                    "type": "tuple[]"
                }
            ],
            "name": "setPermissionsForUserIds",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string[]",
                    "name": "streamIds",
                    "type": "string[]"
                },
                {
                    "internalType": "address[][]",
                    "name": "users",
                    "type": "address[][]"
                },
                {
                    "components": [
                        {
                            "internalType": "bool",
                            "name": "canEdit",
                            "type": "bool"
                        },
                        {
                            "internalType": "bool",
                            "name": "canDelete",
                            "type": "bool"
                        },
                        {
                            "internalType": "uint256",
                            "name": "publishExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "uint256",
                            "name": "subscribeExpiration",
                            "type": "uint256"
                        },
                        {
                            "internalType": "bool",
                            "name": "canGrant",
                            "type": "bool"
                        }
                    ],
                    "internalType": "struct StreamRegistryV5.Permission[][]",
                    "name": "permissions",
                    "type": "tuple[][]"
                }
            ],
            "name": "setPermissionsMultipleStreams",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "uint256",
                    "name": "publishExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "subscribeExpiration",
                    "type": "uint256"
                }
            ],
            "name": "setPublicPermission",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "forwarder",
                    "type": "address"
                }
            ],
            "name": "setTrustedForwarder",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "name": "streamIdToMetadata",
            "outputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                },
                {
                    "internalType": "bytes32",
                    "name": "",
                    "type": "bytes32"
                }
            ],
            "name": "streamIdToPermissions",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "canEdit",
                    "type": "bool"
                },
                {
                    "internalType": "bool",
                    "name": "canDelete",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "publishExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "subscribeExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "canGrant",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "",
                    "type": "string"
                }
            ],
            "name": "streamIdToVersion",
            "outputs": [
                {
                    "internalType": "uint32",
                    "name": "",
                    "type": "uint32"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "bytes4",
                    "name": "interfaceId",
                    "type": "bytes4"
                }
            ],
            "name": "supportsInterface",
            "outputs": [
                {
                    "internalType": "bool",
                    "name": "",
                    "type": "bool"
                }
            ],
            "stateMutability": "view",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "address",
                    "name": "user",
                    "type": "address"
                },
                {
                    "internalType": "bool",
                    "name": "canEdit",
                    "type": "bool"
                },
                {
                    "internalType": "bool",
                    "name": "deletePerm",
                    "type": "bool"
                },
                {
                    "internalType": "uint256",
                    "name": "publishExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "uint256",
                    "name": "subscribeExpiration",
                    "type": "uint256"
                },
                {
                    "internalType": "bool",
                    "name": "canGrant",
                    "type": "bool"
                }
            ],
            "name": "trustedSetPermissionsForUser",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "string",
                    "name": "streamId",
                    "type": "string"
                },
                {
                    "internalType": "string",
                    "name": "metadata",
                    "type": "string"
                }
            ],
            "name": "updateStreamMetadata",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newImplementation",
                    "type": "address"
                }
            ],
            "name": "upgradeTo",
            "outputs": [],
            "stateMutability": "nonpayable",
            "type": "function"
        },
        {
            "inputs": [
                {
                    "internalType": "address",
                    "name": "newImplementation",
                    "type": "address"
                },
                {
                    "internalType": "bytes",
                    "name": "data",
                    "type": "bytes"
                }
            ],
            "name": "upgradeToAndCall",
            "outputs": [],
            "stateMutability": "payable",
            "type": "function"
        }
    ],
    "bytecode": "0x60a06040523060805234801561001457600080fd5b5060805161606e6200004d60003960008181610f5a01528181610f9a0152818161157d015281816115bd01526117de015261606e6000f3fe6080604052600436106102e05760003560e01c806378800c7611610186578063b6a91597116100d7578063da74222811610085578063da742228146109a1578063dbfc1d87146109c1578063dffb8f82146109e1578063e8f3828e14610a01578063f36d484914610a21578063f7f5078c14610ab8578063fb5642a014610ad857600080fd5b8063b6a91597146108c1578063bd030599146108e1578063c15211ef14610901578063d2d78c3e14610921578063d547741f14610941578063d7243b6914610961578063d9fc6c7b1461098157600080fd5b806391d148541161013457806391d14854146107ec578063997e8aaa1461080c5780639f967a701461082c578063a020aa971461084c578063a217fddf1461086c578063a8989d3f14610881578063b5c2978e146108a157600080fd5b806378800c761461069057806379afefcd146106b05780637aa31f8c146106d05780637b3681b51461073857806384e524e81461075857806386902fe9146107ac57806388b21038146107cc57600080fd5b80633c6cffa91161024057806352d1902d116101ee57806352d1902d1461059d578063572b6c05146105b25780635901692e146105e15780635e57966d146106035780636394fbd2146106305780636453cbd714610650578063760526841461067057600080fd5b80633c6cffa9146104b15780633e397aea146104ea57806342617fe71461050a578063466f878e1461052a578063485cc9551461054a5780634f1ef2861461056a57806350b5422b1461057d57600080fd5b8063248a9ca31161029d578063248a9ca3146103c0578063261a323e146103f0578063272cc993146104105780632f2ff15d14610430578063353f85001461045057806336568abe146104715780633659cfe61461049157600080fd5b806301ffc9a7146102e5578063022bf1d11461031a57806303dd31f81461033c5780630843564a1461035c578063098d32281461038a5780630ef8cdc7146103a0575b600080fd5b3480156102f157600080fd5b50610305610300366004614c75565b610af8565b60405190151581526020015b60405180910390f35b34801561032657600080fd5b5061033a610335366004614d6f565b610b2f565b005b34801561034857600080fd5b5061033a610357366004614e08565b610c48565b34801561036857600080fd5b5061037c610377366004614f4f565b610cff565b604051908152602001610311565b34801561039657600080fd5b5061037c60001981565b3480156103ac57600080fd5b5061033a6103bb366004614fa0565b610d5e565b3480156103cc57600080fd5b5061037c6103db36600461500b565b600090815260fb602052604090206001015490565b3480156103fc57600080fd5b5061030561040b366004615024565b610d8a565b34801561041c57600080fd5b5061033a61042b366004615079565b610dc2565b34801561043c57600080fd5b5061033a61044b3660046150cc565b610e97565b34801561045c57600080fd5b50600080516020615fd283398151915261037c565b34801561047d57600080fd5b5061033a61048c3660046150cc565b610ec1565b34801561049d57600080fd5b5061033a6104ac3660046150f1565b610f4f565b3480156104bd57600080fd5b5061012f546104d2906001600160a01b031681565b6040516001600160a01b039091168152602001610311565b3480156104f657600080fd5b5061033a61050536600461510e565b611018565b34801561051657600080fd5b5061033a610525366004614fa0565b611206565b34801561053657600080fd5b5061033a610545366004615079565b611362565b34801561055657600080fd5b5061033a610565366004615173565b611430565b61033a6105783660046151a1565b611572565b34801561058957600080fd5b5061033a610598366004615204565b611628565b3480156105a957600080fd5b5061037c6117d1565b3480156105be57600080fd5b506103056105cd3660046150f1565b6097546001600160a01b0391821691161490565b3480156105ed57600080fd5b5061037c600080516020615fd283398151915281565b34801561060f57600080fd5b5061062361061e3660046150f1565b61187f565b60405161031191906152b2565b34801561063c57600080fd5b5061062361064b366004615024565b611a6a565b34801561065c57600080fd5b5061033a61066b366004615024565b611b48565b34801561067c57600080fd5b5061033a61068b3660046152c5565b611ca2565b34801561069c57600080fd5b5061033a6106ab366004615345565b611dfd565b3480156106bc57600080fd5b5061033a6106cb3660046150f1565b611f6a565b3480156106dc57600080fd5b506106f06106eb366004614fa0565b611fc3565b6040516103119190600060a082019050825115158252602083015115156020830152604083015160408301526060830151606083015260808301511515608083015292915050565b34801561074457600080fd5b5061033a6107533660046153cc565b6121cf565b34801561076457600080fd5b50610797610773366004615439565b80516020818301810180516101308252928201919093012091525463ffffffff1681565b60405163ffffffff9091168152602001610311565b3480156107b857600080fd5b506106236107c7366004615439565b612492565b3480156107d857600080fd5b506103056107e736600461510e565b612538565b3480156107f857600080fd5b506103056108073660046150cc565b612564565b34801561081857600080fd5b5061033a61082736600461510e565b61258f565b34801561083857600080fd5b506106f0610847366004614fa0565b612758565b34801561085857600080fd5b506106f0610867366004615204565b612854565b34801561087857600080fd5b5061037c600081565b34801561088d57600080fd5b5061033a61089c36600461546d565b61294d565b3480156108ad57600080fd5b5061037c6108bc3660046154bd565b612a21565b3480156108cd57600080fd5b5061033a6108dc366004615535565b612a7b565b3480156108ed57600080fd5b5061033a6108fc3660046155ce565b612b68565b34801561090d57600080fd5b5061033a61091c366004615691565b612b9d565b34801561092d57600080fd5b5061033a61093c366004615535565b612c4d565b34801561094d57600080fd5b5061033a61095c3660046150cc565b612e1b565b34801561096d57600080fd5b5061033a61097c366004614fa0565b612e40565b34801561098d57600080fd5b5061033a61099c366004614d6f565b612fc8565b3480156109ad57600080fd5b5061033a6109bc3660046150f1565b613249565b3480156109cd57600080fd5b5061033a6109dc366004615740565b613288565b3480156109ed57600080fd5b5061033a6109fc3660046152c5565b6133d9565b348015610a0d57600080fd5b506106f0610a1c366004615204565b6134f1565b348015610a2d57600080fd5b50610a8c610a3c3660046157ec565b815160208184018101805161012d8252928201948201949094209190935290915260009081526040902080546001820154600283015460039093015460ff80841694610100909404811693911685565b60408051951515865293151560208601529284019190915260608301521515608082015260a001610311565b348015610ac457600080fd5b50610305610ad336600461510e565b6136fa565b348015610ae457600080fd5b50610305610af3366004615079565b6138f7565b60006001600160e01b03198216637965db0b60e01b1480610b2957506301ffc9a760e01b6001600160e01b03198316145b92915050565b8585610b3b8282610d8a565b610b605760405162461bcd60e51b8152600401610b5790615830565b60405180910390fd5b61012d8282604051610b73929190615862565b90815260200160405180910390206000610bc684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16610bf95760405162461bcd60e51b8152600401610b5790615872565b610c3e88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925089915088905087613915565b5050505050505050565b8281148015610c5657508085145b610c725760405162461bcd60e51b8152600401610b57906158a3565b8460005b81811015610c3e57610ced888883818110610c9357610c936158da565b9050602002810190610ca591906158f0565b888885818110610cb757610cb76158da565b9050602002810190610cc99190615936565b888887818110610cdb57610cdb6158da565b9050602002810190610335919061597f565b80610cf7816159dd565b915050610c76565b600061013083604051610d1291906159f8565b9081526040805191829003602090810183205463ffffffff16908301526001600160a01b0384169082015260600160405160208183030381529060405280519060200120905092915050565b6000610d6b61061e613906565b9050610d82610d78613906565b8287878787613a42565b505050505050565b600061012e8383604051610d9f929190615862565b90815260200160405180910390208054610db890615a14565b1515949350505050565b8282610dce8282610d8a565b610dea5760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051610dfd929190615862565b90815260200160405180910390206000610e5084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16610e835760405162461bcd60e51b8152600401610b5790615872565b610e908585600086611018565b5050505050565b600082815260fb6020526040902060010154610eb281613f78565b610ebc8383613f89565b505050565b610ec9613906565b6001600160a01b0316816001600160a01b031614610f415760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b57565b610f4b8282614010565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610f985760405162461bcd60e51b8152600401610b5790615a4f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fca614095565b6001600160a01b031614610ff05760405162461bcd60e51b8152600401610b5790615a9b565b610ff9816140b1565b60408051600080825260208201909252611015918391906140e7565b50565b8383836110258383610d8a565b6110415760405162461bcd60e51b8152600401610b5790615830565b61012d8383604051611054929190615862565b908152602001604051809103902060006110a785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16806110e15750806001600160a01b03166110d6613906565b6001600160a01b0316145b6110fd5760405162461bcd60e51b8152600401610b5790615872565b6001600160a01b0385161515806111255750600384600481111561112357611123615ae7565b145b806111415750600284600481111561113f5761113f615ae7565b145b61115d5760405162461bcd60e51b8152600401610b5790615afd565b60006111a088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b905060006111b2898984896000614261565b9050600080516020615f92833981519152898989846000015185602001518660400151876060015188608001516040516111f3989796959493929190615b5d565b60405180910390a1505050505050505050565b83836112128282610d8a565b61122e5760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051611241929190615862565b9081526020016040518091039020600061129484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000205460ff166112ed5760405162461bcd60e51b815260206004820152601660248201527532b93937b92fb737a2b234ba2832b936b4b9b9b4b7b760511b6044820152606401610b57565b838361012e8888604051611302929190615862565b90815260405190819003602001902061131c929091614b74565b507fa60b7935888a7ab31214282090f1ab7207ab6d7abbf3c11080b75ce91d9a36d0868686866040516113529493929190615bae565b60405180910390a1505050505050565b828261136e8282610d8a565b61138a5760405162461bcd60e51b8152600401610b5790615830565b61012d828260405161139d929190615862565b908152602001604051809103902060006113f084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166114235760405162461bcd60e51b8152600401610b5790615872565b610e90858560008661258f565b600054610100900460ff16158080156114505750600054600160ff909116105b8061146a5750303b15801561146a575060005460ff166001145b6114cd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b57565b6000805460ff1916600117905580156114f0576000805461ff0019166101001790555b61012f80546001600160a01b0319166001600160a01b038516179055611514614556565b61151f60003361457f565b61152882614589565b8015610ebc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115bb5760405162461bcd60e51b8152600401610b5790615a4f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115ed614095565b6001600160a01b0316146116135760405162461bcd60e51b8152600401610b5790615a9b565b61161c826140b1565b610f4b828260016140e7565b8282826116358383610d8a565b6116515760405162461bcd60e51b8152600401610b5790615830565b61012d8383604051611664929190615862565b908152602001604051809103902060006116b785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16806116f15750806001600160a01b03166116e6613906565b6001600160a01b0316145b61170d5760405162461bcd60e51b8152600401610b5790615872565b61012d8686604051611720929190615862565b9081526020016040518091039020600061177188888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b8152602081019190915260409081016000908120805461ffff191681556001810182905560028101829055600301805460ff191690559051600080516020615f928339815191529161135291899189918991908190819081908190615b5d565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461186c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610b57565b50600080516020615fb283398151915290565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106118ea576118ea6158da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611919576119196158da565b60200101906001600160f81b031916908160001a90535060005b6014811015611a61578260048561194b84600c615be0565b6020811061195b5761195b6158da565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110611981576119816158da565b01602001516001600160f81b0319168261199c836002615bf8565b6119a7906002615be0565b815181106119b7576119b76158da565b60200101906001600160f81b031916908160001a90535082846119db83600c615be0565b602081106119eb576119eb6158da565b825191901a600f16908110611a0257611a026158da565b01602001516001600160f81b03191682611a1d836002615bf8565b611a28906003615be0565b81518110611a3857611a386158da565b60200101906001600160f81b031916908160001a90535080611a59816159dd565b915050611933565b50949350505050565b60608282611a788282610d8a565b611a945760405162461bcd60e51b8152600401610b5790615830565b61012e8585604051611aa7929190615862565b90815260200160405180910390208054611ac090615a14565b80601f0160208091040260200160405190810160405280929190818152602001828054611aec90615a14565b8015611b395780601f10611b0e57610100808354040283529160200191611b39565b820191906000526020600020905b815481529060010190602001808311611b1c57829003601f168201915b50505050509250505092915050565b8181611b548282610d8a565b611b705760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051611b83929190615862565b90815260200160405180910390206000611bd684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b8152602081019190915260400160002054610100900460ff16611c365760405162461bcd60e51b815260206004820152601860248201527732b93937b92fb737a232b632ba32a832b936b4b9b9b4b7b760411b6044820152606401610b57565b61012e8484604051611c49929190615862565b90815260200160405180910390206000611c639190614bf8565b7f74b7395f46349d84fba706c4d226c68bbf9206c2567ae3ec2a001b5a98128eae8484604051611c94929190615c17565b60405180910390a150505050565b8484611cae8282610d8a565b611cca5760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051611cdd929190615862565b90815260200160405180910390206000611d3084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16611d635760405162461bcd60e51b8152600401610b5790615872565b6000611da888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150612a219050565b90506000611dba898984886001614261565b905060008051602061601983398151915289898989856000015186602001518760400151886060015189608001516040516111f399989796959493929190615c2b565b611e05613906565b61012f54604051632b1fd99560e01b81526001600160a01b039283169290911690632b1fd99590611e3c908a908a90600401615c17565b60206040518083038186803b158015611e5457600080fd5b505afa158015611e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8c9190615c81565b6001600160a01b03161415611eee57611ee8611ea6613906565b87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915087905086613a42565b50610d82565b61012f546001600160a01b0316631877e534878787878787611f0e613906565b6040518863ffffffff1660e01b8152600401611f309796959493929190615c9e565b600060405180830381600087803b158015611f4a57600080fd5b505af1158015611f5e573d6000803e3d6000fd5b50505050505050505050565b611f84600080516020615fd2833981519152610807613906565b611fa05760405162461bcd60e51b8152600401610b5790615cf7565b61012f80546001600160a01b0319166001600160a01b0392909216919091179055565b611fcb614c32565b8484611fd78282610d8a565b611ff35760405162461bcd60e51b8152600401610b5790615830565b61012d8787604051612006929190615862565b9081526020016040518091039020600061205989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a9150612a219050565b815260208082019290925260409081016000908120825160a081018452815460ff808216151583526101009091048116151595820195909552600182015481850152600282015460608201526003909101549093161515608084015290519194509061012d906120cc908a908a90615862565b9081526020016040518091039020600061211b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff80821615158352610100909104811615159482019490945260018201548184015260028201546060820152600390910154909216151560808301528501519091504211801561218d575042816040015110155b1561219d57604080820151908501525b4284606001511080156121b4575042816060015110155b156121c457606080820151908501525b505050949350505050565b84846121db8282610d8a565b6121f75760405162461bcd60e51b8152600401610b5790615830565b61012d828260405161220a929190615862565b9081526020016040518091039020600061225d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166122905760405162461bcd60e51b8152600401610b5790615872565b60038460048111156122a4576122a4615ae7565b14806122c1575060028460048111156122bf576122bf615ae7565b145b6123065760405162461bcd60e51b815260206004820152601660248201527532b93937b92fba34b6b2a7b7363ca7b1283ab129bab160511b6044820152606401610b57565b600061012d888860405161231b929190615862565b9081526020016040518091039020600061236c8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff80821615158352610100909104811615159482019490945260018201549281019290925260028082015460608401526003820154909316151560808301529250908660048111156123de576123de615ae7565b141561242f57600182018590558051602082015160608301516080840151604051600080516020615f9283398151915294612422948f948f948f948e929190615b5d565b60405180910390a1612487565b600386600481111561244357612443615ae7565b141561248757600282018590558051602082015160408084015160808501519151600080516020615f92833981519152946111f3948f948f948f9490918e91615b5d565b505050505050505050565b805160208183018101805161012e82529282019190930120915280546124b790615a14565b80601f01602080910402602001604051908101604052809291908181526020018280546124e390615a14565b80156125305780601f1061250557610100808354040283529160200191612530565b820191906000526020600020905b81548152906001019060200180831161251357829003601f168201915b505050505081565b6000612546858585856136fa565b80612559575061255985856000856136fa565b90505b949350505050565b600091825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b838361259b8282610d8a565b6125b75760405162461bcd60e51b8152600401610b5790615830565b61012d82826040516125ca929190615862565b9081526020016040518091039020600061261d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166126505760405162461bcd60e51b8152600401610b5790615872565b6001600160a01b0384161515806126785750600383600481111561267657612676615ae7565b145b806126945750600283600481111561269257612692615ae7565b145b6126b05760405162461bcd60e51b8152600401610b5790615afd565b60006126f387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250610cff915050565b90506000612705888884886001614261565b9050600080516020615f9283398151915288888884600001518560200151866040015187606001518860800151604051612746989796959493929190615b5d565b60405180910390a15050505050505050565b612760614c32565b848461276c8282610d8a565b6127885760405162461bcd60e51b8152600401610b5790615830565b61012d878760405161279b929190615862565b908152602001604051809103902060006127ee89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a9150612a219050565b81526020808201929092526040908101600020815160a081018352815460ff808216151583526101009091048116151594820194909452600182015492810192909252600281015460608301526003015490911615156080820152979650505050505050565b61285c614c32565b83836128688282610d8a565b6128845760405162461bcd60e51b8152600401610b5790615830565b61012d8686604051612897929190615862565b908152602001604051809103902060006128e888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff8082161515835261010090910481161515948201949094526001820154928101929092526002810154606083015260030154909116151560808201529695505050505050565b83836129598282610d8a565b6129755760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051612988929190615862565b908152602001604051809103902060006129db84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16612a0e5760405162461bcd60e51b8152600401610b5790615872565b610d828686600080600089896000612c4d565b600061013084604051612a3491906159f8565b9081526040516020918190038201812054612a5c9263ffffffff909116918691869101615d28565b6040516020818303038152906040528051906020012090509392505050565b612a95600080516020615fd2833981519152610807613906565b612ab15760405162461bcd60e51b8152600401610b5790615cf7565b6000612af489898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250610cff915050565b9050612b3d89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592508a91508990508888886145c1565b600080516020615f9283398151915289898989898989896040516111f3989796959493929190615b5d565b6000612b7561061e613906565b90506000612b8e612b84613906565b838c8c8c8c613a42565b9050611f5e8187878787613915565b60005b8781101561248757612c3b898983818110612bbd57612bbd6158da565b9050602002810190612bcf91906158f0565b898985818110612be157612be16158da565b9050602002810190612bf391906158f0565b898987818110612c0557612c056158da565b9050602002810190612c179190615936565b898989818110612c2957612c296158da565b90506020028101906108fc919061597f565b80612c45816159dd565b915050612ba0565b8787612c598282610d8a565b612c755760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051612c88929190615862565b90815260200160405180910390206000612cdb84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16612d0e5760405162461bcd60e51b8152600401610b5790615872565b6001600160a01b038816151580612d3357508680612d295750855b80612d315750825b155b612d4f5760405162461bcd60e51b8152600401610b5790615afd565b6000612d928b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250610cff915050565b9050612ddb8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592508c91508b90508a8a8a6145c1565b600080516020615f928339815191528b8b8b8b8b8b8b8b604051612e06989796959493929190615b5d565b60405180910390a15050505050505050505050565b600082815260fb6020526040902060010154612e3681613f78565b610ebc8383614010565b8383612e4c8282610d8a565b612e685760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051612e7b929190615862565b90815260200160405180910390206000612ece84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16612f015760405162461bcd60e51b8152600401610b5790615872565b61012d8686604051612f14929190615862565b90815260200160405180910390206000612f6788888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150612a219050565b8152602081019190915260409081016000908120805461ffff191681556001810182905560028101829055600301805460ff191690559051600080516020616019833981519152916113529189918991899189918190819081908190615c2b565b8585612fd48282610d8a565b612ff05760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051613003929190615862565b9081526020016040518091039020600061305684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166130895760405162461bcd60e51b8152600401610b5790615872565b8483146130a85760405162461bcd60e51b8152600401610b57906158a3565b8460005b81811015611f5e5760006131168b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c9150869050818110613104576131046158da565b90506020028101906108bc91906158f0565b90503687878481811061312b5761312b6158da565b905060a0020190506131ab8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061317c9150506020850185615d48565b61318c6040860160208701615d48565b604086013560608701356131a660a0890160808a01615d48565b6145c1565b6000805160206160198339815191528c8c8c8c878181106131ce576131ce6158da565b90506020028101906131e091906158f0565b6131ed6020870187615d48565b6131fd6040880160208901615d48565b6040880135606089013561321760a08b0160808c01615d48565b60405161322c99989796959493929190615c2b565b60405180910390a150508080613241906159dd565b9150506130ac565b613263600080516020615fd2833981519152610807613906565b61327f5760405162461bcd60e51b8152600401610b5790615cf7565b611015816146bc565b6132a2600080516020615fd2833981519152610807613906565b6132be5760405162461bcd60e51b8152600401610b5790615cf7565b61012f54604051632b1fd99560e01b81526001600160a01b03808a16921690632b1fd995906132f3908a908a90600401615c17565b60206040518083038186803b15801561330b57600080fd5b505afa15801561331f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133439190615c81565b6001600160a01b0316146133935760405162461bcd60e51b81526020600482015260176024820152766572726f725f6e6f744f776e65724f66454e534e616d6560481b6044820152606401610b57565b610c3e8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915087905086613a42565b84846133e58282610d8a565b6134015760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051613414929190615862565b9081526020016040518091039020600061346784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff1661349a5760405162461bcd60e51b8152600401610b5790615872565b60006134df88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150612a219050565b90506000611dba898984886000614261565b6134f9614c32565b83836135058282610d8a565b6135215760405162461bcd60e51b8152600401610b5790615830565b61012d8686604051613534929190615862565b9081526020016040518091039020600061358588888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b815260208082019290925260409081016000908120825160a081018452815460ff808216151583526101009091048116151595820195909552600182015481850152600282015460608201526003909101549093161515608084015290519194509061012d906135f89089908990615862565b9081526020016040518091039020600061364789898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff8082161515835261010090910481161515948201949094526001820154818401526002820154606082015260039091015490921615156080830152850151909150421180156136b9575042816040015110155b156136c957604080820151908501525b4284606001511080156136e0575042816060015110155b156136f057606080820151908501525b5050509392505050565b60008061373e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250610cff915050565b9050600083600481111561375457613754615ae7565b14156137935761012d868660405161376d929190615862565b9081526040805160209281900383019020600093845290915290205460ff16905061255c565b60018360048111156137a7576137a7615ae7565b14156137eb5761012d86866040516137c0929190615862565b90815260408051602092819003830190206000938452909152902054610100900460ff16905061255c565b60028360048111156137ff576137ff615ae7565b1415613846574261012d8787604051613819929190615862565b9081526020016040518091039020600083815260200190815260200160002060010154101591505061255c565b600383600481111561385a5761385a615ae7565b14156138a1574261012d8787604051613874929190615862565b9081526020016040518091039020600083815260200190815260200160002060020154101591505061255c565b60048360048111156138b5576138b5615ae7565b1415611a615761012d86866040516138ce929190615862565b9081526040805160209281900383019020600093845290915290206003015460ff16905061255c565b600061255c84846000856136fa565b60006139106146de565b905090565b8281146139345760405162461bcd60e51b8152600401610b57906158a3565b8260005b81811015613a39576000848483818110613954576139546158da565b905060a0020180360381019061396a9190615d63565b9050600061399989898986818110613984576139846158da565b905060200201602081019061037791906150f1565b90506139be8982846000015185602001518660400151876060015188608001516145c1565b600080516020615f92833981519152898989868181106139e0576139e06158da565b90506020020160208101906139f591906150f1565b84516020860151604080880151606089015160808a01519251613a1c979695949390615de2565b60405180910390a150508080613a31906159dd565b915050613938565b50505050505050565b606081613a915760405162461bcd60e51b815260206004820152601f60248201527f6572726f725f6d657461646174614a736f6e537472696e674973456d707479006044820152606401610b57565b600085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293506001925050505b8151811015613c9157818181518110613aeb57613aeb6158da565b01602001516001600160f81b031916602d60f81b11801590613b3b5750603960f81b6001600160f81b031916828281518110613b2957613b296158da565b01602001516001600160f81b03191611155b80613ba35750818181518110613b5357613b536158da565b01602001516001600160f81b031916604160f81b11801590613ba35750602d60f91b6001600160f81b031916828281518110613b9157613b916158da565b01602001516001600160f81b03191611155b80613c0b5750818181518110613bbb57613bbb6158da565b01602001516001600160f81b031916606160f81b11801590613c0b5750603d60f91b6001600160f81b031916828281518110613bf957613bf96158da565b01602001516001600160f81b03191611155b80613c3a5750818181518110613c2357613c236158da565b6020910101516001600160f81b031916605f60f81b145b613c7f5760405162461bcd60e51b81526020600482015260166024820152756572726f725f696e76616c696450617468436861727360501b6044820152606401610b57565b80613c89816159dd565b915050613ad0565b5080600081518110613ca557613ca56158da565b6020910101516001600160f81b031916602f60f81b14613d075760405162461bcd60e51b815260206004820152601c60248201527f6572726f725f706174684d757374537461727457697468536c617368000000006044820152606401610b57565b6000878787604051602001613d1e93929190615e31565b604051602081830303815290604052905061012e81604051613d4091906159f8565b90815260200160405180910390208054613d5990615a14565b159050613da45760405162461bcd60e51b81526020600482015260196024820152786572726f725f73747265616d416c726561647945786973747360381b6044820152606401610b57565b61013081604051613db591906159f8565b90815260405190819003602001902054613dd69063ffffffff166001615e59565b61013082604051613de791906159f8565b908152602001604051809103902060006101000a81548163ffffffff021916908363ffffffff160217905550848461012e83604051613e2691906159f8565b908152604051908190036020019020613e40929091614b74565b506040805160a08101825260018082526020820181905260001982840181905260608301526080820152905161012d90613e7b9084906159f8565b90815260200160405180910390206000613e95848d610cff565b81526020808201929092526040908101600020835181549385015161ffff1990941690151561ff0019161761010093151593909302929092178255828101516001830155606083015160028301556080909201516003909101805460ff1916911515919091179055517f0db027888a30ca08149af1347f6ce2f48daffedd9d6d21ab6249c4d802ce592f90613f2f90839088908890615e81565b60405180910390a1600080516020615f92833981519152818a600180600019806001604051613f649796959493929190615de2565b60405180910390a198975050505050505050565b61101581613f84613906565b614706565b613f938282612564565b610f4b57600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613fcc613906565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61401a8282612564565b15610f4b57600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff19169055614051613906565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600080516020615fb2833981519152546001600160a01b031690565b6140cb600080516020615fd2833981519152610807613906565b6110155760405162461bcd60e51b8152600401610b5790615cf7565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561411a57610ebc8361475f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561415357600080fd5b505afa925050508015614183575060408051601f3d908101601f1916820190925261418091810190615ea7565b60015b6141e65760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610b57565b600080516020615fb283398151915281146142555760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610b57565b50610ebc8383836147fb565b614269614c32565b600083600481111561427d5761427d615ae7565b14156142c5578161012d8787604051614297929190615862565b9081526040805160209281900383019020600088815292529020805460ff1916911515919091179055614444565b60018360048111156142d9576142d9615ae7565b1415614329578161012d87876040516142f3929190615862565b9081526040805160209281900383019020600088815292529020805461ff00191661010092151592909202919091179055614444565b600283600481111561433d5761433d615ae7565b1415614389578161434f576000614353565b6000195b61012d8787604051614366929190615862565b908152604080516020928190038301902060008881529252902060010155614444565b600383600481111561439d5761439d615ae7565b14156143e957816143af5760006143b3565b6000195b61012d87876040516143c6929190615862565b908152604080516020928190038301902060008881529252902060020155614444565b60048360048111156143fd576143fd615ae7565b1415614444578161012d8787604051614417929190615862565b9081526040805160209281900383019020600088815292529020600301805460ff19169115159190911790555b61012d8686604051614457929190615862565b9081526040805160209281900383018120600088815290845282902060a082018352805460ff8082161580158086526101009093048216151596850196909652600183015494840194909452600282015460608401526003909101549092161515608082015292506144cb57508060200151155b80156144d957508060800151155b80156144e85750428160400151105b80156144f75750428160600151105b1561454d5761012d868660405161450f929190615862565b9081526040805160209281900383019020600087815292528120805461ffff19168155600181018290556002810191909155600301805460ff191690555b95945050505050565b600054610100900460ff1661457d5760405162461bcd60e51b8152600401610b5790615ec0565b565b610f4b8282613f89565b600054610100900460ff166145b05760405162461bcd60e51b8152600401610b5790615ec0565b6145b8614556565b61101581614826565b841580156145cd575083155b80156145d7575080155b80156145e257504283105b80156145ed57504282105b156146455761012d8760405161460391906159f8565b9081526040805160209281900383019020600089815292528120805461ffff19168155600181018290556002810191909155600301805460ff19169055613a39565b600061012d8860405161465891906159f8565b90815260408051602092819003830190206000998a52909152909620805461ffff191695151561ff0019169590951761010094151594909402939093178455600184019190915560028301556003909101805460ff19169115159190911790555050565b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6097546000906001600160a01b0316331415614701575060131936013560601c90565b503390565b6147108282612564565b610f4b5761471d8161484d565b61472883602061485f565b604051602001614739929190615f0b565b60408051601f198184030181529082905262461bcd60e51b8252610b57916004016152b2565b6001600160a01b0381163b6147cc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610b57565b600080516020615fb283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61480483614a01565b6000825111806148115750805b15610ebc576148208383614a41565b50505050565b600054610100900460ff166146bc5760405162461bcd60e51b8152600401610b5790615ec0565b6060610b296001600160a01b03831660145b6060600061486e836002615bf8565b614879906002615be0565b6001600160401b0381111561489057614890614e8f565b6040519080825280601f01601f1916602001820160405280156148ba576020820181803683370190505b509050600360fc1b816000815181106148d5576148d56158da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614904576149046158da565b60200101906001600160f81b031916908160001a9053506000614928846002615bf8565b614933906001615be0565b90505b60018111156149ab576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614967576149676158da565b1a60f81b82828151811061497d5761497d6158da565b60200101906001600160f81b031916908160001a90535060049490941c936149a481615f7a565b9050614936565b5083156149fa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b57565b9392505050565b614a0a8161475f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606149fa8383604051806060016040528060278152602001615ff2602791396060600080856001600160a01b031685604051614a7e91906159f8565b600060405180830381855af49150503d8060008114614ab9576040519150601f19603f3d011682016040523d82523d6000602084013e614abe565b606091505b5091509150614acf86838387614ad9565b9695505050505050565b60608315614b45578251614b3e576001600160a01b0385163b614b3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b57565b508161255c565b61255c8383815115614b5a5781518083602001fd5b8060405162461bcd60e51b8152600401610b5791906152b2565b828054614b8090615a14565b90600052602060002090601f016020900481019282614ba25760008555614be8565b82601f10614bbb5782800160ff19823516178555614be8565b82800160010185558215614be8579182015b82811115614be8578235825591602001919060010190614bcd565b50614bf4929150614c60565b5090565b508054614c0490615a14565b6000825580601f10614c14575050565b601f0160209004906000526020600020908101906110159190614c60565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b5b80821115614bf45760008155600101614c61565b600060208284031215614c8757600080fd5b81356001600160e01b0319811681146149fa57600080fd5b60008083601f840112614cb157600080fd5b5081356001600160401b03811115614cc857600080fd5b602083019150836020828501011115614ce057600080fd5b9250929050565b60008083601f840112614cf957600080fd5b5081356001600160401b03811115614d1057600080fd5b6020830191508360208260051b8501011115614ce057600080fd5b60008083601f840112614d3d57600080fd5b5081356001600160401b03811115614d5457600080fd5b60208301915083602060a083028501011115614ce057600080fd5b60008060008060008060608789031215614d8857600080fd5b86356001600160401b0380821115614d9f57600080fd5b614dab8a838b01614c9f565b90985096506020890135915080821115614dc457600080fd5b614dd08a838b01614ce7565b90965094506040890135915080821115614de957600080fd5b50614df689828a01614d2b565b979a9699509497509295939492505050565b60008060008060008060608789031215614e2157600080fd5b86356001600160401b0380821115614e3857600080fd5b614e448a838b01614ce7565b90985096506020890135915080821115614e5d57600080fd5b614e698a838b01614ce7565b90965094506040890135915080821115614e8257600080fd5b50614df689828a01614ce7565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115614ebf57614ebf614e8f565b604051601f8501601f19908116603f01168101908282118183101715614ee757614ee7614e8f565b81604052809350858152868686011115614f0057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112614f2b57600080fd5b6149fa83833560208501614ea5565b6001600160a01b038116811461101557600080fd5b60008060408385031215614f6257600080fd5b82356001600160401b03811115614f7857600080fd5b614f8485828601614f1a565b9250506020830135614f9581614f3a565b809150509250929050565b60008060008060408587031215614fb657600080fd5b84356001600160401b0380821115614fcd57600080fd5b614fd988838901614c9f565b90965094506020870135915080821115614ff257600080fd5b50614fff87828801614c9f565b95989497509550505050565b60006020828403121561501d57600080fd5b5035919050565b6000806020838503121561503757600080fd5b82356001600160401b0381111561504d57600080fd5b61505985828601614c9f565b90969095509350505050565b80356005811061507457600080fd5b919050565b60008060006040848603121561508e57600080fd5b83356001600160401b038111156150a457600080fd5b6150b086828701614c9f565b90945092506150c3905060208501615065565b90509250925092565b600080604083850312156150df57600080fd5b823591506020830135614f9581614f3a565b60006020828403121561510357600080fd5b81356149fa81614f3a565b6000806000806060858703121561512457600080fd5b84356001600160401b0381111561513a57600080fd5b61514687828801614c9f565b909550935050602085013561515a81614f3a565b915061516860408601615065565b905092959194509250565b6000806040838503121561518657600080fd5b823561519181614f3a565b91506020830135614f9581614f3a565b600080604083850312156151b457600080fd5b82356151bf81614f3a565b915060208301356001600160401b038111156151da57600080fd5b8301601f810185136151eb57600080fd5b6151fa85823560208401614ea5565b9150509250929050565b60008060006040848603121561521957600080fd5b83356001600160401b0381111561522f57600080fd5b61523b86828701614c9f565b909450925050602084013561524f81614f3a565b809150509250925092565b60005b8381101561527557818101518382015260200161525d565b838111156148205750506000910152565b6000815180845261529e81602086016020860161525a565b601f01601f19169290920160200192915050565b6020815260006149fa6020830184615286565b6000806000806000606086880312156152dd57600080fd5b85356001600160401b03808211156152f457600080fd5b61530089838a01614c9f565b9097509550602088013591508082111561531957600080fd5b5061532688828901614c9f565b9094509250615339905060408701615065565b90509295509295909350565b6000806000806000806060878903121561535e57600080fd5b86356001600160401b038082111561537557600080fd5b6153818a838b01614c9f565b9098509650602089013591508082111561539a57600080fd5b6153a68a838b01614c9f565b909650945060408901359150808211156153bf57600080fd5b50614df689828a01614c9f565b6000806000806000608086880312156153e457600080fd5b85356001600160401b038111156153fa57600080fd5b61540688828901614c9f565b909650945050602086013561541a81614f3a565b925061542860408701615065565b949793965091946060013592915050565b60006020828403121561544b57600080fd5b81356001600160401b0381111561546157600080fd5b61255c84828501614f1a565b6000806000806060858703121561548357600080fd5b84356001600160401b0381111561549957600080fd5b6154a587828801614c9f565b90989097506020870135966040013595509350505050565b6000806000604084860312156154d257600080fd5b83356001600160401b03808211156154e957600080fd5b6154f587838801614f1a565b9450602086013591508082111561550b57600080fd5b5061551886828701614c9f565b9497909650939450505050565b8035801515811461507457600080fd5b60008060008060008060008060e0898b03121561555157600080fd5b88356001600160401b0381111561556757600080fd5b6155738b828c01614c9f565b909950975050602089013561558781614f3a565b955061559560408a01615525565b94506155a360608a01615525565b93506080890135925060a089013591506155bf60c08a01615525565b90509295985092959890939650565b6000806000806000806000806080898b0312156155ea57600080fd5b88356001600160401b038082111561560157600080fd5b61560d8c838d01614c9f565b909a50985060208b013591508082111561562657600080fd5b6156328c838d01614c9f565b909850965060408b013591508082111561564b57600080fd5b6156578c838d01614ce7565b909650945060608b013591508082111561567057600080fd5b5061567d8b828c01614d2b565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b0312156156ad57600080fd5b88356001600160401b03808211156156c457600080fd5b6156d08c838d01614ce7565b909a50985060208b01359150808211156156e957600080fd5b6156f58c838d01614ce7565b909850965060408b013591508082111561570e57600080fd5b61571a8c838d01614ce7565b909650945060608b013591508082111561573357600080fd5b5061567d8b828c01614ce7565b60008060008060008060006080888a03121561575b57600080fd5b873561576681614f3a565b965060208801356001600160401b038082111561578257600080fd5b61578e8b838c01614c9f565b909850965060408a01359150808211156157a757600080fd5b6157b38b838c01614c9f565b909650945060608a01359150808211156157cc57600080fd5b506157d98a828b01614c9f565b989b979a50959850939692959293505050565b600080604083850312156157ff57600080fd5b82356001600160401b0381111561581557600080fd5b61582185828601614f1a565b95602094909401359450505050565b602080825260189082015277195c9c9bdc97dcdd1c99585b511bd95cd39bdd115e1a5cdd60421b604082015260600190565b8183823760009101908152919050565b60208082526017908201527632b93937b92fb737a9b430b932a832b936b4b9b9b4b7b760491b604082015260600190565b6020808252601e908201527f6572726f725f696e76616c6964496e70757441727261794c656e677468730000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261590757600080fd5b8301803591506001600160401b0382111561592157600080fd5b602001915036819003821315614ce057600080fd5b6000808335601e1984360301811261594d57600080fd5b8301803591506001600160401b0382111561596757600080fd5b6020019150600581901b3603821315614ce057600080fd5b6000808335601e1984360301811261599657600080fd5b8301803591506001600160401b038211156159b057600080fd5b602001915060a081023603821315614ce057600080fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156159f1576159f16159c7565b5060010190565b60008251615a0a81846020870161525a565b9190910192915050565b600181811c90821680615a2857607f821691505b60208210811415615a4957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6020808252601b908201527f6572726f725f7075626c696343616e4f6e6c79537562735075626c0000000000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60e081526000615b7160e083018a8c615b34565b6001600160a01b039890981660208301525094151560408601529215156060850152608084019190915260a0830152151560c09091015292915050565b604081526000615bc2604083018688615b34565b8281036020840152615bd5818587615b34565b979650505050505050565b60008219821115615bf357615bf36159c7565b500190565b6000816000190483118215151615615c1257615c126159c7565b500290565b60208152600061255c602083018486615b34565b60e081526000615c3f60e083018b8d615b34565b8281036020840152615c52818a8c615b34565b971515604084015250509315156060850152608084019290925260a0830152151560c090910152949350505050565b600060208284031215615c9357600080fd5b81516149fa81614f3a565b608081526000615cb260808301898b615b34565b8281036020840152615cc581888a615b34565b90508281036040840152615cda818688615b34565b91505060018060a01b038316606083015298975050505050505050565b6020808252601790820152766572726f725f6d757374426554727573746564526f6c6560481b604082015260600190565b63ffffffff84168152604060208201526000612559604083018486615b34565b600060208284031215615d5a57600080fd5b6149fa82615525565b600060a08284031215615d7557600080fd5b60405160a081018181106001600160401b0382111715615d9757615d97614e8f565b604052615da383615525565b8152615db160208401615525565b60208201526040830135604082015260608301356060820152615dd660808401615525565b60808201529392505050565b60e081526000615df560e083018a615286565b6001600160a01b039890981660208301525094151560408601529215156060850152608084019190915260a0830152151560c090910152919050565b60008451615e4381846020890161525a565b8201838582376000930192835250909392505050565b600063ffffffff808316818516808303821115615e7857615e786159c7565b01949350505050565b604081526000615e946040830186615286565b8281036020840152614acf818587615b34565b600060208284031215615eb957600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615f3d81601785016020880161525a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615f6e81602884016020880161525a565b01602801949350505050565b600081615f8957615f896159c7565b50600019019056fed22d58032f55c61c3896b3f67eb399b25071b61e122a23d4cd06bc87d4b7b8c1360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc2de84d9fbdf6d06e2cc584295043dbd76046423b9f8bae9426d4fa5e7c03f4a7416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564d7c1097f3fd7d3ed5e2ed13f20679b83d528af948c2e5341971c4c7a7fe9ffd2a264697066735822122026bb63c66153bd83d82ba5515c36552931b22c695195b26035b301d31f49c36464736f6c63430008090033",
    "deployedBytecode": "0x6080604052600436106102e05760003560e01c806378800c7611610186578063b6a91597116100d7578063da74222811610085578063da742228146109a1578063dbfc1d87146109c1578063dffb8f82146109e1578063e8f3828e14610a01578063f36d484914610a21578063f7f5078c14610ab8578063fb5642a014610ad857600080fd5b8063b6a91597146108c1578063bd030599146108e1578063c15211ef14610901578063d2d78c3e14610921578063d547741f14610941578063d7243b6914610961578063d9fc6c7b1461098157600080fd5b806391d148541161013457806391d14854146107ec578063997e8aaa1461080c5780639f967a701461082c578063a020aa971461084c578063a217fddf1461086c578063a8989d3f14610881578063b5c2978e146108a157600080fd5b806378800c761461069057806379afefcd146106b05780637aa31f8c146106d05780637b3681b51461073857806384e524e81461075857806386902fe9146107ac57806388b21038146107cc57600080fd5b80633c6cffa91161024057806352d1902d116101ee57806352d1902d1461059d578063572b6c05146105b25780635901692e146105e15780635e57966d146106035780636394fbd2146106305780636453cbd714610650578063760526841461067057600080fd5b80633c6cffa9146104b15780633e397aea146104ea57806342617fe71461050a578063466f878e1461052a578063485cc9551461054a5780634f1ef2861461056a57806350b5422b1461057d57600080fd5b8063248a9ca31161029d578063248a9ca3146103c0578063261a323e146103f0578063272cc993146104105780632f2ff15d14610430578063353f85001461045057806336568abe146104715780633659cfe61461049157600080fd5b806301ffc9a7146102e5578063022bf1d11461031a57806303dd31f81461033c5780630843564a1461035c578063098d32281461038a5780630ef8cdc7146103a0575b600080fd5b3480156102f157600080fd5b50610305610300366004614c75565b610af8565b60405190151581526020015b60405180910390f35b34801561032657600080fd5b5061033a610335366004614d6f565b610b2f565b005b34801561034857600080fd5b5061033a610357366004614e08565b610c48565b34801561036857600080fd5b5061037c610377366004614f4f565b610cff565b604051908152602001610311565b34801561039657600080fd5b5061037c60001981565b3480156103ac57600080fd5b5061033a6103bb366004614fa0565b610d5e565b3480156103cc57600080fd5b5061037c6103db36600461500b565b600090815260fb602052604090206001015490565b3480156103fc57600080fd5b5061030561040b366004615024565b610d8a565b34801561041c57600080fd5b5061033a61042b366004615079565b610dc2565b34801561043c57600080fd5b5061033a61044b3660046150cc565b610e97565b34801561045c57600080fd5b50600080516020615fd283398151915261037c565b34801561047d57600080fd5b5061033a61048c3660046150cc565b610ec1565b34801561049d57600080fd5b5061033a6104ac3660046150f1565b610f4f565b3480156104bd57600080fd5b5061012f546104d2906001600160a01b031681565b6040516001600160a01b039091168152602001610311565b3480156104f657600080fd5b5061033a61050536600461510e565b611018565b34801561051657600080fd5b5061033a610525366004614fa0565b611206565b34801561053657600080fd5b5061033a610545366004615079565b611362565b34801561055657600080fd5b5061033a610565366004615173565b611430565b61033a6105783660046151a1565b611572565b34801561058957600080fd5b5061033a610598366004615204565b611628565b3480156105a957600080fd5b5061037c6117d1565b3480156105be57600080fd5b506103056105cd3660046150f1565b6097546001600160a01b0391821691161490565b3480156105ed57600080fd5b5061037c600080516020615fd283398151915281565b34801561060f57600080fd5b5061062361061e3660046150f1565b61187f565b60405161031191906152b2565b34801561063c57600080fd5b5061062361064b366004615024565b611a6a565b34801561065c57600080fd5b5061033a61066b366004615024565b611b48565b34801561067c57600080fd5b5061033a61068b3660046152c5565b611ca2565b34801561069c57600080fd5b5061033a6106ab366004615345565b611dfd565b3480156106bc57600080fd5b5061033a6106cb3660046150f1565b611f6a565b3480156106dc57600080fd5b506106f06106eb366004614fa0565b611fc3565b6040516103119190600060a082019050825115158252602083015115156020830152604083015160408301526060830151606083015260808301511515608083015292915050565b34801561074457600080fd5b5061033a6107533660046153cc565b6121cf565b34801561076457600080fd5b50610797610773366004615439565b80516020818301810180516101308252928201919093012091525463ffffffff1681565b60405163ffffffff9091168152602001610311565b3480156107b857600080fd5b506106236107c7366004615439565b612492565b3480156107d857600080fd5b506103056107e736600461510e565b612538565b3480156107f857600080fd5b506103056108073660046150cc565b612564565b34801561081857600080fd5b5061033a61082736600461510e565b61258f565b34801561083857600080fd5b506106f0610847366004614fa0565b612758565b34801561085857600080fd5b506106f0610867366004615204565b612854565b34801561087857600080fd5b5061037c600081565b34801561088d57600080fd5b5061033a61089c36600461546d565b61294d565b3480156108ad57600080fd5b5061037c6108bc3660046154bd565b612a21565b3480156108cd57600080fd5b5061033a6108dc366004615535565b612a7b565b3480156108ed57600080fd5b5061033a6108fc3660046155ce565b612b68565b34801561090d57600080fd5b5061033a61091c366004615691565b612b9d565b34801561092d57600080fd5b5061033a61093c366004615535565b612c4d565b34801561094d57600080fd5b5061033a61095c3660046150cc565b612e1b565b34801561096d57600080fd5b5061033a61097c366004614fa0565b612e40565b34801561098d57600080fd5b5061033a61099c366004614d6f565b612fc8565b3480156109ad57600080fd5b5061033a6109bc3660046150f1565b613249565b3480156109cd57600080fd5b5061033a6109dc366004615740565b613288565b3480156109ed57600080fd5b5061033a6109fc3660046152c5565b6133d9565b348015610a0d57600080fd5b506106f0610a1c366004615204565b6134f1565b348015610a2d57600080fd5b50610a8c610a3c3660046157ec565b815160208184018101805161012d8252928201948201949094209190935290915260009081526040902080546001820154600283015460039093015460ff80841694610100909404811693911685565b60408051951515865293151560208601529284019190915260608301521515608082015260a001610311565b348015610ac457600080fd5b50610305610ad336600461510e565b6136fa565b348015610ae457600080fd5b50610305610af3366004615079565b6138f7565b60006001600160e01b03198216637965db0b60e01b1480610b2957506301ffc9a760e01b6001600160e01b03198316145b92915050565b8585610b3b8282610d8a565b610b605760405162461bcd60e51b8152600401610b5790615830565b60405180910390fd5b61012d8282604051610b73929190615862565b90815260200160405180910390206000610bc684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16610bf95760405162461bcd60e51b8152600401610b5790615872565b610c3e88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925089915088905087613915565b5050505050505050565b8281148015610c5657508085145b610c725760405162461bcd60e51b8152600401610b57906158a3565b8460005b81811015610c3e57610ced888883818110610c9357610c936158da565b9050602002810190610ca591906158f0565b888885818110610cb757610cb76158da565b9050602002810190610cc99190615936565b888887818110610cdb57610cdb6158da565b9050602002810190610335919061597f565b80610cf7816159dd565b915050610c76565b600061013083604051610d1291906159f8565b9081526040805191829003602090810183205463ffffffff16908301526001600160a01b0384169082015260600160405160208183030381529060405280519060200120905092915050565b6000610d6b61061e613906565b9050610d82610d78613906565b8287878787613a42565b505050505050565b600061012e8383604051610d9f929190615862565b90815260200160405180910390208054610db890615a14565b1515949350505050565b8282610dce8282610d8a565b610dea5760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051610dfd929190615862565b90815260200160405180910390206000610e5084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16610e835760405162461bcd60e51b8152600401610b5790615872565b610e908585600086611018565b5050505050565b600082815260fb6020526040902060010154610eb281613f78565b610ebc8383613f89565b505050565b610ec9613906565b6001600160a01b0316816001600160a01b031614610f415760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610b57565b610f4b8282614010565b5050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610f985760405162461bcd60e51b8152600401610b5790615a4f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fca614095565b6001600160a01b031614610ff05760405162461bcd60e51b8152600401610b5790615a9b565b610ff9816140b1565b60408051600080825260208201909252611015918391906140e7565b50565b8383836110258383610d8a565b6110415760405162461bcd60e51b8152600401610b5790615830565b61012d8383604051611054929190615862565b908152602001604051809103902060006110a785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16806110e15750806001600160a01b03166110d6613906565b6001600160a01b0316145b6110fd5760405162461bcd60e51b8152600401610b5790615872565b6001600160a01b0385161515806111255750600384600481111561112357611123615ae7565b145b806111415750600284600481111561113f5761113f615ae7565b145b61115d5760405162461bcd60e51b8152600401610b5790615afd565b60006111a088888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b905060006111b2898984896000614261565b9050600080516020615f92833981519152898989846000015185602001518660400151876060015188608001516040516111f3989796959493929190615b5d565b60405180910390a1505050505050505050565b83836112128282610d8a565b61122e5760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051611241929190615862565b9081526020016040518091039020600061129484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000205460ff166112ed5760405162461bcd60e51b815260206004820152601660248201527532b93937b92fb737a2b234ba2832b936b4b9b9b4b7b760511b6044820152606401610b57565b838361012e8888604051611302929190615862565b90815260405190819003602001902061131c929091614b74565b507fa60b7935888a7ab31214282090f1ab7207ab6d7abbf3c11080b75ce91d9a36d0868686866040516113529493929190615bae565b60405180910390a1505050505050565b828261136e8282610d8a565b61138a5760405162461bcd60e51b8152600401610b5790615830565b61012d828260405161139d929190615862565b908152602001604051809103902060006113f084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166114235760405162461bcd60e51b8152600401610b5790615872565b610e90858560008661258f565b600054610100900460ff16158080156114505750600054600160ff909116105b8061146a5750303b15801561146a575060005460ff166001145b6114cd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b57565b6000805460ff1916600117905580156114f0576000805461ff0019166101001790555b61012f80546001600160a01b0319166001600160a01b038516179055611514614556565b61151f60003361457f565b61152882614589565b8015610ebc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156115bb5760405162461bcd60e51b8152600401610b5790615a4f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115ed614095565b6001600160a01b0316146116135760405162461bcd60e51b8152600401610b5790615a9b565b61161c826140b1565b610f4b828260016140e7565b8282826116358383610d8a565b6116515760405162461bcd60e51b8152600401610b5790615830565b61012d8383604051611664929190615862565b908152602001604051809103902060006116b785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16806116f15750806001600160a01b03166116e6613906565b6001600160a01b0316145b61170d5760405162461bcd60e51b8152600401610b5790615872565b61012d8686604051611720929190615862565b9081526020016040518091039020600061177188888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b8152602081019190915260409081016000908120805461ffff191681556001810182905560028101829055600301805460ff191690559051600080516020615f928339815191529161135291899189918991908190819081908190615b5d565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461186c5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610b57565b50600080516020615fb283398151915290565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106118ea576118ea6158da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611919576119196158da565b60200101906001600160f81b031916908160001a90535060005b6014811015611a61578260048561194b84600c615be0565b6020811061195b5761195b6158da565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110611981576119816158da565b01602001516001600160f81b0319168261199c836002615bf8565b6119a7906002615be0565b815181106119b7576119b76158da565b60200101906001600160f81b031916908160001a90535082846119db83600c615be0565b602081106119eb576119eb6158da565b825191901a600f16908110611a0257611a026158da565b01602001516001600160f81b03191682611a1d836002615bf8565b611a28906003615be0565b81518110611a3857611a386158da565b60200101906001600160f81b031916908160001a90535080611a59816159dd565b915050611933565b50949350505050565b60608282611a788282610d8a565b611a945760405162461bcd60e51b8152600401610b5790615830565b61012e8585604051611aa7929190615862565b90815260200160405180910390208054611ac090615a14565b80601f0160208091040260200160405190810160405280929190818152602001828054611aec90615a14565b8015611b395780601f10611b0e57610100808354040283529160200191611b39565b820191906000526020600020905b815481529060010190602001808311611b1c57829003601f168201915b50505050509250505092915050565b8181611b548282610d8a565b611b705760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051611b83929190615862565b90815260200160405180910390206000611bd684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b8152602081019190915260400160002054610100900460ff16611c365760405162461bcd60e51b815260206004820152601860248201527732b93937b92fb737a232b632ba32a832b936b4b9b9b4b7b760411b6044820152606401610b57565b61012e8484604051611c49929190615862565b90815260200160405180910390206000611c639190614bf8565b7f74b7395f46349d84fba706c4d226c68bbf9206c2567ae3ec2a001b5a98128eae8484604051611c94929190615c17565b60405180910390a150505050565b8484611cae8282610d8a565b611cca5760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051611cdd929190615862565b90815260200160405180910390206000611d3084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16611d635760405162461bcd60e51b8152600401610b5790615872565b6000611da888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150612a219050565b90506000611dba898984886001614261565b905060008051602061601983398151915289898989856000015186602001518760400151886060015189608001516040516111f399989796959493929190615c2b565b611e05613906565b61012f54604051632b1fd99560e01b81526001600160a01b039283169290911690632b1fd99590611e3c908a908a90600401615c17565b60206040518083038186803b158015611e5457600080fd5b505afa158015611e68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8c9190615c81565b6001600160a01b03161415611eee57611ee8611ea6613906565b87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915087905086613a42565b50610d82565b61012f546001600160a01b0316631877e534878787878787611f0e613906565b6040518863ffffffff1660e01b8152600401611f309796959493929190615c9e565b600060405180830381600087803b158015611f4a57600080fd5b505af1158015611f5e573d6000803e3d6000fd5b50505050505050505050565b611f84600080516020615fd2833981519152610807613906565b611fa05760405162461bcd60e51b8152600401610b5790615cf7565b61012f80546001600160a01b0319166001600160a01b0392909216919091179055565b611fcb614c32565b8484611fd78282610d8a565b611ff35760405162461bcd60e51b8152600401610b5790615830565b61012d8787604051612006929190615862565b9081526020016040518091039020600061205989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a9150612a219050565b815260208082019290925260409081016000908120825160a081018452815460ff808216151583526101009091048116151595820195909552600182015481850152600282015460608201526003909101549093161515608084015290519194509061012d906120cc908a908a90615862565b9081526020016040518091039020600061211b8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff80821615158352610100909104811615159482019490945260018201548184015260028201546060820152600390910154909216151560808301528501519091504211801561218d575042816040015110155b1561219d57604080820151908501525b4284606001511080156121b4575042816060015110155b156121c457606080820151908501525b505050949350505050565b84846121db8282610d8a565b6121f75760405162461bcd60e51b8152600401610b5790615830565b61012d828260405161220a929190615862565b9081526020016040518091039020600061225d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166122905760405162461bcd60e51b8152600401610b5790615872565b60038460048111156122a4576122a4615ae7565b14806122c1575060028460048111156122bf576122bf615ae7565b145b6123065760405162461bcd60e51b815260206004820152601660248201527532b93937b92fba34b6b2a7b7363ca7b1283ab129bab160511b6044820152606401610b57565b600061012d888860405161231b929190615862565b9081526020016040518091039020600061236c8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff80821615158352610100909104811615159482019490945260018201549281019290925260028082015460608401526003820154909316151560808301529250908660048111156123de576123de615ae7565b141561242f57600182018590558051602082015160608301516080840151604051600080516020615f9283398151915294612422948f948f948f948e929190615b5d565b60405180910390a1612487565b600386600481111561244357612443615ae7565b141561248757600282018590558051602082015160408084015160808501519151600080516020615f92833981519152946111f3948f948f948f9490918e91615b5d565b505050505050505050565b805160208183018101805161012e82529282019190930120915280546124b790615a14565b80601f01602080910402602001604051908101604052809291908181526020018280546124e390615a14565b80156125305780601f1061250557610100808354040283529160200191612530565b820191906000526020600020905b81548152906001019060200180831161251357829003601f168201915b505050505081565b6000612546858585856136fa565b80612559575061255985856000856136fa565b90505b949350505050565b600091825260fb602090815260408084206001600160a01b0393909316845291905290205460ff1690565b838361259b8282610d8a565b6125b75760405162461bcd60e51b8152600401610b5790615830565b61012d82826040516125ca929190615862565b9081526020016040518091039020600061261d84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166126505760405162461bcd60e51b8152600401610b5790615872565b6001600160a01b0384161515806126785750600383600481111561267657612676615ae7565b145b806126945750600283600481111561269257612692615ae7565b145b6126b05760405162461bcd60e51b8152600401610b5790615afd565b60006126f387878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250610cff915050565b90506000612705888884886001614261565b9050600080516020615f9283398151915288888884600001518560200151866040015187606001518860800151604051612746989796959493929190615b5d565b60405180910390a15050505050505050565b612760614c32565b848461276c8282610d8a565b6127885760405162461bcd60e51b8152600401610b5790615830565b61012d878760405161279b929190615862565b908152602001604051809103902060006127ee89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b92508a9150612a219050565b81526020808201929092526040908101600020815160a081018352815460ff808216151583526101009091048116151594820194909452600182015492810192909252600281015460608301526003015490911615156080820152979650505050505050565b61285c614c32565b83836128688282610d8a565b6128845760405162461bcd60e51b8152600401610b5790615830565b61012d8686604051612897929190615862565b908152602001604051809103902060006128e888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff8082161515835261010090910481161515948201949094526001820154928101929092526002810154606083015260030154909116151560808201529695505050505050565b83836129598282610d8a565b6129755760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051612988929190615862565b908152602001604051809103902060006129db84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16612a0e5760405162461bcd60e51b8152600401610b5790615872565b610d828686600080600089896000612c4d565b600061013084604051612a3491906159f8565b9081526040516020918190038201812054612a5c9263ffffffff909116918691869101615d28565b6040516020818303038152906040528051906020012090509392505050565b612a95600080516020615fd2833981519152610807613906565b612ab15760405162461bcd60e51b8152600401610b5790615cf7565b6000612af489898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250610cff915050565b9050612b3d89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592508a91508990508888886145c1565b600080516020615f9283398151915289898989898989896040516111f3989796959493929190615b5d565b6000612b7561061e613906565b90506000612b8e612b84613906565b838c8c8c8c613a42565b9050611f5e8187878787613915565b60005b8781101561248757612c3b898983818110612bbd57612bbd6158da565b9050602002810190612bcf91906158f0565b898985818110612be157612be16158da565b9050602002810190612bf391906158f0565b898987818110612c0557612c056158da565b9050602002810190612c179190615936565b898989818110612c2957612c296158da565b90506020028101906108fc919061597f565b80612c45816159dd565b915050612ba0565b8787612c598282610d8a565b612c755760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051612c88929190615862565b90815260200160405180910390206000612cdb84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16612d0e5760405162461bcd60e51b8152600401610b5790615872565b6001600160a01b038816151580612d3357508680612d295750855b80612d315750825b155b612d4f5760405162461bcd60e51b8152600401610b5790615afd565b6000612d928b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250610cff915050565b9050612ddb8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508592508c91508b90508a8a8a6145c1565b600080516020615f928339815191528b8b8b8b8b8b8b8b604051612e06989796959493929190615b5d565b60405180910390a15050505050505050505050565b600082815260fb6020526040902060010154612e3681613f78565b610ebc8383614010565b8383612e4c8282610d8a565b612e685760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051612e7b929190615862565b90815260200160405180910390206000612ece84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff16612f015760405162461bcd60e51b8152600401610b5790615872565b61012d8686604051612f14929190615862565b90815260200160405180910390206000612f6788888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150612a219050565b8152602081019190915260409081016000908120805461ffff191681556001810182905560028101829055600301805460ff191690559051600080516020616019833981519152916113529189918991899189918190819081908190615c2b565b8585612fd48282610d8a565b612ff05760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051613003929190615862565b9081526020016040518091039020600061305684848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff166130895760405162461bcd60e51b8152600401610b5790615872565b8483146130a85760405162461bcd60e51b8152600401610b57906158a3565b8460005b81811015611f5e5760006131168b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c9150869050818110613104576131046158da565b90506020028101906108bc91906158f0565b90503687878481811061312b5761312b6158da565b905060a0020190506131ab8c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061317c9150506020850185615d48565b61318c6040860160208701615d48565b604086013560608701356131a660a0890160808a01615d48565b6145c1565b6000805160206160198339815191528c8c8c8c878181106131ce576131ce6158da565b90506020028101906131e091906158f0565b6131ed6020870187615d48565b6131fd6040880160208901615d48565b6040880135606089013561321760a08b0160808c01615d48565b60405161322c99989796959493929190615c2b565b60405180910390a150508080613241906159dd565b9150506130ac565b613263600080516020615fd2833981519152610807613906565b61327f5760405162461bcd60e51b8152600401610b5790615cf7565b611015816146bc565b6132a2600080516020615fd2833981519152610807613906565b6132be5760405162461bcd60e51b8152600401610b5790615cf7565b61012f54604051632b1fd99560e01b81526001600160a01b03808a16921690632b1fd995906132f3908a908a90600401615c17565b60206040518083038186803b15801561330b57600080fd5b505afa15801561331f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133439190615c81565b6001600160a01b0316146133935760405162461bcd60e51b81526020600482015260176024820152766572726f725f6e6f744f776e65724f66454e534e616d6560481b6044820152606401610b57565b610c3e8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915087905086613a42565b84846133e58282610d8a565b6134015760405162461bcd60e51b8152600401610b5790615830565b61012d8282604051613414929190615862565b9081526020016040518091039020600061346784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506103779250613906915050565b815260208101919091526040016000206003015460ff1661349a5760405162461bcd60e51b8152600401610b5790615872565b60006134df88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250899150612a219050565b90506000611dba898984886000614261565b6134f9614c32565b83836135058282610d8a565b6135215760405162461bcd60e51b8152600401610b5790615830565b61012d8686604051613534929190615862565b9081526020016040518091039020600061358588888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250610cff915050565b815260208082019290925260409081016000908120825160a081018452815460ff808216151583526101009091048116151595820195909552600182015481850152600282015460608201526003909101549093161515608084015290519194509061012d906135f89089908990615862565b9081526020016040518091039020600061364789898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250610cff915050565b81526020808201929092526040908101600020815160a081018352815460ff8082161515835261010090910481161515948201949094526001820154818401526002820154606082015260039091015490921615156080830152850151909150421180156136b9575042816040015110155b156136c957604080820151908501525b4284606001511080156136e0575042816060015110155b156136f057606080820151908501525b5050509392505050565b60008061373e86868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250610cff915050565b9050600083600481111561375457613754615ae7565b14156137935761012d868660405161376d929190615862565b9081526040805160209281900383019020600093845290915290205460ff16905061255c565b60018360048111156137a7576137a7615ae7565b14156137eb5761012d86866040516137c0929190615862565b90815260408051602092819003830190206000938452909152902054610100900460ff16905061255c565b60028360048111156137ff576137ff615ae7565b1415613846574261012d8787604051613819929190615862565b9081526020016040518091039020600083815260200190815260200160002060010154101591505061255c565b600383600481111561385a5761385a615ae7565b14156138a1574261012d8787604051613874929190615862565b9081526020016040518091039020600083815260200190815260200160002060020154101591505061255c565b60048360048111156138b5576138b5615ae7565b1415611a615761012d86866040516138ce929190615862565b9081526040805160209281900383019020600093845290915290206003015460ff16905061255c565b600061255c84846000856136fa565b60006139106146de565b905090565b8281146139345760405162461bcd60e51b8152600401610b57906158a3565b8260005b81811015613a39576000848483818110613954576139546158da565b905060a0020180360381019061396a9190615d63565b9050600061399989898986818110613984576139846158da565b905060200201602081019061037791906150f1565b90506139be8982846000015185602001518660400151876060015188608001516145c1565b600080516020615f92833981519152898989868181106139e0576139e06158da565b90506020020160208101906139f591906150f1565b84516020860151604080880151606089015160808a01519251613a1c979695949390615de2565b60405180910390a150508080613a31906159dd565b915050613938565b50505050505050565b606081613a915760405162461bcd60e51b815260206004820152601f60248201527f6572726f725f6d657461646174614a736f6e537472696e674973456d707479006044820152606401610b57565b600085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293506001925050505b8151811015613c9157818181518110613aeb57613aeb6158da565b01602001516001600160f81b031916602d60f81b11801590613b3b5750603960f81b6001600160f81b031916828281518110613b2957613b296158da565b01602001516001600160f81b03191611155b80613ba35750818181518110613b5357613b536158da565b01602001516001600160f81b031916604160f81b11801590613ba35750602d60f91b6001600160f81b031916828281518110613b9157613b916158da565b01602001516001600160f81b03191611155b80613c0b5750818181518110613bbb57613bbb6158da565b01602001516001600160f81b031916606160f81b11801590613c0b5750603d60f91b6001600160f81b031916828281518110613bf957613bf96158da565b01602001516001600160f81b03191611155b80613c3a5750818181518110613c2357613c236158da565b6020910101516001600160f81b031916605f60f81b145b613c7f5760405162461bcd60e51b81526020600482015260166024820152756572726f725f696e76616c696450617468436861727360501b6044820152606401610b57565b80613c89816159dd565b915050613ad0565b5080600081518110613ca557613ca56158da565b6020910101516001600160f81b031916602f60f81b14613d075760405162461bcd60e51b815260206004820152601c60248201527f6572726f725f706174684d757374537461727457697468536c617368000000006044820152606401610b57565b6000878787604051602001613d1e93929190615e31565b604051602081830303815290604052905061012e81604051613d4091906159f8565b90815260200160405180910390208054613d5990615a14565b159050613da45760405162461bcd60e51b81526020600482015260196024820152786572726f725f73747265616d416c726561647945786973747360381b6044820152606401610b57565b61013081604051613db591906159f8565b90815260405190819003602001902054613dd69063ffffffff166001615e59565b61013082604051613de791906159f8565b908152602001604051809103902060006101000a81548163ffffffff021916908363ffffffff160217905550848461012e83604051613e2691906159f8565b908152604051908190036020019020613e40929091614b74565b506040805160a08101825260018082526020820181905260001982840181905260608301526080820152905161012d90613e7b9084906159f8565b90815260200160405180910390206000613e95848d610cff565b81526020808201929092526040908101600020835181549385015161ffff1990941690151561ff0019161761010093151593909302929092178255828101516001830155606083015160028301556080909201516003909101805460ff1916911515919091179055517f0db027888a30ca08149af1347f6ce2f48daffedd9d6d21ab6249c4d802ce592f90613f2f90839088908890615e81565b60405180910390a1600080516020615f92833981519152818a600180600019806001604051613f649796959493929190615de2565b60405180910390a198975050505050505050565b61101581613f84613906565b614706565b613f938282612564565b610f4b57600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613fcc613906565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61401a8282612564565b15610f4b57600082815260fb602090815260408083206001600160a01b03851684529091529020805460ff19169055614051613906565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600080516020615fb2833981519152546001600160a01b031690565b6140cb600080516020615fd2833981519152610807613906565b6110155760405162461bcd60e51b8152600401610b5790615cf7565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561411a57610ebc8361475f565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561415357600080fd5b505afa925050508015614183575060408051601f3d908101601f1916820190925261418091810190615ea7565b60015b6141e65760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610b57565b600080516020615fb283398151915281146142555760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610b57565b50610ebc8383836147fb565b614269614c32565b600083600481111561427d5761427d615ae7565b14156142c5578161012d8787604051614297929190615862565b9081526040805160209281900383019020600088815292529020805460ff1916911515919091179055614444565b60018360048111156142d9576142d9615ae7565b1415614329578161012d87876040516142f3929190615862565b9081526040805160209281900383019020600088815292529020805461ff00191661010092151592909202919091179055614444565b600283600481111561433d5761433d615ae7565b1415614389578161434f576000614353565b6000195b61012d8787604051614366929190615862565b908152604080516020928190038301902060008881529252902060010155614444565b600383600481111561439d5761439d615ae7565b14156143e957816143af5760006143b3565b6000195b61012d87876040516143c6929190615862565b908152604080516020928190038301902060008881529252902060020155614444565b60048360048111156143fd576143fd615ae7565b1415614444578161012d8787604051614417929190615862565b9081526040805160209281900383019020600088815292529020600301805460ff19169115159190911790555b61012d8686604051614457929190615862565b9081526040805160209281900383018120600088815290845282902060a082018352805460ff8082161580158086526101009093048216151596850196909652600183015494840194909452600282015460608401526003909101549092161515608082015292506144cb57508060200151155b80156144d957508060800151155b80156144e85750428160400151105b80156144f75750428160600151105b1561454d5761012d868660405161450f929190615862565b9081526040805160209281900383019020600087815292528120805461ffff19168155600181018290556002810191909155600301805460ff191690555b95945050505050565b600054610100900460ff1661457d5760405162461bcd60e51b8152600401610b5790615ec0565b565b610f4b8282613f89565b600054610100900460ff166145b05760405162461bcd60e51b8152600401610b5790615ec0565b6145b8614556565b61101581614826565b841580156145cd575083155b80156145d7575080155b80156145e257504283105b80156145ed57504282105b156146455761012d8760405161460391906159f8565b9081526040805160209281900383019020600089815292528120805461ffff19168155600181018290556002810191909155600301805460ff19169055613a39565b600061012d8860405161465891906159f8565b90815260408051602092819003830190206000998a52909152909620805461ffff191695151561ff0019169590951761010094151594909402939093178455600184019190915560028301556003909101805460ff19169115159190911790555050565b609780546001600160a01b0319166001600160a01b0392909216919091179055565b6097546000906001600160a01b0316331415614701575060131936013560601c90565b503390565b6147108282612564565b610f4b5761471d8161484d565b61472883602061485f565b604051602001614739929190615f0b565b60408051601f198184030181529082905262461bcd60e51b8252610b57916004016152b2565b6001600160a01b0381163b6147cc5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610b57565b600080516020615fb283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61480483614a01565b6000825111806148115750805b15610ebc576148208383614a41565b50505050565b600054610100900460ff166146bc5760405162461bcd60e51b8152600401610b5790615ec0565b6060610b296001600160a01b03831660145b6060600061486e836002615bf8565b614879906002615be0565b6001600160401b0381111561489057614890614e8f565b6040519080825280601f01601f1916602001820160405280156148ba576020820181803683370190505b509050600360fc1b816000815181106148d5576148d56158da565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110614904576149046158da565b60200101906001600160f81b031916908160001a9053506000614928846002615bf8565b614933906001615be0565b90505b60018111156149ab576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110614967576149676158da565b1a60f81b82828151811061497d5761497d6158da565b60200101906001600160f81b031916908160001a90535060049490941c936149a481615f7a565b9050614936565b5083156149fa5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b57565b9392505050565b614a0a8161475f565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606149fa8383604051806060016040528060278152602001615ff2602791396060600080856001600160a01b031685604051614a7e91906159f8565b600060405180830381855af49150503d8060008114614ab9576040519150601f19603f3d011682016040523d82523d6000602084013e614abe565b606091505b5091509150614acf86838387614ad9565b9695505050505050565b60608315614b45578251614b3e576001600160a01b0385163b614b3e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b57565b508161255c565b61255c8383815115614b5a5781518083602001fd5b8060405162461bcd60e51b8152600401610b5791906152b2565b828054614b8090615a14565b90600052602060002090601f016020900481019282614ba25760008555614be8565b82601f10614bbb5782800160ff19823516178555614be8565b82800160010185558215614be8579182015b82811115614be8578235825591602001919060010190614bcd565b50614bf4929150614c60565b5090565b508054614c0490615a14565b6000825580601f10614c14575050565b601f0160209004906000526020600020908101906110159190614c60565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b5b80821115614bf45760008155600101614c61565b600060208284031215614c8757600080fd5b81356001600160e01b0319811681146149fa57600080fd5b60008083601f840112614cb157600080fd5b5081356001600160401b03811115614cc857600080fd5b602083019150836020828501011115614ce057600080fd5b9250929050565b60008083601f840112614cf957600080fd5b5081356001600160401b03811115614d1057600080fd5b6020830191508360208260051b8501011115614ce057600080fd5b60008083601f840112614d3d57600080fd5b5081356001600160401b03811115614d5457600080fd5b60208301915083602060a083028501011115614ce057600080fd5b60008060008060008060608789031215614d8857600080fd5b86356001600160401b0380821115614d9f57600080fd5b614dab8a838b01614c9f565b90985096506020890135915080821115614dc457600080fd5b614dd08a838b01614ce7565b90965094506040890135915080821115614de957600080fd5b50614df689828a01614d2b565b979a9699509497509295939492505050565b60008060008060008060608789031215614e2157600080fd5b86356001600160401b0380821115614e3857600080fd5b614e448a838b01614ce7565b90985096506020890135915080821115614e5d57600080fd5b614e698a838b01614ce7565b90965094506040890135915080821115614e8257600080fd5b50614df689828a01614ce7565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115614ebf57614ebf614e8f565b604051601f8501601f19908116603f01168101908282118183101715614ee757614ee7614e8f565b81604052809350858152868686011115614f0057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112614f2b57600080fd5b6149fa83833560208501614ea5565b6001600160a01b038116811461101557600080fd5b60008060408385031215614f6257600080fd5b82356001600160401b03811115614f7857600080fd5b614f8485828601614f1a565b9250506020830135614f9581614f3a565b809150509250929050565b60008060008060408587031215614fb657600080fd5b84356001600160401b0380821115614fcd57600080fd5b614fd988838901614c9f565b90965094506020870135915080821115614ff257600080fd5b50614fff87828801614c9f565b95989497509550505050565b60006020828403121561501d57600080fd5b5035919050565b6000806020838503121561503757600080fd5b82356001600160401b0381111561504d57600080fd5b61505985828601614c9f565b90969095509350505050565b80356005811061507457600080fd5b919050565b60008060006040848603121561508e57600080fd5b83356001600160401b038111156150a457600080fd5b6150b086828701614c9f565b90945092506150c3905060208501615065565b90509250925092565b600080604083850312156150df57600080fd5b823591506020830135614f9581614f3a565b60006020828403121561510357600080fd5b81356149fa81614f3a565b6000806000806060858703121561512457600080fd5b84356001600160401b0381111561513a57600080fd5b61514687828801614c9f565b909550935050602085013561515a81614f3a565b915061516860408601615065565b905092959194509250565b6000806040838503121561518657600080fd5b823561519181614f3a565b91506020830135614f9581614f3a565b600080604083850312156151b457600080fd5b82356151bf81614f3a565b915060208301356001600160401b038111156151da57600080fd5b8301601f810185136151eb57600080fd5b6151fa85823560208401614ea5565b9150509250929050565b60008060006040848603121561521957600080fd5b83356001600160401b0381111561522f57600080fd5b61523b86828701614c9f565b909450925050602084013561524f81614f3a565b809150509250925092565b60005b8381101561527557818101518382015260200161525d565b838111156148205750506000910152565b6000815180845261529e81602086016020860161525a565b601f01601f19169290920160200192915050565b6020815260006149fa6020830184615286565b6000806000806000606086880312156152dd57600080fd5b85356001600160401b03808211156152f457600080fd5b61530089838a01614c9f565b9097509550602088013591508082111561531957600080fd5b5061532688828901614c9f565b9094509250615339905060408701615065565b90509295509295909350565b6000806000806000806060878903121561535e57600080fd5b86356001600160401b038082111561537557600080fd5b6153818a838b01614c9f565b9098509650602089013591508082111561539a57600080fd5b6153a68a838b01614c9f565b909650945060408901359150808211156153bf57600080fd5b50614df689828a01614c9f565b6000806000806000608086880312156153e457600080fd5b85356001600160401b038111156153fa57600080fd5b61540688828901614c9f565b909650945050602086013561541a81614f3a565b925061542860408701615065565b949793965091946060013592915050565b60006020828403121561544b57600080fd5b81356001600160401b0381111561546157600080fd5b61255c84828501614f1a565b6000806000806060858703121561548357600080fd5b84356001600160401b0381111561549957600080fd5b6154a587828801614c9f565b90989097506020870135966040013595509350505050565b6000806000604084860312156154d257600080fd5b83356001600160401b03808211156154e957600080fd5b6154f587838801614f1a565b9450602086013591508082111561550b57600080fd5b5061551886828701614c9f565b9497909650939450505050565b8035801515811461507457600080fd5b60008060008060008060008060e0898b03121561555157600080fd5b88356001600160401b0381111561556757600080fd5b6155738b828c01614c9f565b909950975050602089013561558781614f3a565b955061559560408a01615525565b94506155a360608a01615525565b93506080890135925060a089013591506155bf60c08a01615525565b90509295985092959890939650565b6000806000806000806000806080898b0312156155ea57600080fd5b88356001600160401b038082111561560157600080fd5b61560d8c838d01614c9f565b909a50985060208b013591508082111561562657600080fd5b6156328c838d01614c9f565b909850965060408b013591508082111561564b57600080fd5b6156578c838d01614ce7565b909650945060608b013591508082111561567057600080fd5b5061567d8b828c01614d2b565b999c989b5096995094979396929594505050565b6000806000806000806000806080898b0312156156ad57600080fd5b88356001600160401b03808211156156c457600080fd5b6156d08c838d01614ce7565b909a50985060208b01359150808211156156e957600080fd5b6156f58c838d01614ce7565b909850965060408b013591508082111561570e57600080fd5b61571a8c838d01614ce7565b909650945060608b013591508082111561573357600080fd5b5061567d8b828c01614ce7565b60008060008060008060006080888a03121561575b57600080fd5b873561576681614f3a565b965060208801356001600160401b038082111561578257600080fd5b61578e8b838c01614c9f565b909850965060408a01359150808211156157a757600080fd5b6157b38b838c01614c9f565b909650945060608a01359150808211156157cc57600080fd5b506157d98a828b01614c9f565b989b979a50959850939692959293505050565b600080604083850312156157ff57600080fd5b82356001600160401b0381111561581557600080fd5b61582185828601614f1a565b95602094909401359450505050565b602080825260189082015277195c9c9bdc97dcdd1c99585b511bd95cd39bdd115e1a5cdd60421b604082015260600190565b8183823760009101908152919050565b60208082526017908201527632b93937b92fb737a9b430b932a832b936b4b9b9b4b7b760491b604082015260600190565b6020808252601e908201527f6572726f725f696e76616c6964496e70757441727261794c656e677468730000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261590757600080fd5b8301803591506001600160401b0382111561592157600080fd5b602001915036819003821315614ce057600080fd5b6000808335601e1984360301811261594d57600080fd5b8301803591506001600160401b0382111561596757600080fd5b6020019150600581901b3603821315614ce057600080fd5b6000808335601e1984360301811261599657600080fd5b8301803591506001600160401b038211156159b057600080fd5b602001915060a081023603821315614ce057600080fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156159f1576159f16159c7565b5060010190565b60008251615a0a81846020870161525a565b9190910192915050565b600181811c90821680615a2857607f821691505b60208210811415615a4957634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b6020808252601b908201527f6572726f725f7075626c696343616e4f6e6c79537562735075626c0000000000604082015260600190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60e081526000615b7160e083018a8c615b34565b6001600160a01b039890981660208301525094151560408601529215156060850152608084019190915260a0830152151560c09091015292915050565b604081526000615bc2604083018688615b34565b8281036020840152615bd5818587615b34565b979650505050505050565b60008219821115615bf357615bf36159c7565b500190565b6000816000190483118215151615615c1257615c126159c7565b500290565b60208152600061255c602083018486615b34565b60e081526000615c3f60e083018b8d615b34565b8281036020840152615c52818a8c615b34565b971515604084015250509315156060850152608084019290925260a0830152151560c090910152949350505050565b600060208284031215615c9357600080fd5b81516149fa81614f3a565b608081526000615cb260808301898b615b34565b8281036020840152615cc581888a615b34565b90508281036040840152615cda818688615b34565b91505060018060a01b038316606083015298975050505050505050565b6020808252601790820152766572726f725f6d757374426554727573746564526f6c6560481b604082015260600190565b63ffffffff84168152604060208201526000612559604083018486615b34565b600060208284031215615d5a57600080fd5b6149fa82615525565b600060a08284031215615d7557600080fd5b60405160a081018181106001600160401b0382111715615d9757615d97614e8f565b604052615da383615525565b8152615db160208401615525565b60208201526040830135604082015260608301356060820152615dd660808401615525565b60808201529392505050565b60e081526000615df560e083018a615286565b6001600160a01b039890981660208301525094151560408601529215156060850152608084019190915260a0830152151560c090910152919050565b60008451615e4381846020890161525a565b8201838582376000930192835250909392505050565b600063ffffffff808316818516808303821115615e7857615e786159c7565b01949350505050565b604081526000615e946040830186615286565b8281036020840152614acf818587615b34565b600060208284031215615eb957600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351615f3d81601785016020880161525a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351615f6e81602884016020880161525a565b01602801949350505050565b600081615f8957615f896159c7565b50600019019056fed22d58032f55c61c3896b3f67eb399b25071b61e122a23d4cd06bc87d4b7b8c1360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc2de84d9fbdf6d06e2cc584295043dbd76046423b9f8bae9426d4fa5e7c03f4a7416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564d7c1097f3fd7d3ed5e2ed13f20679b83d528af948c2e5341971c4c7a7fe9ffd2a264697066735822122026bb63c66153bd83d82ba5515c36552931b22c695195b26035b301d31f49c36464736f6c63430008090033",
    "linkReferences": {},
    "deployedLinkReferences": {}
}
