{
  "_format": "hh-sol-artifact-1",
  "contractName": "PredicatePermitter2",
  "sourceName": "contracts/test/permitter/PredicatePermitter2.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "ERC1967InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1967NonPayable",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidInitialization",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotInitializing",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotLiquidity",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "PolicyIDEmpty",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "latestPermitResult",
          "type": "bool"
        }
      ],
      "name": "LatestPermitResult",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "policyID",
          "type": "string"
        }
      ],
      "name": "PolicySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "predicateManager",
          "type": "address"
        }
      ],
      "name": "PredicateManagerSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getLiquidityAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPolicy",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getPredicateManager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_admin",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_predicateManager",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "policyID",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "liquidity",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "encodedData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "permission",
          "type": "bytes"
        }
      ],
      "name": "permit",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "encodedData",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "permission",
          "type": "bytes"
        }
      ],
      "name": "permitOverride",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_liquidity",
          "type": "address"
        }
      ],
      "name": "setLiquidityAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "policyID",
          "type": "string"
        }
      ],
      "name": "setPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "serviceManager",
          "type": "address"
        }
      ],
      "name": "setPredicateManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "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": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516119686100fd600039600081816108b9015281816108e20152610a2801526119686000f3fe6080604052600436106100f35760003560e01c80637f5a57ac1161008a578063ad3cb1cc11610059578063ad3cb1cc14610293578063ce1e4626146102d1578063e0a7704a146102e6578063f2fde38b1461030657600080fd5b80637f5a57ac146102195780638da5cb5b14610239578063901afa5f1461024e578063a4b3bc011461027e57600080fd5b806352d1902d116100c657806352d1902d146101a157806365e8e4f4146101c45780636b4c991b146101e4578063715018a61461020457600080fd5b806312384c88146100f85780631a6865021461012f5780634f1ef2861461014f578063525fa81f14610164575b600080fd5b34801561010457600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013b57600080fd5b50600054610112906001600160a01b031681565b61016261015d36600461114a565b610326565b005b34801561017057600080fd5b5061016261017f366004611197565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156101ad57600080fd5b506101b6610345565b604051908152602001610126565b3480156101d057600080fd5b506101626101df3660046111fa565b610362565b3480156101f057600080fd5b506101626101ff36600461126f565b6105bb565b34801561021057600080fd5b5061016261063f565b34801561022557600080fd5b506101626102343660046112b0565b610653565b34801561024557600080fd5b50610112610722565b34801561025a57600080fd5b5061026e6102693660046112b0565b610757565b6040519015158152602001610126565b34801561028a57600080fd5b506101126107e3565b34801561029f57600080fd5b506102c4604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610126919061138d565b3480156102dd57600080fd5b506102c46107f2565b3480156102f257600080fd5b50610162610301366004611197565b6107fc565b34801561031257600080fd5b50610162610321366004611197565b61086b565b61032e6108ae565b61033782610953565b610341828261095b565b5050565b600061034f610a1d565b506000805160206118f383398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156103a75750825b90506000826001600160401b031660011480156103c35750303b155b9050811580156103d1575080155b156103ef5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561041957845460ff60401b1916600160401b1785555b6001600160a01b038a16158061043657506001600160a01b038916155b8061044857506001600160a01b038816155b1561046657604051639fabe1c160e01b815260040160405180910390fd5b600086900361048857604051634a40f49b60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038b161790556104ac8a610a66565b6104b4610a77565b6104f48888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a7f92505050565b7f115a7076b27726a2ae5bd26756c4e4ec6b292eb6151f84772978a722b09271a587876040516105259291906113a0565b60405180910390a16040516001600160a01b03891681527f282797d873547dfc33f40236c7b1e0c8c816e2784b7ede18c24a90179446b0269060200160405180910390a183156105af57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6105c3610ad8565b61060282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b0a92505050565b7f115a7076b27726a2ae5bd26756c4e4ec6b292eb6151f84772978a722b09271a582826040516106339291906113a0565b60405180910390a15050565b610647610ad8565b6106516000610b44565b565b600080546001600160a01b03198116301782556001600160a01b03169061067c838501856114e8565b905060006106c48288888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508d9150610bb59050565b600080546001600160a01b0319166001600160a01b03861617905560405181151581529091507f1b4373da99f5598362de0fb1615886b12c81583375cacce8f3b248433849d4359060200160405180910390a1505050505050505050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600080546001600160a01b031633146107835760405163892ae32f60e01b815260040160405180910390fd5b6000610791838501856114e8565b90506107d78187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c9150610bb59050565b98975050505050505050565b60006107ed610d42565b905090565b60606107ed610d59565b610804610ad8565b60008051602061191383398151915280546001600160a01b0319166001600160a01b0383161790556040516001600160a01b03821681527f282797d873547dfc33f40236c7b1e0c8c816e2784b7ede18c24a90179446b0269060200160405180910390a150565b610873610ad8565b6001600160a01b0381166108a257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6108ab81610b44565b50565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061093557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109296000805160206118f3833981519152546001600160a01b031690565b6001600160a01b031614155b156106515760405163703e46dd60e11b815260040160405180910390fd5b6108ab610ad8565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156109b5575060408051601f3d908101601f191682019092526109b2918101906115cb565b60015b6109dd57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610899565b6000805160206118f38339815191528114610a0e57604051632a87526960e21b815260048101829052602401610899565b610a188383610e1c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106515760405163703e46dd60e11b815260040160405180910390fd5b610a6e610e72565b6108ab81610ebb565b610651610e72565b60008051602061191383398151915280546001600160a01b0319166001600160a01b0384161781557f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99301610ad2838261166c565b50505050565b33610ae1610722565b6001600160a01b0316146106515760405163118cdaa760e01b8152336004820152602401610899565b6000805160206119138339815191527f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99301610a18838261166c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000806000805160206119138339815191529050600060405180610100016040528088600001518152602001866001600160a01b03168152602001306001600160a01b03168152602001858152602001878152602001836001018054610c1a906115e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c46906115e4565b8015610c935780601f10610c6857610100808354040283529160200191610c93565b820191906000526020600020905b815481529060010190602001808311610c7657829003601f168201915b50505091835250506040808a0180515163ffffffff166020808501919091528b0151928201929092528454915160608b015191516318cea58d60e01b81529394506001600160a01b03909216926318cea58d92610cf49286926004016117cb565b6020604051808303816000875af1158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3791906118b4565b979650505050505050565b600080600080516020611913833981519152610747565b7f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99301805460609160008051602061191383398151915291610d98906115e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc4906115e4565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505091505090565b610e2582610ec3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e6a57610a188282610f28565b610341610f9e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661065157604051631afcd79f60e31b815260040160405180910390fd5b610873610e72565b806001600160a01b03163b600003610ef957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610899565b6000805160206118f383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610f4591906118d6565b600060405180830381855af49150503d8060008114610f80576040519150601f19603f3d011682016040523d82523d6000602084013e610f85565b606091505b5091509150610f95858383610fbd565b95945050505050565b34156106515760405163b398979f60e01b815260040160405180910390fd5b606082610fd257610fcd8261101c565b611015565b8151158015610fe957506001600160a01b0384163b155b1561101257604051639996b31560e01b81526001600160a01b0385166004820152602401610899565b50805b9392505050565b80511561102c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461105c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561109957611099611061565b60405290565b604051601f8201601f191681016001600160401b03811182821017156110c7576110c7611061565b604052919050565b6000806001600160401b038411156110e9576110e9611061565b50601f8301601f19166020016110fe8161109f565b91505082815283838301111561111357600080fd5b828260208301376000602084830101529392505050565b600082601f83011261113b57600080fd5b611015838335602085016110cf565b6000806040838503121561115d57600080fd5b61116683611045565b915060208301356001600160401b0381111561118157600080fd5b61118d8582860161112a565b9150509250929050565b6000602082840312156111a957600080fd5b61101582611045565b60008083601f8401126111c457600080fd5b5081356001600160401b038111156111db57600080fd5b6020830191508360208285010111156111f357600080fd5b9250929050565b60008060008060006080868803121561121257600080fd5b61121b86611045565b945061122960208701611045565b935061123760408701611045565b925060608601356001600160401b0381111561125257600080fd5b61125e888289016111b2565b969995985093965092949392505050565b6000806020838503121561128257600080fd5b82356001600160401b0381111561129857600080fd5b6112a4858286016111b2565b90969095509350505050565b600080600080600080608087890312156112c957600080fd5b6112d287611045565b95506020870135945060408701356001600160401b038111156112f457600080fd5b61130089828a016111b2565b90955093505060608701356001600160401b0381111561131f57600080fd5b61132b89828a016111b2565b979a9699509497509295939492505050565b60005b83811015611358578181015183820152602001611340565b50506000910152565b6000815180845261137981602086016020860161133d565b601f01601f19169290920160200192915050565b6020815260006110156020830184611361565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006001600160401b038211156113e8576113e8611061565b5060051b60200190565b600082601f83011261140357600080fd5b8135611416611411826113cf565b61109f565b8082825260208201915060208360051b86010192508583111561143857600080fd5b602085015b8381101561145c5761144e81611045565b83526020928301920161143d565b5095945050505050565b600082601f83011261147757600080fd5b8135611485611411826113cf565b8082825260208201915060208360051b8601019250858311156114a757600080fd5b602085015b8381101561145c5780356001600160401b038111156114ca57600080fd5b6114d9886020838a010161112a565b845250602092830192016114ac565b6000602082840312156114fa57600080fd5b81356001600160401b0381111561151057600080fd5b82016080818503121561152257600080fd5b61152a611077565b81356001600160401b0381111561154057600080fd5b8201601f8101861361155157600080fd5b611560868235602084016110cf565b8252506020828101359082015260408201356001600160401b0381111561158657600080fd5b611592868285016113f2565b60408301525060608201356001600160401b038111156115b157600080fd5b6115bd86828501611466565b606083015250949350505050565b6000602082840312156115dd57600080fd5b5051919050565b600181811c908216806115f857607f821691505b60208210810361161857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a1857806000526020600020601f840160051c810160208510156116455750805b601f840160051c820191505b818110156116655760008155600101611651565b5050505050565b81516001600160401b0381111561168557611685611061565b6116998161169384546115e4565b8461161e565b6020601f8211600181146116cd57600083156116b55750848201515b600019600385901b1c1916600184901b178455611665565b600084815260208120601f198516915b828110156116fd57878501518255602094850194600190920191016116dd565b508482101561171b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600081518084526020840193506020830160005b828110156117655781516001600160a01b031686526020958601959091019060010161173e565b5093949350505050565b600082825180855260208501945060208160051b8301016020850160005b838110156117bf57601f198584030188526117a9838351611361565b602098890198909350919091019060010161178d565b50909695505050505050565b606081526000845161010060608401526117e9610160840182611361565b9050602086015161180560808501826001600160a01b03169052565b5060408601516001600160a01b031660a0840152606086015160c08401526080860151838203605f190160e085015261183e8282611361565b91505060a0860151605f198483030161010085015261185d8282611361565b91505060c086015161187861012085018263ffffffff169052565b5060e08601516101408401528281036020840152611896818661172a565b905082810360408401526118aa818561176f565b9695505050505050565b6000602082840312156118c657600080fd5b8151801515811461101557600080fd5b600082516118e881846020870161133d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99300a2646970667358221220a174f824229c0747ff2e59c607ebbdaa55aa0b0d6531ccd7a1c4a825c206de0a64736f6c634300081b0033",
  "deployedBytecode": "0x6080604052600436106100f35760003560e01c80637f5a57ac1161008a578063ad3cb1cc11610059578063ad3cb1cc14610293578063ce1e4626146102d1578063e0a7704a146102e6578063f2fde38b1461030657600080fd5b80637f5a57ac146102195780638da5cb5b14610239578063901afa5f1461024e578063a4b3bc011461027e57600080fd5b806352d1902d116100c657806352d1902d146101a157806365e8e4f4146101c45780636b4c991b146101e4578063715018a61461020457600080fd5b806312384c88146100f85780631a6865021461012f5780634f1ef2861461014f578063525fa81f14610164575b600080fd5b34801561010457600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013b57600080fd5b50600054610112906001600160a01b031681565b61016261015d36600461114a565b610326565b005b34801561017057600080fd5b5061016261017f366004611197565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b3480156101ad57600080fd5b506101b6610345565b604051908152602001610126565b3480156101d057600080fd5b506101626101df3660046111fa565b610362565b3480156101f057600080fd5b506101626101ff36600461126f565b6105bb565b34801561021057600080fd5b5061016261063f565b34801561022557600080fd5b506101626102343660046112b0565b610653565b34801561024557600080fd5b50610112610722565b34801561025a57600080fd5b5061026e6102693660046112b0565b610757565b6040519015158152602001610126565b34801561028a57600080fd5b506101126107e3565b34801561029f57600080fd5b506102c4604051806040016040528060058152602001640352e302e360dc1b81525081565b604051610126919061138d565b3480156102dd57600080fd5b506102c46107f2565b3480156102f257600080fd5b50610162610301366004611197565b6107fc565b34801561031257600080fd5b50610162610321366004611197565b61086b565b61032e6108ae565b61033782610953565b610341828261095b565b5050565b600061034f610a1d565b506000805160206118f383398151915290565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156103a75750825b90506000826001600160401b031660011480156103c35750303b155b9050811580156103d1575080155b156103ef5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561041957845460ff60401b1916600160401b1785555b6001600160a01b038a16158061043657506001600160a01b038916155b8061044857506001600160a01b038816155b1561046657604051639fabe1c160e01b815260040160405180910390fd5b600086900361048857604051634a40f49b60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038b161790556104ac8a610a66565b6104b4610a77565b6104f48888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610a7f92505050565b7f115a7076b27726a2ae5bd26756c4e4ec6b292eb6151f84772978a722b09271a587876040516105259291906113a0565b60405180910390a16040516001600160a01b03891681527f282797d873547dfc33f40236c7b1e0c8c816e2784b7ede18c24a90179446b0269060200160405180910390a183156105af57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b6105c3610ad8565b61060282828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610b0a92505050565b7f115a7076b27726a2ae5bd26756c4e4ec6b292eb6151f84772978a722b09271a582826040516106339291906113a0565b60405180910390a15050565b610647610ad8565b6106516000610b44565b565b600080546001600160a01b03198116301782556001600160a01b03169061067c838501856114e8565b905060006106c48288888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508d9150610bb59050565b600080546001600160a01b0319166001600160a01b03861617905560405181151581529091507f1b4373da99f5598362de0fb1615886b12c81583375cacce8f3b248433849d4359060200160405180910390a1505050505050505050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b600080546001600160a01b031633146107835760405163892ae32f60e01b815260040160405180910390fd5b6000610791838501856114e8565b90506107d78187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508c9150610bb59050565b98975050505050505050565b60006107ed610d42565b905090565b60606107ed610d59565b610804610ad8565b60008051602061191383398151915280546001600160a01b0319166001600160a01b0383161790556040516001600160a01b03821681527f282797d873547dfc33f40236c7b1e0c8c816e2784b7ede18c24a90179446b0269060200160405180910390a150565b610873610ad8565b6001600160a01b0381166108a257604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6108ab81610b44565b50565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061093557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109296000805160206118f3833981519152546001600160a01b031690565b6001600160a01b031614155b156106515760405163703e46dd60e11b815260040160405180910390fd5b6108ab610ad8565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156109b5575060408051601f3d908101601f191682019092526109b2918101906115cb565b60015b6109dd57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610899565b6000805160206118f38339815191528114610a0e57604051632a87526960e21b815260048101829052602401610899565b610a188383610e1c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106515760405163703e46dd60e11b815260040160405180910390fd5b610a6e610e72565b6108ab81610ebb565b610651610e72565b60008051602061191383398151915280546001600160a01b0319166001600160a01b0384161781557f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99301610ad2838261166c565b50505050565b33610ae1610722565b6001600160a01b0316146106515760405163118cdaa760e01b8152336004820152602401610899565b6000805160206119138339815191527f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99301610a18838261166c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6000806000805160206119138339815191529050600060405180610100016040528088600001518152602001866001600160a01b03168152602001306001600160a01b03168152602001858152602001878152602001836001018054610c1a906115e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610c46906115e4565b8015610c935780601f10610c6857610100808354040283529160200191610c93565b820191906000526020600020905b815481529060010190602001808311610c7657829003601f168201915b50505091835250506040808a0180515163ffffffff166020808501919091528b0151928201929092528454915160608b015191516318cea58d60e01b81529394506001600160a01b03909216926318cea58d92610cf49286926004016117cb565b6020604051808303816000875af1158015610d13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3791906118b4565b979650505050505050565b600080600080516020611913833981519152610747565b7f804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99301805460609160008051602061191383398151915291610d98906115e4565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc4906115e4565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b505050505091505090565b610e2582610ec3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e6a57610a188282610f28565b610341610f9e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661065157604051631afcd79f60e31b815260040160405180910390fd5b610873610e72565b806001600160a01b03163b600003610ef957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610899565b6000805160206118f383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610f4591906118d6565b600060405180830381855af49150503d8060008114610f80576040519150601f19603f3d011682016040523d82523d6000602084013e610f85565b606091505b5091509150610f95858383610fbd565b95945050505050565b34156106515760405163b398979f60e01b815260040160405180910390fd5b606082610fd257610fcd8261101c565b611015565b8151158015610fe957506001600160a01b0384163b155b1561101257604051639996b31560e01b81526001600160a01b0385166004820152602401610899565b50805b9392505050565b80511561102c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461105c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b038111828210171561109957611099611061565b60405290565b604051601f8201601f191681016001600160401b03811182821017156110c7576110c7611061565b604052919050565b6000806001600160401b038411156110e9576110e9611061565b50601f8301601f19166020016110fe8161109f565b91505082815283838301111561111357600080fd5b828260208301376000602084830101529392505050565b600082601f83011261113b57600080fd5b611015838335602085016110cf565b6000806040838503121561115d57600080fd5b61116683611045565b915060208301356001600160401b0381111561118157600080fd5b61118d8582860161112a565b9150509250929050565b6000602082840312156111a957600080fd5b61101582611045565b60008083601f8401126111c457600080fd5b5081356001600160401b038111156111db57600080fd5b6020830191508360208285010111156111f357600080fd5b9250929050565b60008060008060006080868803121561121257600080fd5b61121b86611045565b945061122960208701611045565b935061123760408701611045565b925060608601356001600160401b0381111561125257600080fd5b61125e888289016111b2565b969995985093965092949392505050565b6000806020838503121561128257600080fd5b82356001600160401b0381111561129857600080fd5b6112a4858286016111b2565b90969095509350505050565b600080600080600080608087890312156112c957600080fd5b6112d287611045565b95506020870135945060408701356001600160401b038111156112f457600080fd5b61130089828a016111b2565b90955093505060608701356001600160401b0381111561131f57600080fd5b61132b89828a016111b2565b979a9699509497509295939492505050565b60005b83811015611358578181015183820152602001611340565b50506000910152565b6000815180845261137981602086016020860161133d565b601f01601f19169290920160200192915050565b6020815260006110156020830184611361565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60006001600160401b038211156113e8576113e8611061565b5060051b60200190565b600082601f83011261140357600080fd5b8135611416611411826113cf565b61109f565b8082825260208201915060208360051b86010192508583111561143857600080fd5b602085015b8381101561145c5761144e81611045565b83526020928301920161143d565b5095945050505050565b600082601f83011261147757600080fd5b8135611485611411826113cf565b8082825260208201915060208360051b8601019250858311156114a757600080fd5b602085015b8381101561145c5780356001600160401b038111156114ca57600080fd5b6114d9886020838a010161112a565b845250602092830192016114ac565b6000602082840312156114fa57600080fd5b81356001600160401b0381111561151057600080fd5b82016080818503121561152257600080fd5b61152a611077565b81356001600160401b0381111561154057600080fd5b8201601f8101861361155157600080fd5b611560868235602084016110cf565b8252506020828101359082015260408201356001600160401b0381111561158657600080fd5b611592868285016113f2565b60408301525060608201356001600160401b038111156115b157600080fd5b6115bd86828501611466565b606083015250949350505050565b6000602082840312156115dd57600080fd5b5051919050565b600181811c908216806115f857607f821691505b60208210810361161857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a1857806000526020600020601f840160051c810160208510156116455750805b601f840160051c820191505b818110156116655760008155600101611651565b5050505050565b81516001600160401b0381111561168557611685611061565b6116998161169384546115e4565b8461161e565b6020601f8211600181146116cd57600083156116b55750848201515b600019600385901b1c1916600184901b178455611665565b600084815260208120601f198516915b828110156116fd57878501518255602094850194600190920191016116dd565b508482101561171b5786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600081518084526020840193506020830160005b828110156117655781516001600160a01b031686526020958601959091019060010161173e565b5093949350505050565b600082825180855260208501945060208160051b8301016020850160005b838110156117bf57601f198584030188526117a9838351611361565b602098890198909350919091019060010161178d565b50909695505050505050565b606081526000845161010060608401526117e9610160840182611361565b9050602086015161180560808501826001600160a01b03169052565b5060408601516001600160a01b031660a0840152606086015160c08401526080860151838203605f190160e085015261183e8282611361565b91505060a0860151605f198483030161010085015261185d8282611361565b91505060c086015161187861012085018263ffffffff169052565b5060e08601516101408401528281036020840152611896818661172a565b905082810360408401526118aa818561176f565b9695505050505050565b6000602082840312156118c657600080fd5b8151801515811461101557600080fd5b600082516118e881846020870161133d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc804776a84f3d03ad8442127b1451e2fbbb6a715c681d6a83c9e9fca787b99300a2646970667358221220a174f824229c0747ff2e59c607ebbdaa55aa0b0d6531ccd7a1c4a825c206de0a64736f6c634300081b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
