{
  "_format": "hh-sol-artifact-1",
  "contractName": "ZilliqaRecover",
  "sourceName": "contracts/custody/ZilliqaRecover.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "InvalidForwardedToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "publicKeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyY",
          "type": "bytes32"
        }
      ],
      "name": "PublicKeyUnmatchSenderAddress",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "SenderNotMinter",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "znsOwner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receivedOwner",
          "type": "address"
        }
      ],
      "name": "TokenOwnedByOtherZilAddress",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        }
      ],
      "name": "UnknownTokenReceived",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newAddress",
          "type": "address"
        }
      ],
      "name": "ZnsTokenClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "zilAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "label",
          "type": "string"
        }
      ],
      "name": "ZnsTokenMinted",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "ZIL_NODE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyY",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newOwnerAddress",
          "type": "address"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyY",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newOwnerAddress",
          "type": "address"
        }
      ],
      "name": "claimAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "publicKeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyY",
          "type": "bytes32"
        }
      ],
      "name": "ethAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IUNSRegistry",
          "name": "registry_",
          "type": "address"
        },
        {
          "internalType": "contract IMintingManager",
          "name": "mintingManager_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_zilAddress",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "isOwnedBy",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "label",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "zilOwner",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "zilOwner",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "label",
              "type": "string"
            }
          ],
          "internalType": "struct ZilliqaRecover.MintingToken[]",
          "name": "tokens",
          "type": "tuple[]"
        }
      ],
      "name": "mintAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintingManager",
      "outputs": [
        {
          "internalType": "contract IMintingManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "nonceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "onERC721Received",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "registry",
      "outputs": [
        {
          "internalType": "contract IUNSRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "nonce",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenId",
              "type": "uint256"
            },
            {
              "internalType": "bytes",
              "name": "data",
              "type": "bytes"
            }
          ],
          "internalType": "struct IForwarder.ForwardRequest",
          "name": "req",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "verify",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "publicKeyX",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "publicKeyY",
          "type": "bytes32"
        }
      ],
      "name": "zilAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "znsOwnerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561000f575f80fd5b5061001861001d565b6100da565b5f54610100900460ff16156100885760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811610156100d8575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611c84806100e75f395ff3fe608060405234801561000f575f80fd5b5060043610610106575f3560e01c806371017a541161009e5780639e32d3641161006e5780639e32d3641461025a578063a424740014610281578063dd6b9e2214610294578063e1c4b65a146102a7578063e35a14e5146102ba575f80fd5b806371017a541461020e5780637b103999146102215780638f0dbd25146102345780639810b69514610247575f80fd5b8063485cc955116100d9578063485cc95514610191578063572b6c05146101a457806358884432146101d05780636ccbae5f146101fb575f80fd5b8063150b7a021461010a5780631694116d1461013b5780631bf7e13e146101505780631c351a9d14610170575b5f80fd5b61011d6101183660046114d0565b6102e2565b6040516001600160e01b031990911681526020015b60405180910390f35b61014e61014936600461157f565b610372565b005b61016361015e3660046115e5565b61040d565b604051610132919061169d565b61018361017e3660046116af565b6104d6565b604051908152602001610132565b61014e61019f366004611702565b6105c3565b6101c06101b2366004611739565b6001600160a01b0316301490565b6040519015158152602001610132565b6067546101e3906001600160a01b031681565b6040516001600160a01b039091168152602001610132565b610183610209366004611754565b610710565b6101e361021c36600461176b565b610769565b6066546101e3906001600160a01b031681565b61014e61024236600461178b565b6107a9565b6101e361025536600461176b565b61081e565b6101837fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c061028f3660046115e5565b610877565b6101c06102a23660046117c9565b6108c0565b61014e6102b536600461180d565b610935565b6101e36102c8366004611754565b5f908152606560205260409020546001600160a01b031690565b6066545f906001600160a01b03166102f8610a5b565b6001600160a01b031614158061032257505f848152606560205260409020546001600160a01b0316155b156103605783610330610a5b565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b828261037e8282610769565b6001600160a01b031661038f610a5b565b6001600160a01b0316146103c057604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b5f6103cb868661081e565b90505f5b87811015610402576103fa8989838181106103ec576103ec61184c565b905060200201358387610a69565b6001016103cf565b505050505050505050565b60605f5a905061041e858585610877565b61043b57604051638baa579f60e01b815260040160405180910390fd5b6104cb61044b6020870187611739565b3060408801358461045f60608b018b611860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f92019190915250610b9c92505050565b9150505b9392505050565b6067545f906001600160a01b031663aa271e1a6104f1610a5b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610533573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055791906118a3565b1580610572575030610567610a5b565b6001600160a01b0316145b156105a45761057f610a5b565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610357565b5f6105b0858585610c78565b90506105bb81610e8b565b949350505050565b5f54610100900460ff16158080156105e157505f54600160ff909116105b806105fa5750303b1580156105fa57505f5460ff166001145b61065d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610357565b5f805460ff19166001179055801561067e575f805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b03199283161790925560678054928516929091169190911790556106b6610ea7565b6106be610ecf565b6106c6610f05565b801561070b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610762906060016040516020818303038152906040528051906020012090565b5492915050565b5f808383604051602001610787929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b82826107b58282610769565b6001600160a01b03166107c6610a5b565b6001600160a01b0316146107f757604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b8561080181610e8b565b6108158761080f888961081e565b86610a69565b50505050505050565b5f80600261082c8585610f2b565b60405161083991906118c2565b602060405180830381855afa158015610854573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105bb91906118dd565b5f6105bb61088485611962565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610fb092505050565b5f805b8281101561092a57846001600160a01b031661090b8585848181106108ea576108ea61184c565b905060200201355f908152606560205260409020546001600160a01b031690565b6001600160a01b031614610922575f9150506104cf565b6001016108c3565b506001949350505050565b6067546001600160a01b031663aa271e1a61094e610a5b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610990573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b491906118a3565b15806109cf5750306109c4610a5b565b6001600160a01b0316145b156109dc5761057f610a5b565b5f5b8181101561070b57610a528383838181106109fb576109fb61184c565b9050602002810190610a0d9190611a1f565b610a1b906020810190611860565b858585818110610a2d57610a2d61184c565b9050602002810190610a3f9190611a1f565b610a4d906020810190611739565b610c78565b506001016109de565b5f610a646110f5565b905090565b5f838152606560205260409020546001600160a01b03838116911614610acc575f83815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610357565b5f838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e906064015f604051808303815f87803b158015610b39575f80fd5b505af1158015610b4b573d5f803e3d5ffd5b50505050806001600160a01b0316610b61610a5b565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610ba785611112565b5f80876001600160a01b031686610bc08b8a8989611177565b604051610bcd91906118c2565b5f604051808303815f8787f1925050503d805f8114610c07576040519150601f19603f3d011682016040523d82523d5f602084013e610c0c565b606091505b509092509050610c1d603f87611a5b565b5a11610c2b57610c2b611a6e565b610c6b82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506111a7565b9998505050505050505050565b5f60605f7fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610cb0929190611a82565b60405160208183030381529060405280519060200120604051602001610ce0929190918252602082015260400190565b60408051808303601f19018152828252805160209091012060028084526060840190925292505f9190816020015b6060815260200190600190039081610d0e57905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250855186945090925015159050610d6e57610d6e61184c565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610da857610da861184c565b6020908102919091018101919091525f8381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610e1091309186918991829190600401611ae9565b5f604051808303815f87803b158015610e27575f80fd5b505af1158015610e39573d5f803e3d5ffd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610e79929190611b47565b60405180910390a35095945050505050565b303303610e9e57610e9b816111e0565b50565b610e9b81611112565b5f54610100900460ff16610ecd5760405162461bcd60e51b815260040161035790611b75565b565b5f54610100900460ff16610ef55760405162461bcd60e51b815260040161035790611b75565b610efd610ea7565b610ecd610ea7565b5f54610100900460ff16610efd5760405162461bcd60e51b815260040161035790611b75565b60605f82610f3b60016020611bc0565b60ff1660208110610f4e57610f4e61184c565b1a9050610f5c600282611bd9565b60ff1615610f6b576003610f6e565b60025b84604051602001610f9892919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610ff4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101891906118dd565b90505f6110c58660600151805190602001208688602001516040516020016110659392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156110eb575085516110eb906001600160a01b0316828661120a565b9695505050505050565b5f30330361110a575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506111668190565b54611172906001611bfa565b905550565b606082858560405160200161118e93929190611c0d565b6040516020818303038152906040529050949350505050565b606083156111b65750816104cf565b8251156111c65782518084602001fd5b8160405162461bcd60e51b8152600401610357919061169d565b6111e8611345565b8114610e9b57604051635637b6af60e11b815260048101829052602401610357565b5f805f6112178585611357565b90925090505f81600481111561122f5761122f611c4b565b14801561124d5750856001600160a01b0316826001600160a01b0316145b1561125d576001925050506104cf565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611284929190611c5f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112c291906118c2565b5f60405180830381855afa9150503d805f81146112fa576040519150601f19603f3d011682016040523d82523d5f602084013e6112ff565b606091505b5091509150818015611312575080516020145b801561133957508051630b135d3f60e11b9061133790830160209081019084016118dd565b145b98975050505050505050565b5f30330361110f5750601f1936013590565b5f80825160410361138b576020830151604084015160608501515f1a61137f87828585611399565b94509450505050611392565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113ce57505f90506003611475565b8460ff16601b141580156113e657508460ff16601c14155b156113f657505f90506004611475565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611447573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661146f575f60019250925050611475565b91505f90505b94509492505050565b6001600160a01b0381168114610e9b575f80fd5b5f8083601f8401126114a2575f80fd5b50813567ffffffffffffffff8111156114b9575f80fd5b602083019150836020828501011115611392575f80fd5b5f805f805f608086880312156114e4575f80fd5b85356114ef8161147e565b945060208601356114ff8161147e565b935060408601359250606086013567ffffffffffffffff811115611521575f80fd5b61152d88828901611492565b969995985093965092949392505050565b5f8083601f84011261154e575f80fd5b50813567ffffffffffffffff811115611565575f80fd5b6020830191508360208260051b8501011115611392575f80fd5b5f805f805f60808688031215611593575f80fd5b853567ffffffffffffffff8111156115a9575f80fd5b6115b58882890161153e565b909650945050602086013592506040860135915060608601356115d78161147e565b809150509295509295909350565b5f805f604084860312156115f7575f80fd5b833567ffffffffffffffff8082111561160e575f80fd5b9085019060808288031215611621575f80fd5b90935060208501359080821115611636575f80fd5b5061164386828701611492565b9497909650939450505050565b5f5b8381101561166a578181015183820152602001611652565b50505f910152565b5f8151808452611689816020860160208601611650565b601f01601f19169290920160200192915050565b602081525f6104cf6020830184611672565b5f805f604084860312156116c1575f80fd5b833567ffffffffffffffff8111156116d7575f80fd5b6116e386828701611492565b90945092505060208401356116f78161147e565b809150509250925092565b5f8060408385031215611713575f80fd5b823561171e8161147e565b9150602083013561172e8161147e565b809150509250929050565b5f60208284031215611749575f80fd5b81356104cf8161147e565b5f60208284031215611764575f80fd5b5035919050565b5f806040838503121561177c575f80fd5b50508035926020909101359150565b5f805f806080858703121561179e575f80fd5b84359350602085013592506040850135915060608501356117be8161147e565b939692955090935050565b5f805f604084860312156117db575f80fd5b83356117e68161147e565b9250602084013567ffffffffffffffff811115611801575f80fd5b6116438682870161153e565b5f806020838503121561181e575f80fd5b823567ffffffffffffffff811115611834575f80fd5b6118408582860161153e565b90969095509350505050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112611875575f80fd5b83018035915067ffffffffffffffff82111561188f575f80fd5b602001915036819003821315611392575f80fd5b5f602082840312156118b3575f80fd5b815180151581146104cf575f80fd5b5f82516118d3818460208701611650565b9190910192915050565b5f602082840312156118ed575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561192b5761192b6118f4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561195a5761195a6118f4565b604052919050565b5f60808236031215611972575f80fd5b61197a611908565b82356119858161147e565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff808211156119b5575f80fd5b9085019036601f8301126119c7575f80fd5b8135818111156119d9576119d96118f4565b6119eb601f8201601f19168501611931565b91508082523684828501011115611a00575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8235603e198336030181126118d3575f80fd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f82611a6957611a69611a33565b500490565b634e487b7160e01b5f52600160045260245ffd5b818382375f9101908152919050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611adc57601f19868403018952611aca838351611672565b98840198925090830190600101611aae565b5090979650505050505050565b6001600160a01b038616815260a0602082018190525f90611b0c90830187611a91565b8281036040840152611b1e8187611a91565b90508281036060840152611b328186611a91565b91505082151560808301529695505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60ff82811682821603908111156107a3576107a3611a47565b5f60ff831680611beb57611beb611a33565b8060ff84160691505092915050565b808201808211156107a3576107a3611a47565b5f8451611c1e818460208901611650565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f6105bb604083018461167256fea164736f6c6343000818000a",
  "deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610106575f3560e01c806371017a541161009e5780639e32d3641161006e5780639e32d3641461025a578063a424740014610281578063dd6b9e2214610294578063e1c4b65a146102a7578063e35a14e5146102ba575f80fd5b806371017a541461020e5780637b103999146102215780638f0dbd25146102345780639810b69514610247575f80fd5b8063485cc955116100d9578063485cc95514610191578063572b6c05146101a457806358884432146101d05780636ccbae5f146101fb575f80fd5b8063150b7a021461010a5780631694116d1461013b5780631bf7e13e146101505780631c351a9d14610170575b5f80fd5b61011d6101183660046114d0565b6102e2565b6040516001600160e01b031990911681526020015b60405180910390f35b61014e61014936600461157f565b610372565b005b61016361015e3660046115e5565b61040d565b604051610132919061169d565b61018361017e3660046116af565b6104d6565b604051908152602001610132565b61014e61019f366004611702565b6105c3565b6101c06101b2366004611739565b6001600160a01b0316301490565b6040519015158152602001610132565b6067546101e3906001600160a01b031681565b6040516001600160a01b039091168152602001610132565b610183610209366004611754565b610710565b6101e361021c36600461176b565b610769565b6066546101e3906001600160a01b031681565b61014e61024236600461178b565b6107a9565b6101e361025536600461176b565b61081e565b6101837fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d23981565b6101c061028f3660046115e5565b610877565b6101c06102a23660046117c9565b6108c0565b61014e6102b536600461180d565b610935565b6101e36102c8366004611754565b5f908152606560205260409020546001600160a01b031690565b6066545f906001600160a01b03166102f8610a5b565b6001600160a01b031614158061032257505f848152606560205260409020546001600160a01b0316155b156103605783610330610a5b565b60405163634afa0d60e01b815260048101929092526001600160a01b031660248201526044015b60405180910390fd5b50630a85bd0160e11b95945050505050565b828261037e8282610769565b6001600160a01b031661038f610a5b565b6001600160a01b0316146103c057604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b5f6103cb868661081e565b90505f5b87811015610402576103fa8989838181106103ec576103ec61184c565b905060200201358387610a69565b6001016103cf565b505050505050505050565b60605f5a905061041e858585610877565b61043b57604051638baa579f60e01b815260040160405180910390fd5b6104cb61044b6020870187611739565b3060408801358461045f60608b018b611860565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284375f92019190915250610b9c92505050565b9150505b9392505050565b6067545f906001600160a01b031663aa271e1a6104f1610a5b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610533573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055791906118a3565b1580610572575030610567610a5b565b6001600160a01b0316145b156105a45761057f610a5b565b60405163e2c8c9d560e01b81526001600160a01b039091166004820152602401610357565b5f6105b0858585610c78565b90506105bb81610e8b565b949350505050565b5f54610100900460ff16158080156105e157505f54600160ff909116105b806105fa5750303b1580156105fa57505f5460ff166001145b61065d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610357565b5f805460ff19166001179055801561067e575f805461ff0019166101001790555b606680546001600160a01b038086166001600160a01b03199283161790925560678054928516929091169190911790556106b6610ea7565b6106be610ecf565b6106c6610f05565b801561070b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f90610762906060016040516020818303038152906040528051906020012090565b5492915050565b5f808383604051602001610787929190918252602082015260400190565b60408051601f1981840301815291905280516020909101209150505b92915050565b82826107b58282610769565b6001600160a01b03166107c6610a5b565b6001600160a01b0316146107f757604051632cd9b44d60e11b81526004810183905260248101829052604401610357565b8561080181610e8b565b6108158761080f888961081e565b86610a69565b50505050505050565b5f80600261082c8585610f2b565b60405161083991906118c2565b602060405180830381855afa158015610854573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906105bb91906118dd565b5f6105bb61088485611962565b3085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610fb092505050565b5f805b8281101561092a57846001600160a01b031661090b8585848181106108ea576108ea61184c565b905060200201355f908152606560205260409020546001600160a01b031690565b6001600160a01b031614610922575f9150506104cf565b6001016108c3565b506001949350505050565b6067546001600160a01b031663aa271e1a61094e610a5b565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015610990573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b491906118a3565b15806109cf5750306109c4610a5b565b6001600160a01b0316145b156109dc5761057f610a5b565b5f5b8181101561070b57610a528383838181106109fb576109fb61184c565b9050602002810190610a0d9190611a1f565b610a1b906020810190611860565b858585818110610a2d57610a2d61184c565b9050602002810190610a3f9190611a1f565b610a4d906020810190611739565b610c78565b506001016109de565b5f610a646110f5565b905090565b5f838152606560205260409020546001600160a01b03838116911614610acc575f83815260656020526040908190205490516326995d8360e11b8152600481018590526001600160a01b0391821660248201529083166044820152606401610357565b5f838152606560205260409081902080546001600160a01b03191690556066549051632142170760e11b81523060048201526001600160a01b03838116602483015260448201869052909116906342842e0e906064015f604051808303815f87803b158015610b39575f80fd5b505af1158015610b4b573d5f803e3d5ffd5b50505050806001600160a01b0316610b61610a5b565b6001600160a01b0316847f9a471856befea1cabcd7fc8a1c4d70ea07b8ed2ee205cc361f932433542ef3fe60405160405180910390a4505050565b6060610ba785611112565b5f80876001600160a01b031686610bc08b8a8989611177565b604051610bcd91906118c2565b5f604051808303815f8787f1925050503d805f8114610c07576040519150601f19603f3d011682016040523d82523d5f602084013e610c0c565b606091505b509092509050610c1d603f87611a5b565b5a11610c2b57610c2b611a6e565b610c6b82826040518060400160405280601a81526020017f42617365466f727761726465723a2043414c4c5f4641494c45440000000000008152506111a7565b9998505050505050505050565b5f60605f7fd81bbfcee722494b885e891546eeac23d0eedcd44038d7a2f6ef9ec2f9e0d2398686604051602001610cb0929190611a82565b60405160208183030381529060405280519060200120604051602001610ce0929190918252602082015260400190565b60408051808303601f19018152828252805160209091012060028084526060840190925292505f9190816020015b6060815260200190600190039081610d0e57905050905086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250855186945090925015159050610d6e57610d6e61184c565b6020026020010181905250604051806040016040528060038152602001621e9a5b60ea1b81525081600181518110610da857610da861184c565b6020908102919091018101919091525f8381526065909152604080822080546001600160a01b0319166001600160a01b03898116919091179091556067549151635cd7e3b360e01b8152911691635cd7e3b391610e1091309186918991829190600401611ae9565b5f604051808303815f87803b158015610e27575f80fd5b505af1158015610e39573d5f803e3d5ffd5b50505050846001600160a01b0316827f08717469d38a4b02325ea6637978c7952f94d3d8fc7848994f618ddbf4d637f18989604051610e79929190611b47565b60405180910390a35095945050505050565b303303610e9e57610e9b816111e0565b50565b610e9b81611112565b5f54610100900460ff16610ecd5760405162461bcd60e51b815260040161035790611b75565b565b5f54610100900460ff16610ef55760405162461bcd60e51b815260040161035790611b75565b610efd610ea7565b610ecd610ea7565b5f54610100900460ff16610efd5760405162461bcd60e51b815260040161035790611b75565b60605f82610f3b60016020611bc0565b60ff1660208110610f4e57610f4e61184c565b1a9050610f5c600282611bd9565b60ff1615610f6b576003610f6e565b60025b84604051602001610f9892919060f89290921b6001600160f81b0319168252600182015260210190565b60405160208183030381529060405291505092915050565b6040838101519051636ccbae5f60e01b815260048101919091525f9081903090636ccbae5f90602401602060405180830381865afa158015610ff4573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101891906118dd565b90505f6110c58660600151805190602001208688602001516040516020016110659392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b60408051601f1981840301815282825280516020918201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000084830152603c8085019190915282518085039091018152605c909301909152815191012090565b90508186602001511480156110eb575085516110eb906001600160a01b0316828661120a565b9695505050505050565b5f30330361110a575060331936013560601c90565b503390565b90565b604080517f1ee5d87a048b728f67073f282321992c260e5be4fa651d08665c5b4ee7a8381560208201529081018290525f906060016040516020818303038152906040528051906020012090506111668190565b54611172906001611bfa565b905550565b606082858560405160200161118e93929190611c0d565b6040516020818303038152906040529050949350505050565b606083156111b65750816104cf565b8251156111c65782518084602001fd5b8160405162461bcd60e51b8152600401610357919061169d565b6111e8611345565b8114610e9b57604051635637b6af60e11b815260048101829052602401610357565b5f805f6112178585611357565b90925090505f81600481111561122f5761122f611c4b565b14801561124d5750856001600160a01b0316826001600160a01b0316145b1561125d576001925050506104cf565b5f80876001600160a01b0316631626ba7e60e01b8888604051602401611284929190611c5f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516112c291906118c2565b5f60405180830381855afa9150503d805f81146112fa576040519150601f19603f3d011682016040523d82523d5f602084013e6112ff565b606091505b5091509150818015611312575080516020145b801561133957508051630b135d3f60e11b9061133790830160209081019084016118dd565b145b98975050505050505050565b5f30330361110f5750601f1936013590565b5f80825160410361138b576020830151604084015160608501515f1a61137f87828585611399565b94509450505050611392565b505f905060025b9250929050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156113ce57505f90506003611475565b8460ff16601b141580156113e657508460ff16601c14155b156113f657505f90506004611475565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611447573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661146f575f60019250925050611475565b91505f90505b94509492505050565b6001600160a01b0381168114610e9b575f80fd5b5f8083601f8401126114a2575f80fd5b50813567ffffffffffffffff8111156114b9575f80fd5b602083019150836020828501011115611392575f80fd5b5f805f805f608086880312156114e4575f80fd5b85356114ef8161147e565b945060208601356114ff8161147e565b935060408601359250606086013567ffffffffffffffff811115611521575f80fd5b61152d88828901611492565b969995985093965092949392505050565b5f8083601f84011261154e575f80fd5b50813567ffffffffffffffff811115611565575f80fd5b6020830191508360208260051b8501011115611392575f80fd5b5f805f805f60808688031215611593575f80fd5b853567ffffffffffffffff8111156115a9575f80fd5b6115b58882890161153e565b909650945050602086013592506040860135915060608601356115d78161147e565b809150509295509295909350565b5f805f604084860312156115f7575f80fd5b833567ffffffffffffffff8082111561160e575f80fd5b9085019060808288031215611621575f80fd5b90935060208501359080821115611636575f80fd5b5061164386828701611492565b9497909650939450505050565b5f5b8381101561166a578181015183820152602001611652565b50505f910152565b5f8151808452611689816020860160208601611650565b601f01601f19169290920160200192915050565b602081525f6104cf6020830184611672565b5f805f604084860312156116c1575f80fd5b833567ffffffffffffffff8111156116d7575f80fd5b6116e386828701611492565b90945092505060208401356116f78161147e565b809150509250925092565b5f8060408385031215611713575f80fd5b823561171e8161147e565b9150602083013561172e8161147e565b809150509250929050565b5f60208284031215611749575f80fd5b81356104cf8161147e565b5f60208284031215611764575f80fd5b5035919050565b5f806040838503121561177c575f80fd5b50508035926020909101359150565b5f805f806080858703121561179e575f80fd5b84359350602085013592506040850135915060608501356117be8161147e565b939692955090935050565b5f805f604084860312156117db575f80fd5b83356117e68161147e565b9250602084013567ffffffffffffffff811115611801575f80fd5b6116438682870161153e565b5f806020838503121561181e575f80fd5b823567ffffffffffffffff811115611834575f80fd5b6118408582860161153e565b90969095509350505050565b634e487b7160e01b5f52603260045260245ffd5b5f808335601e19843603018112611875575f80fd5b83018035915067ffffffffffffffff82111561188f575f80fd5b602001915036819003821315611392575f80fd5b5f602082840312156118b3575f80fd5b815180151581146104cf575f80fd5b5f82516118d3818460208701611650565b9190910192915050565b5f602082840312156118ed575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561192b5761192b6118f4565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561195a5761195a6118f4565b604052919050565b5f60808236031215611972575f80fd5b61197a611908565b82356119858161147e565b81526020838101358183015260408085013590830152606084013567ffffffffffffffff808211156119b5575f80fd5b9085019036601f8301126119c7575f80fd5b8135818111156119d9576119d96118f4565b6119eb601f8201601f19168501611931565b91508082523684828501011115611a00575f80fd5b80848401858401375f9082019093019290925250606082015292915050565b5f8235603e198336030181126118d3575f80fd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f82611a6957611a69611a33565b500490565b634e487b7160e01b5f52600160045260245ffd5b818382375f9101908152919050565b5f8282518085526020808601955060208260051b840101602086015f5b84811015611adc57601f19868403018952611aca838351611672565b98840198925090830190600101611aae565b5090979650505050505050565b6001600160a01b038616815260a0602082018190525f90611b0c90830187611a91565b8281036040840152611b1e8187611a91565b90508281036060840152611b328186611a91565b91505082151560808301529695505050505050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60ff82811682821603908111156107a3576107a3611a47565b5f60ff831680611beb57611beb611a33565b8060ff84160691505092915050565b808201808211156107a3576107a3611a47565b5f8451611c1e818460208901611650565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b634e487b7160e01b5f52602160045260245ffd5b828152604060208201525f6105bb604083018461167256fea164736f6c6343000818000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
