{
  "_format": "hh-sol-artifact-1",
  "contractName": "InputVerifier",
  "sourceName": "contracts/InputVerifier.coprocessor.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "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": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UUPSUnauthorizedCallContext",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "slot",
          "type": "bytes32"
        }
      ],
      "name": "UUPSUnsupportedProxiableUUID",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "version",
          "type": "uint64"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "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": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CIPHERTEXTVERIFICATION_COPRO_TYPE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "HANDLE_VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UPGRADE_INTERFACE_VERSION",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCoprocessorAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getKMSVerifierAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getVersion",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "get_CIPHERTEXTVERIFICATION_COPRO_TYPE",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "initialOwner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "kmsVerifier",
      "outputs": [
        {
          "internalType": "contract KMSVerifier",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "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": "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"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "aclAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "userAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            }
          ],
          "internalType": "struct TFHEExecutor.ContextUserInputs",
          "name": "context",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "inputHandle",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "inputProof",
          "type": "bytes"
        }
      ],
      "name": "verifyCiphertext",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a080604052346100cc57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c166100bd57506001600160401b036002600160401b031982821601610078575b60405161249c90816100d1823960805181818161057e01526106d70152f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f8080610059565b63f92ee8a960e01b8152600490fd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806303b031cf1461012f5780630d8e6e2c1461012a5780631967d4a6146100f35780634d52c107146101255780634f1ef2861461012057806352d1902d1461011b5780636a8c8eb414610116578063715018a61461011157806379ba50971461010c57806384b0196e146101075780638da5cb5b146101025780638e188f43146100fd578063ad3cb1cc146100f8578063b578ba0d146100f3578063c4d66de8146100ee578063e30c3978146100e9578063f0ea684d146100e45763f2fde38b146100df575f80fd5b610c3a565b61012f565b610bf5565b610a71565b6103fc565b610a14565b6109e6565b6109a1565b6108c9565b6107e1565b610741565b610727565b6106bd565b61053d565b6104b3565b6101bb565b3461015d575f36600319011261015d576020604051739d6891a6240d6130c54ae243d8005063d05fe14b8152f35b5f80fd5b5f5b8381106101725750505f910152565b8181015183820152602001610163565b9060209161019b81518092818552858086019101610161565b601f01601f1916010190565b9060206101b8928181520190610182565b90565b3461015d575f36600319011261015d5761027c6101d6610ce1565b6102706101e16118ef565b916102626101ed61192b565b60246101f76118ef565b91604051968561021189975180926020808b019101610161565b860161103b60f11b6020820152610232825180936020602285019101610161565b0190601760f91b91826022820152610254825180936020602385019101610161565b019060238201520190610d1a565b03601f1981018352826102ed565b604051918291826101a7565b0390f35b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff8211176102b057604052565b610280565b60c0810190811067ffffffffffffffff8211176102b057604052565b6040810190811067ffffffffffffffff8211176102b057604052565b90601f8019910116810190811067ffffffffffffffff8211176102b057604052565b67ffffffffffffffff81116102b057601f01601f191660200190565b60405190610338826102b5565b608d82527f747261637441646472657373290000000000000000000000000000000000000060a0837f43697068657274657874566572696669636174696f6e466f72436f70726f286160208201527f6464726573732061636c416464726573732c6279746573333220686173684f6660408201527f436970686572746578742c75696e743235365b5d2068616e646c65734c69737460608201527f2c616464726573732075736572416464726573732c6164647265737320636f6e60808201520152565b3461015d575f36600319011261015d5761027c61041761032b565b604051918291602083526020830190610182565b600435906001600160a01b038216820361015d57565b602435906001600160a01b038216820361015d57565b604435906001600160a01b038216820361015d57565b81601f8201121561015d578035906104848261030f565b9261049260405194856102ed565b8284526020838301011161015d57815f926020809301838601378301015290565b3461015d57366003190160a0811261015d5760601361015d576040516104d881610294565b6104e061042b565b81526104ea610441565b60208201526104f7610457565b604082015260843567ffffffffffffffff811161015d5761027c9161052361052d92369060040161046d565b9060643590611262565b6040519081529081906020820190565b604036600319011261015d5761055161042b565b60243567ffffffffffffffff811161015d5761057190369060040161046d565b906001600160a01b0391827f00000000000000000000000000000000000000000000000000000000000000001680301490811561068f575b5061067d5760206004936105bb611b6f565b6040516352d1902d60e01b8152948591829086165afa5f938161064c575b506105ff57604051634c9c8ce360e01b81526001600160a01b0383166004820152602490fd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610633576106319250611e23565b005b604051632a87526960e21b815260048101849052602490fd5b61066f91945060203d602011610676575b61066781836102ed565b810190611b60565b925f6105d9565b503d61065d565b60405163703e46dd60e11b8152600490fd5b9050837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6105a9565b3461015d575f36600319011261015d576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361067d5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461015d575f36600319011261015d5760206040515f8152f35b3461015d575f36600319011261015d57610759611b6f565b5f6001600160a01b036001600160a01b03197f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008181541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080549182169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461015d575f36600319011261015d57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054160361082b5761063133611ba2565b60405163118cdaa760e01b8152336004820152602490fd5b919361087e6001600160a01b039295600f60f81b855261087060209760e0602088015260e0870190610182565b908582036040870152610182565b9360608401521660808201525f60a082015260c0818303910152602080845192838152019301915f5b8281106108b5575050505090565b8351855293810193928101926001016108a7565b3461015d575f36600319011261015d577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610978575b156109335761090f611c68565b610917611d4e565b9061027c610923610f97565b6040519384933091469186610843565b60405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610902565b3461015d575f36600319011261015d5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461015d575f36600319011261015d57602060405173c9990fefe0c27d31d0c2aa36196b085c0c4d456c8152f35b3461015d575f36600319011261015d5761027c604051610a33816102d1565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610182565b3461015d57602036600319011261015d57610a8a61042b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549067ffffffffffffffff60ff8360401c1615921680159081610bed575b6001149081610be3575b159081610bda575b50610bc8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805467ffffffffffffffff19166001179055610b219082610b87576116d4565b610b2757005b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468ff000000000000000019169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468ff00000000000000001916680100000000000000001790556116d4565b60405163f92ee8a960e01b8152600490fd5b9050155f610adb565b303b159150610ad3565b839150610ac9565b3461015d575f36600319011261015d5760206001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416604051908152f35b3461015d57602036600319011261015d57610c5361042b565b610c5b611b6f565b6001600160a01b03809116907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00826001600160a01b03198254161790557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b60405190610cee826102d1565b600d82527f496e7075745665726966696572000000000000000000000000000000000000006020830152565b90610d2d60209282815194859201610161565b0190565b634e487b7160e01b5f52603260045260245ffd5b805115610d525760200190565b610d31565b805160011015610d525760210190565b908151811015610d52570160200190565b15610d7f57565b60405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420696e646578000000000000000000000000000000000000006044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b908160051b9180830460201490151715610dee57565b610dc4565b908160031b917f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603610dee57565b908160051b917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603610dee57565b9081604102916041830403610dee57565b6022019081602211610dee57565b6063019081606311610dee57565b91908201809211610dee57565b601f0390601f8211610dee57565b15610ea257565b60405162461bcd60e51b815260206004820152601160248201527f57726f6e6720696e70757448616e646c650000000000000000000000000000006044820152606490fd5b15610eee57565b60405162461bcd60e51b815260206004820152601060248201527f456d70747920696e70757450726f6f66000000000000000000000000000000006044820152606490fd5b15610f3a57565b60405162461bcd60e51b815260206004820152601e60248201527f4572726f7220646573657269616c697a696e6720696e70757450726f6f6600006044820152606490fd5b67ffffffffffffffff81116102b05760051b60200190565b6040516020810181811067ffffffffffffffff8211176102b0576040525f8152905f368137565b90610fc882610f7f565b610fd560405191826102ed565b8281528092610fe6601f1991610f7f565b0190602036910137565b15610ff757565b60405162461bcd60e51b815260206004820152601460248201527f57726f6e672068616e646c652076657273696f6e0000000000000000000000006044820152606490fd5b8051821015610d525760209160051b010190565b604051906080820182811067ffffffffffffffff8211176102b057604052604182526060366020840137565b6040519060a0820182811067ffffffffffffffff8211176102b0576040525f608083828152826020820152606060408201528260608201520152565b906110c282610f7f565b6110cf60405191826102ed565b82815280926110e0601f1991610f7f565b01905f5b8281106110f057505050565b8060606020809385010152016110e4565b604051906080820182811067ffffffffffffffff8211176102b0576040525f6060838281528260208201528260408201520152565b9081602091031261015d5751801515810361015d5790565b9060a08201906001600160a01b03808251168452606060209260208101516020870152826040820151166040870152015116606084015260a06080840152835180925260c0830192602060c08460051b8301019501935f915b8483106111b75750505050505090565b90919293949584806111d560019360bf198682030187528a51610182565b98019301930191949392906111a7565b6040513d5f823e3d90fd5b156111f757565b60405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820756e69717565204b4d5320696e707574207369676e60448201527f61747572657300000000000000000000000000000000000000000000000000006064820152608490fd5b60208082018051939491936001600160a01b0316916112a2604085019361129085516001600160a01b031690565b86516001600160a01b0316918461197e565b94909360ff9360ff8960101c1695155f1461164c57929091879282516112c9811515610ee7565b61130d6113076113016112db87610d45565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b906113586113236113076113016112db89610d57565b9161132f8b8511610d78565b61135261134361133e86610e23565b610e72565b61134c85610e53565b90610e80565b14610f33565b60228501519161136781610fbe565b985f5b82811061160f57505061137b611050565b5f5b604181106115c5575061140b9061139261107c565b6113b36113a689516001600160a01b031690565b6001600160a01b03168252565b858a8201528b60408201526113e26113d28c516001600160a01b031690565b6001600160a01b03166060830152565b6114066113f688516001600160a01b031690565b6001600160a01b03166080830152565b611a34565b611414826110b8565b955f5b838110611528575050505061148b9161147e61146e6114a6986113d29461145d611450611442611101565b99516001600160a01b031690565b6001600160a01b03168952565b89880152516001600160a01b031690565b6001600160a01b03166040860152565b516001600160a01b031690565b60405163073371f960e11b815293849283926004840161114e565b03815f739d6891a6240d6130c54ae243d8005063d05fe14b5af1938415611523576114e46114ee956114e9936101b8985f926114f6575b50506111f0565b611b5a565b61103c565b518214610e9b565b6115159250803d1061151c575b61150d81836102ed565b810190611136565b5f806114dd565b503d611503565b6111e5565b82939495979996985061153c929192611050565b611546828c61103c565b52611551818b61103c565b505f5b8a604182106115735750506001915001908c9795989694939291611417565b6115bb826115b1856115ab6112db6115a5856115a061159761133e60019d9e610e23565b61134c87610e53565b610e80565b8b610d67565b9461103c565b51925f1a92610d67565b5301908391611554565b8293949597999698506115f26112db6115ec836115a06115e760019798610e23565b610e64565b8c610d67565b5f1a6115fe8285610d67565b5301908c979598969493929161137d565b60019192939495979996985060428160051b8b01015161163184821615610ff0565b61163b828d61103c565b5201908c979598969493929161136a565b505050919390508492506116728460ff61166b6113016112db87610d45565b1611610d78565b5f915f945b82861061168c575050506101b8925014610e9b565b919350916001906116b56113076113016112db6116af8a6115a06115e78a610dd8565b88610d67565b6116c66116c188610e8d565b610df3565b1b1794019391859391611677565b6116dc611ed9565b6116e4611ed9565b6001600160a01b038116156118bd576116fc90611ba2565b611704610ce1565b90604051611711816102d1565b6001808252602090603160f81b602084015261172b611ed9565b611733611ed9565b84519067ffffffffffffffff82116102b0577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1029261177a836117758654611c30565b611f1a565b602091601f841160011461181457505090806117b0926117b796975f92611809575b50508160011b915f199060031b1c19161790565b9055612032565b6117df5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b6118075f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b565b015190505f8061179c565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f908152601f198516987f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d949390925b8a83106118a657505050908392916001946117b798991061188e575b505050811b019055612032565b01515f1960f88460031b161c191690555f8080611881565b838501518655948501949381019391810191611865565b604051631e4fbdf760e01b81525f6004820152602490fd5b604051906118e2826102d1565b6001825260203681840137565b5f6118f86118d5565b90602182015b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530490816118fe57505090565b6001806119366118d5565b9160218301825b611948575b50505090565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156119795791908261193d565b611942565b6119e091605c9194939460405194859260208401976bffffffffffffffffffffffff199283809260601b168a5260601b16603485015260601b1660488301526119d08151809260208686019101610161565b810103603c8101845201826102ed565b519020805c91565b156119ef57565b60405162461bcd60e51b815260206004820152601c60248201527f436f70726f636573736f722061646472657373206d69736d61746368000000006044820152606490fd5b90611a3d61032b565b8051602080920120906001600160a01b0393848151169180820151604083015192604051938385019081858251919201905f5b818110611b465750505094611b3a94611b266118079b9995611b3f9995611b32958573c9990fefe0c27d31d0c2aa36196b085c0c4d456c9e9b0395611abd601f19978881018352826102ed565b519020611ae86080611ad960608501516001600160a01b031690565b9301516001600160a01b031690565b604080519687019a8b526001600160a01b03998a1660208c01528a019390935260608901528616608088015290941660a086015292839060c0860190565b039081018352826102ed565b519020612152565b611e0d565b16146119e8565b825184529287019291870191600101611a70565b6001905d565b9081602091031261015d575190565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361082b57565b6001600160a01b0319907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008281541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b0380931680948316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90600182811c92168015611c5e575b6020831014611c4a57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611c3f565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10291825492611c9c84611c30565b80845293602091600191828116908115611d285750600114611cc8575b505050611807925003836102ed565b5f9081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b828410611d1057506118079450505081016020015f8080611cb9565b85548885018301529485019487945092810192611cf4565b925050506020925061180794915060ff191682840152151560051b8201015f8080611cb9565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391825492611d8284611c30565b80845293602091600191828116908115611d285750600114611dad57505050611807925003836102ed565b5f9081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b828410611df557506118079450505081016020015f8080611cb9565b85548885018301529485019487945092810192611dd9565b6101b891611e1a916121d2565b9092919261222a565b90813b15611eb8576001600160a01b0382167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc816001600160a01b03198254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611e9d57611e9a916122b7565b50565b505034611ea657565b60405163b398979f60e01b8152600490fd5b604051634c9c8ce360e01b81526001600160a01b0383166004820152602490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611f0857565b604051631afcd79f60e31b8152600490fd5b601f8111611f26575050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d906020601f840160051c83019310611f9c575b601f0160051c01905b818110611f91575050565b5f8155600101611f86565b9091508190611f7d565b601f8111611fb2575050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75906020601f840160051c83019310612028575b601f0160051c01905b81811061201d575050565b5f8155600101612012565b9091508190612009565b90815167ffffffffffffffff81116102b0577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10390612079816120748454611c30565b611fa6565b602080601f83116001146120ae575081906120aa9394955f926118095750508160011b915f199060031b1c19161790565b9055565b90601f198316956120ff7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b7590565b925f905b88821061213a57505083600195969710612122575b505050811b019055565b01515f1960f88460031b161c191690555f8080612118565b80600185968294968601518155019501930190612103565b60429061215d6123e0565b61216561244a565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526121b4816102b5565b519020906040519161190160f01b8352600283015260228201522090565b8151919060418303612202576121fb9250602082015190606060408401519301515f1a906122fb565b9192909190565b50505f9160029190565b6004111561221657565b634e487b7160e01b5f52602160045260245ffd5b6122338161220c565b8061223c575050565b6122458161220c565b6001810361225f5760405163f645eedf60e01b8152600490fd5b6122688161220c565b600281036122895760405163fce698f760e01b815260048101839052602490fd5b8061229560039261220c565b1461229d5750565b6040516335e2f38360e21b81526004810191909152602490fd5b5f806101b893602081519101845af43d156122f3573d916122d78361030f565b926122e560405194856102ed565b83523d5f602085013e61237d565b60609161237d565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612372579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611523575f516001600160a01b0381161561236857905f905f90565b505f906001905f90565b5050505f9160039190565b906123a4575080511561239257805190602001fd5b60405163d6bda27560e01b8152600490fd5b815115806123d7575b6123b5575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156123ad565b6123e8611c68565b80519081156123f8576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156124255790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612452611d4e565b8051908115612462576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015612425579056fea164736f6c6343000818000a",
  "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f3560e01c806303b031cf1461012f5780630d8e6e2c1461012a5780631967d4a6146100f35780634d52c107146101255780634f1ef2861461012057806352d1902d1461011b5780636a8c8eb414610116578063715018a61461011157806379ba50971461010c57806384b0196e146101075780638da5cb5b146101025780638e188f43146100fd578063ad3cb1cc146100f8578063b578ba0d146100f3578063c4d66de8146100ee578063e30c3978146100e9578063f0ea684d146100e45763f2fde38b146100df575f80fd5b610c3a565b61012f565b610bf5565b610a71565b6103fc565b610a14565b6109e6565b6109a1565b6108c9565b6107e1565b610741565b610727565b6106bd565b61053d565b6104b3565b6101bb565b3461015d575f36600319011261015d576020604051739d6891a6240d6130c54ae243d8005063d05fe14b8152f35b5f80fd5b5f5b8381106101725750505f910152565b8181015183820152602001610163565b9060209161019b81518092818552858086019101610161565b601f01601f1916010190565b9060206101b8928181520190610182565b90565b3461015d575f36600319011261015d5761027c6101d6610ce1565b6102706101e16118ef565b916102626101ed61192b565b60246101f76118ef565b91604051968561021189975180926020808b019101610161565b860161103b60f11b6020820152610232825180936020602285019101610161565b0190601760f91b91826022820152610254825180936020602385019101610161565b019060238201520190610d1a565b03601f1981018352826102ed565b604051918291826101a7565b0390f35b634e487b7160e01b5f52604160045260245ffd5b6060810190811067ffffffffffffffff8211176102b057604052565b610280565b60c0810190811067ffffffffffffffff8211176102b057604052565b6040810190811067ffffffffffffffff8211176102b057604052565b90601f8019910116810190811067ffffffffffffffff8211176102b057604052565b67ffffffffffffffff81116102b057601f01601f191660200190565b60405190610338826102b5565b608d82527f747261637441646472657373290000000000000000000000000000000000000060a0837f43697068657274657874566572696669636174696f6e466f72436f70726f286160208201527f6464726573732061636c416464726573732c6279746573333220686173684f6660408201527f436970686572746578742c75696e743235365b5d2068616e646c65734c69737460608201527f2c616464726573732075736572416464726573732c6164647265737320636f6e60808201520152565b3461015d575f36600319011261015d5761027c61041761032b565b604051918291602083526020830190610182565b600435906001600160a01b038216820361015d57565b602435906001600160a01b038216820361015d57565b604435906001600160a01b038216820361015d57565b81601f8201121561015d578035906104848261030f565b9261049260405194856102ed565b8284526020838301011161015d57815f926020809301838601378301015290565b3461015d57366003190160a0811261015d5760601361015d576040516104d881610294565b6104e061042b565b81526104ea610441565b60208201526104f7610457565b604082015260843567ffffffffffffffff811161015d5761027c9161052361052d92369060040161046d565b9060643590611262565b6040519081529081906020820190565b604036600319011261015d5761055161042b565b60243567ffffffffffffffff811161015d5761057190369060040161046d565b906001600160a01b0391827f00000000000000000000000000000000000000000000000000000000000000001680301490811561068f575b5061067d5760206004936105bb611b6f565b6040516352d1902d60e01b8152948591829086165afa5f938161064c575b506105ff57604051634c9c8ce360e01b81526001600160a01b0383166004820152602490fd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610633576106319250611e23565b005b604051632a87526960e21b815260048101849052602490fd5b61066f91945060203d602011610676575b61066781836102ed565b810190611b60565b925f6105d9565b503d61065d565b60405163703e46dd60e11b8152600490fd5b9050837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6105a9565b3461015d575f36600319011261015d576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361067d5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461015d575f36600319011261015d5760206040515f8152f35b3461015d575f36600319011261015d57610759611b6f565b5f6001600160a01b036001600160a01b03197f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008181541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080549182169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461015d575f36600319011261015d57336001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0054160361082b5761063133611ba2565b60405163118cdaa760e01b8152336004820152602490fd5b919361087e6001600160a01b039295600f60f81b855261087060209760e0602088015260e0870190610182565b908582036040870152610182565b9360608401521660808201525f60a082015260c0818303910152602080845192838152019301915f5b8281106108b5575050505090565b8351855293810193928101926001016108a7565b3461015d575f36600319011261015d577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610978575b156109335761090f611c68565b610917611d4e565b9061027c610923610f97565b6040519384933091469186610843565b60405162461bcd60e51b815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610902565b3461015d575f36600319011261015d5760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461015d575f36600319011261015d57602060405173c9990fefe0c27d31d0c2aa36196b085c0c4d456c8152f35b3461015d575f36600319011261015d5761027c604051610a33816102d1565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610182565b3461015d57602036600319011261015d57610a8a61042b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549067ffffffffffffffff60ff8360401c1615921680159081610bed575b6001149081610be3575b159081610bda575b50610bc8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805467ffffffffffffffff19166001179055610b219082610b87576116d4565b610b2757005b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468ff000000000000000019169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468ff00000000000000001916680100000000000000001790556116d4565b60405163f92ee8a960e01b8152600490fd5b9050155f610adb565b303b159150610ad3565b839150610ac9565b3461015d575f36600319011261015d5760206001600160a01b037f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c005416604051908152f35b3461015d57602036600319011261015d57610c5361042b565b610c5b611b6f565b6001600160a01b03809116907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00826001600160a01b03198254161790557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b60405190610cee826102d1565b600d82527f496e7075745665726966696572000000000000000000000000000000000000006020830152565b90610d2d60209282815194859201610161565b0190565b634e487b7160e01b5f52603260045260245ffd5b805115610d525760200190565b610d31565b805160011015610d525760210190565b908151811015610d52570160200190565b15610d7f57565b60405162461bcd60e51b815260206004820152600d60248201527f496e76616c696420696e646578000000000000000000000000000000000000006044820152606490fd5b634e487b7160e01b5f52601160045260245ffd5b908160051b9180830460201490151715610dee57565b610dc4565b908160031b917f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603610dee57565b908160051b917f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811603610dee57565b9081604102916041830403610dee57565b6022019081602211610dee57565b6063019081606311610dee57565b91908201809211610dee57565b601f0390601f8211610dee57565b15610ea257565b60405162461bcd60e51b815260206004820152601160248201527f57726f6e6720696e70757448616e646c650000000000000000000000000000006044820152606490fd5b15610eee57565b60405162461bcd60e51b815260206004820152601060248201527f456d70747920696e70757450726f6f66000000000000000000000000000000006044820152606490fd5b15610f3a57565b60405162461bcd60e51b815260206004820152601e60248201527f4572726f7220646573657269616c697a696e6720696e70757450726f6f6600006044820152606490fd5b67ffffffffffffffff81116102b05760051b60200190565b6040516020810181811067ffffffffffffffff8211176102b0576040525f8152905f368137565b90610fc882610f7f565b610fd560405191826102ed565b8281528092610fe6601f1991610f7f565b0190602036910137565b15610ff757565b60405162461bcd60e51b815260206004820152601460248201527f57726f6e672068616e646c652076657273696f6e0000000000000000000000006044820152606490fd5b8051821015610d525760209160051b010190565b604051906080820182811067ffffffffffffffff8211176102b057604052604182526060366020840137565b6040519060a0820182811067ffffffffffffffff8211176102b0576040525f608083828152826020820152606060408201528260608201520152565b906110c282610f7f565b6110cf60405191826102ed565b82815280926110e0601f1991610f7f565b01905f5b8281106110f057505050565b8060606020809385010152016110e4565b604051906080820182811067ffffffffffffffff8211176102b0576040525f6060838281528260208201528260408201520152565b9081602091031261015d5751801515810361015d5790565b9060a08201906001600160a01b03808251168452606060209260208101516020870152826040820151166040870152015116606084015260a06080840152835180925260c0830192602060c08460051b8301019501935f915b8483106111b75750505050505090565b90919293949584806111d560019360bf198682030187528a51610182565b98019301930191949392906111a7565b6040513d5f823e3d90fd5b156111f757565b60405162461bcd60e51b815260206004820152602660248201527f4e6f7420656e6f75676820756e69717565204b4d5320696e707574207369676e60448201527f61747572657300000000000000000000000000000000000000000000000000006064820152608490fd5b60208082018051939491936001600160a01b0316916112a2604085019361129085516001600160a01b031690565b86516001600160a01b0316918461197e565b94909360ff9360ff8960101c1695155f1461164c57929091879282516112c9811515610ee7565b61130d6113076113016112db87610d45565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b906113586113236113076113016112db89610d57565b9161132f8b8511610d78565b61135261134361133e86610e23565b610e72565b61134c85610e53565b90610e80565b14610f33565b60228501519161136781610fbe565b985f5b82811061160f57505061137b611050565b5f5b604181106115c5575061140b9061139261107c565b6113b36113a689516001600160a01b031690565b6001600160a01b03168252565b858a8201528b60408201526113e26113d28c516001600160a01b031690565b6001600160a01b03166060830152565b6114066113f688516001600160a01b031690565b6001600160a01b03166080830152565b611a34565b611414826110b8565b955f5b838110611528575050505061148b9161147e61146e6114a6986113d29461145d611450611442611101565b99516001600160a01b031690565b6001600160a01b03168952565b89880152516001600160a01b031690565b6001600160a01b03166040860152565b516001600160a01b031690565b60405163073371f960e11b815293849283926004840161114e565b03815f739d6891a6240d6130c54ae243d8005063d05fe14b5af1938415611523576114e46114ee956114e9936101b8985f926114f6575b50506111f0565b611b5a565b61103c565b518214610e9b565b6115159250803d1061151c575b61150d81836102ed565b810190611136565b5f806114dd565b503d611503565b6111e5565b82939495979996985061153c929192611050565b611546828c61103c565b52611551818b61103c565b505f5b8a604182106115735750506001915001908c9795989694939291611417565b6115bb826115b1856115ab6112db6115a5856115a061159761133e60019d9e610e23565b61134c87610e53565b610e80565b8b610d67565b9461103c565b51925f1a92610d67565b5301908391611554565b8293949597999698506115f26112db6115ec836115a06115e760019798610e23565b610e64565b8c610d67565b5f1a6115fe8285610d67565b5301908c979598969493929161137d565b60019192939495979996985060428160051b8b01015161163184821615610ff0565b61163b828d61103c565b5201908c979598969493929161136a565b505050919390508492506116728460ff61166b6113016112db87610d45565b1611610d78565b5f915f945b82861061168c575050506101b8925014610e9b565b919350916001906116b56113076113016112db6116af8a6115a06115e78a610dd8565b88610d67565b6116c66116c188610e8d565b610df3565b1b1794019391859391611677565b6116dc611ed9565b6116e4611ed9565b6001600160a01b038116156118bd576116fc90611ba2565b611704610ce1565b90604051611711816102d1565b6001808252602090603160f81b602084015261172b611ed9565b611733611ed9565b84519067ffffffffffffffff82116102b0577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1029261177a836117758654611c30565b611f1a565b602091601f841160011461181457505090806117b0926117b796975f92611809575b50508160011b915f199060031b1c19161790565b9055612032565b6117df5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055565b6118075f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10155565b565b015190505f8061179c565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f908152601f198516987f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d949390925b8a83106118a657505050908392916001946117b798991061188e575b505050811b019055612032565b01515f1960f88460031b161c191690555f8080611881565b838501518655948501949381019391810191611865565b604051631e4fbdf760e01b81525f6004820152602490fd5b604051906118e2826102d1565b6001825260203681840137565b5f6118f86118d5565b90602182015b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a83530490816118fe57505090565b6001806119366118d5565b9160218301825b611948575b50505090565b5f190190600a906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156119795791908261193d565b611942565b6119e091605c9194939460405194859260208401976bffffffffffffffffffffffff199283809260601b168a5260601b16603485015260601b1660488301526119d08151809260208686019101610161565b810103603c8101845201826102ed565b519020805c91565b156119ef57565b60405162461bcd60e51b815260206004820152601c60248201527f436f70726f636573736f722061646472657373206d69736d61746368000000006044820152606490fd5b90611a3d61032b565b8051602080920120906001600160a01b0393848151169180820151604083015192604051938385019081858251919201905f5b818110611b465750505094611b3a94611b266118079b9995611b3f9995611b32958573c9990fefe0c27d31d0c2aa36196b085c0c4d456c9e9b0395611abd601f19978881018352826102ed565b519020611ae86080611ad960608501516001600160a01b031690565b9301516001600160a01b031690565b604080519687019a8b526001600160a01b03998a1660208c01528a019390935260608901528616608088015290941660a086015292839060c0860190565b039081018352826102ed565b519020612152565b611e0d565b16146119e8565b825184529287019291870191600101611a70565b6001905d565b9081602091031261015d575190565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361082b57565b6001600160a01b0319907f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c008281541690557f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054906001600160a01b0380931680948316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b90600182811c92168015611c5e575b6020831014611c4a57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611c3f565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10291825492611c9c84611c30565b80845293602091600191828116908115611d285750600114611cc8575b505050611807925003836102ed565b5f9081527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d9590935091905b828410611d1057506118079450505081016020015f8080611cb9565b85548885018301529485019487945092810192611cf4565b925050506020925061180794915060ff191682840152151560051b8201015f8080611cb9565b604051905f827fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10391825492611d8284611c30565b80845293602091600191828116908115611d285750600114611dad57505050611807925003836102ed565b5f9081527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b759590935091905b828410611df557506118079450505081016020015f8080611cb9565b85548885018301529485019487945092810192611dd9565b6101b891611e1a916121d2565b9092919261222a565b90813b15611eb8576001600160a01b0382167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc816001600160a01b03198254161790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115611e9d57611e9a916122b7565b50565b505034611ea657565b60405163b398979f60e01b8152600490fd5b604051634c9c8ce360e01b81526001600160a01b0383166004820152602490fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611f0857565b604051631afcd79f60e31b8152600490fd5b601f8111611f26575050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1025f527f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d906020601f840160051c83019310611f9c575b601f0160051c01905b818110611f91575050565b5f8155600101611f86565b9091508190611f7d565b601f8111611fb2575050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75906020601f840160051c83019310612028575b601f0160051c01905b81811061201d575050565b5f8155600101612012565b9091508190612009565b90815167ffffffffffffffff81116102b0577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10390612079816120748454611c30565b611fa6565b602080601f83116001146120ae575081906120aa9394955f926118095750508160011b915f199060031b1c19161790565b9055565b90601f198316956120ff7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1035f527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b7590565b925f905b88821061213a57505083600195969710612122575b505050811b019055565b01515f1960f88460031b161c191690555f8080612118565b80600185968294968601518155019501930190612103565b60429061215d6123e0565b61216561244a565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526121b4816102b5565b519020906040519161190160f01b8352600283015260228201522090565b8151919060418303612202576121fb9250602082015190606060408401519301515f1a906122fb565b9192909190565b50505f9160029190565b6004111561221657565b634e487b7160e01b5f52602160045260245ffd5b6122338161220c565b8061223c575050565b6122458161220c565b6001810361225f5760405163f645eedf60e01b8152600490fd5b6122688161220c565b600281036122895760405163fce698f760e01b815260048101839052602490fd5b8061229560039261220c565b1461229d5750565b6040516335e2f38360e21b81526004810191909152602490fd5b5f806101b893602081519101845af43d156122f3573d916122d78361030f565b926122e560405194856102ed565b83523d5f602085013e61237d565b60609161237d565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612372579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15611523575f516001600160a01b0381161561236857905f905f90565b505f906001905f90565b5050505f9160039190565b906123a4575080511561239257805190602001fd5b60405163d6bda27560e01b8152600490fd5b815115806123d7575b6123b5575090565b604051639996b31560e01b81526001600160a01b039091166004820152602490fd5b50803b156123ad565b6123e8611c68565b80519081156123f8576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156124255790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b612452611d4e565b8051908115612462576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015612425579056fea164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
