{
  "_format": "hh-sol-artifact-1",
  "contractName": "DisputeGameFactory",
  "sourceName": "contracts/L1/dispute/DisputeGameFactory.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "Hash",
          "name": "uuid",
          "type": "bytes32"
        }
      ],
      "name": "GameAlreadyExists",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IncorrectBondAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NoDisputeGameRequests",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "gameType",
          "type": "uint32"
        }
      ],
      "name": "NoImplementation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "disputeProxy",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "GameType",
          "name": "gameType",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "Claim",
          "name": "rootClaim",
          "type": "bytes32"
        }
      ],
      "name": "DisputeGameCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "requestor",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "GameType",
          "name": "gameType",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "bond",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "extraData",
          "type": "bytes"
        }
      ],
      "name": "DisputeGameRequested",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "impl",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "GameType",
          "name": "gameType",
          "type": "uint32"
        }
      ],
      "name": "ImplementationSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "GameType",
          "name": "gameType",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "newBond",
          "type": "uint256"
        }
      ],
      "name": "InitBondUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "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"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "Claim",
          "name": "_rootClaim",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "create",
      "outputs": [
        {
          "internalType": "contract IDisputeGame",
          "name": "proxy_",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "dispute",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "disputeGameCreationRequests",
      "outputs": [
        {
          "internalType": "GameType",
          "name": "gameType",
          "type": "uint32"
        },
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "bond",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "l1Head",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_n",
          "type": "uint256"
        }
      ],
      "name": "findLatestGames",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "index",
              "type": "uint256"
            },
            {
              "internalType": "GameId",
              "name": "metadata",
              "type": "bytes32"
            },
            {
              "internalType": "Timestamp",
              "name": "timestamp",
              "type": "uint64"
            },
            {
              "internalType": "Claim",
              "name": "rootClaim",
              "type": "bytes32"
            },
            {
              "internalType": "bytes",
              "name": "extraData",
              "type": "bytes"
            }
          ],
          "internalType": "struct IDisputeGameFactory.GameSearchResult[]",
          "name": "games_",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        }
      ],
      "name": "gameAtIndex",
      "outputs": [
        {
          "internalType": "GameType",
          "name": "gameType_",
          "type": "uint32"
        },
        {
          "internalType": "Timestamp",
          "name": "timestamp_",
          "type": "uint64"
        },
        {
          "internalType": "contract IDisputeGame",
          "name": "proxy_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gameCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "gameCount_",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "gameImpls",
      "outputs": [
        {
          "internalType": "contract IDisputeGame",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "Claim",
          "name": "_rootClaim",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "games",
      "outputs": [
        {
          "internalType": "contract IDisputeGame",
          "name": "proxy_",
          "type": "address"
        },
        {
          "internalType": "Timestamp",
          "name": "timestamp_",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "Claim",
          "name": "_rootClaim",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "getGameUUID",
      "outputs": [
        {
          "internalType": "Hash",
          "name": "uuid_",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "initBonds",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "contract IDisputeGame",
          "name": "_impl",
          "type": "address"
        }
      ],
      "name": "setImplementation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "GameType",
          "name": "_gameType",
          "type": "uint32"
        },
        {
          "internalType": "uint256",
          "name": "_initBond",
          "type": "uint256"
        }
      ],
      "name": "setInitBond",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000292565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016260201b62000f781760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b6200010c62000171565b6200011782620001d9565b80156200015e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001cd5760405162461bcd60e51b815260206004820152602b602482015260008051602062001b5383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d76200022b565b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620002875760405162461bcd60e51b815260206004820152602b602482015260008051602062001b5383398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b620001d733620001d9565b6118b180620002a26000396000f3fe60806040526004361061010e5760003560e01c8063715018a6116100a55780638da5cb5b11610074578063bb8aa1fc11610059578063bb8aa1fc146103c9578063c4d66de81461041d578063f2fde38b1461043d57600080fd5b80638da5cb5b1461038b57806396cd9720146103a957600080fd5b8063715018a6146102bf5780637b2dbc98146102d457806382ecf2f614610358578063877622c11461037857600080fd5b80634d1975b4116100e15780634d1975b4146101d557806354fd4d50146101f45780635f0150cb1461024a5780636593dc6e1461029257600080fd5b806314f6b1a3146101135780631b685b9e146101355780631e33424014610188578063254bd683146101a8575b600080fd5b34801561011f57600080fd5b5061013361012e366004611308565b61045d565b005b34801561014157600080fd5b5061016b61015036600461133f565b6065602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019457600080fd5b506101336101a336600461135a565b6104da565b3480156101b457600080fd5b506101c86101c3366004611384565b610526565b60405161017f9190611413565b3480156101e157600080fd5b506068545b60405190815260200161017f565b34801561020057600080fd5b5061023d6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161017f91906114d0565b34801561025657600080fd5b5061026a61026536600461152c565b610725565b604080516001600160a01b03909316835267ffffffffffffffff90911660208301520161017f565b34801561029e57600080fd5b506101e66102ad36600461133f565b60666020526000908152604090205481565b3480156102cb57600080fd5b5061013361076b565b3480156102e057600080fd5b506103296102ef366004611586565b60696020526000908152604090208054600182015460029092015463ffffffff8216926401000000009092046001600160a01b0316919084565b6040805163ffffffff90951685526001600160a01b03909316602085015291830152606082015260800161017f565b34801561036457600080fd5b5061016b61037336600461152c565b61077f565b61013361038636600461159f565b610ac1565b34801561039757600080fd5b506033546001600160a01b031661016b565b3480156103b557600080fd5b506101e66103c436600461152c565b610c9d565b3480156103d557600080fd5b506103e96103e4366004611586565b610cd6565b6040805163ffffffff909416845267ffffffffffffffff90921660208401526001600160a01b03169082015260600161017f565b34801561042957600080fd5b506101336104383660046115f2565b610d32565b34801561044957600080fd5b506101336104583660046115f2565b610ece565b610465610f87565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b6104e2610f87565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b60685460609083101580610538575081155b61071e575060408051600583901b8101602001909152825b83811161071c5760006068828154811061056c5761056c61160f565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff166001600160a01b03831663ffffffff891683036106ed57600186510186526000816001600160a01b031663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610614919081019061166d565b90506000826001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067a919061171a565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a516106bc9190611733565b815181106106cc576106cc61160f565b6020026020010181905250888851106106ea5750505050505061071c565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506105509050565b505b9392505050565b600080600061073687878787610c9d565b6000908152606760205260409020546001600160a01b0381169860a09190911c67ffffffffffffffff16975095505050505050565b610773610f87565b61077d6000610ffb565b565b6000610789610f87565b63ffffffff85166000908152606560205260409020546001600160a01b0316806107ec576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b600086858560405160200161080393929190611771565b60408051808303601f190181528282528051602091820120600081815260698352839020608085018452805463ffffffff8116865264010000000090046001600160a01b03169285019290925260018201549284019290925260020154606083018190529092506108a0576040517fb285d50000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8816600090815260666020526040908190205490820151146108f3576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109333388836060015189896040516020016109139594939291906117b0565b60408051601f198184030181529190526001600160a01b03851690611065565b9350836001600160a01b0316638129fc1c82604001516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b5050505050600061099b89898989610c9d565b600081815260676020526040902054909150156109e7576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016107e3565b600081815260676020908152604080832060e08d901b4260a01b178917908190556068805460018082019092557fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c2209775301829055878552606990935281842080547fffffffffffffffff00000000000000000000000000000000000000000000000016815592830184905560029092018390555190918a9163ffffffff8d16916001600160a01b038a16917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a45050505050949350505050565b63ffffffff83166000908152606560205260409020546001600160a01b031680610b1f576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff851660048201526024016107e3565b63ffffffff84166000908152606660205260409020543414610b6d576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b7a600143611733565b409050600060405180608001604052808763ffffffff168152602001336001600160a01b031681526020013481526020018381525090508060696000888888604051602001610bcb93929190611771565b60408051601f19818403018152918152815160209283012083528282019390935290820160002083518154928501516001600160a01b0316640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff91821617929092178155838301516001820155606090930151600290930192909255519087169033907fd21489ad374c6d25907219b881d712154700f9ac5a170df88e2dc1bb0fb9883e90610c8d9034908a908a90611828565b60405180910390a3505050505050565b600084848484604051602001610cb6949392919061184b565b604051602081830303815290604052805190602001209050949350505050565b600080600080600080610d2260688881548110610cf557610cf561160f565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff16916001600160a01b031690565b9199909850909650945050505050565b600054610100900460ff1615808015610d525750600054600160ff909116105b80610d6c5750303b158015610d6c575060005460ff166001145b610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610e5e611073565b610e6782610ffb565b8015610eca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610ed6610f87565b6001600160a01b038116610f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107e3565b610f7581610ffb565b50565b6001600160a01b03163b151590565b6033546001600160a01b0316331461077d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e3565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061071e60008484611112565b600054610100900460ff1661110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107e3565b61077d61123a565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf0975050866111de5763301164256000526004601cfd5b90528552601f198501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff166112d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107e3565b61077d33610ffb565b803563ffffffff811681146112ee57600080fd5b919050565b6001600160a01b0381168114610f7557600080fd5b6000806040838503121561131b57600080fd5b611324836112da565b91506020830135611334816112f3565b809150509250929050565b60006020828403121561135157600080fd5b61071e826112da565b6000806040838503121561136d57600080fd5b611376836112da565b946020939093013593505050565b60008060006060848603121561139957600080fd5b6113a2846112da565b95602085013595506040909401359392505050565b60005b838110156113d25781810151838201526020016113ba565b838111156113e1576000848401525b50505050565b600081518084526113ff8160208601602086016113b7565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156114c2578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906114ae818601836113e7565b96890196945050509086019060010161143a565b509098975050505050505050565b60208152600061071e60208301846113e7565b60008083601f8401126114f557600080fd5b50813567ffffffffffffffff81111561150d57600080fd5b60208301915083602082850101111561152557600080fd5b9250929050565b6000806000806060858703121561154257600080fd5b61154b856112da565b935060208501359250604085013567ffffffffffffffff81111561156e57600080fd5b61157a878288016114e3565b95989497509550505050565b60006020828403121561159857600080fd5b5035919050565b6000806000604084860312156115b457600080fd5b6115bd846112da565b9250602084013567ffffffffffffffff8111156115d957600080fd5b6115e5868287016114e3565b9497909650939450505050565b60006020828403121561160457600080fd5b813561071e816112f3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561167f57600080fd5b815167ffffffffffffffff8082111561169757600080fd5b818401915084601f8301126116ab57600080fd5b8151818111156116bd576116bd61163e565b604051601f8201601f19908116603f011681019083821181831017156116e5576116e561163e565b816040528281528760208487010111156116fe57600080fd5b61170f8360208301602088016113b7565b979650505050505050565b60006020828403121561172c57600080fd5b5051919050565b60008282101561176c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffff000000000000000000000000000000000000000000000000000000008460e01b168152818360048301376000910160040190815292915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b8381526040602082015260006118426040830184866117fd565b95945050505050565b63ffffffff851681528360208201526060604082015260006118716060830184866117fd565b969550505050505056fea2646970667358221220394725ab8c997c1e7dde9df0cd3b19512e1ccddee910dc888162f3421591f1f864736f6c634300080f0033496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
  "deployedBytecode": "0x60806040526004361061010e5760003560e01c8063715018a6116100a55780638da5cb5b11610074578063bb8aa1fc11610059578063bb8aa1fc146103c9578063c4d66de81461041d578063f2fde38b1461043d57600080fd5b80638da5cb5b1461038b57806396cd9720146103a957600080fd5b8063715018a6146102bf5780637b2dbc98146102d457806382ecf2f614610358578063877622c11461037857600080fd5b80634d1975b4116100e15780634d1975b4146101d557806354fd4d50146101f45780635f0150cb1461024a5780636593dc6e1461029257600080fd5b806314f6b1a3146101135780631b685b9e146101355780631e33424014610188578063254bd683146101a8575b600080fd5b34801561011f57600080fd5b5061013361012e366004611308565b61045d565b005b34801561014157600080fd5b5061016b61015036600461133f565b6065602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019457600080fd5b506101336101a336600461135a565b6104da565b3480156101b457600080fd5b506101c86101c3366004611384565b610526565b60405161017f9190611413565b3480156101e157600080fd5b506068545b60405190815260200161017f565b34801561020057600080fd5b5061023d6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161017f91906114d0565b34801561025657600080fd5b5061026a61026536600461152c565b610725565b604080516001600160a01b03909316835267ffffffffffffffff90911660208301520161017f565b34801561029e57600080fd5b506101e66102ad36600461133f565b60666020526000908152604090205481565b3480156102cb57600080fd5b5061013361076b565b3480156102e057600080fd5b506103296102ef366004611586565b60696020526000908152604090208054600182015460029092015463ffffffff8216926401000000009092046001600160a01b0316919084565b6040805163ffffffff90951685526001600160a01b03909316602085015291830152606082015260800161017f565b34801561036457600080fd5b5061016b61037336600461152c565b61077f565b61013361038636600461159f565b610ac1565b34801561039757600080fd5b506033546001600160a01b031661016b565b3480156103b557600080fd5b506101e66103c436600461152c565b610c9d565b3480156103d557600080fd5b506103e96103e4366004611586565b610cd6565b6040805163ffffffff909416845267ffffffffffffffff90921660208401526001600160a01b03169082015260600161017f565b34801561042957600080fd5b506101336104383660046115f2565b610d32565b34801561044957600080fd5b506101336104583660046115f2565b610ece565b610465610f87565b63ffffffff821660008181526065602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038616908117909155905190917fff513d80e2c7fa487608f70a618dfbc0cf415699dc69588c747e8c71566c88de91a35050565b6104e2610f87565b63ffffffff8216600081815260666020526040808220849055518392917f74d6665c4b26d5596a5aa13d3014e0c06af4d322075a797f87b03cd4c5bc91ca91a35050565b60685460609083101580610538575081155b61071e575060408051600583901b8101602001909152825b83811161071c5760006068828154811061056c5761056c61160f565b600091825260209091200154905060e081901c60a082901c67ffffffffffffffff166001600160a01b03831663ffffffff891683036106ed57600186510186526000816001600160a01b031663609d33346040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610614919081019061166d565b90506000826001600160a01b031663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610656573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067a919061171a565b90506040518060a001604052808881526020018781526020018567ffffffffffffffff168152602001828152602001838152508860018a516106bc9190611733565b815181106106cc576106cc61160f565b6020026020010181905250888851106106ea5750505050505061071c565b50505b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90920191506105509050565b505b9392505050565b600080600061073687878787610c9d565b6000908152606760205260409020546001600160a01b0381169860a09190911c67ffffffffffffffff16975095505050505050565b610773610f87565b61077d6000610ffb565b565b6000610789610f87565b63ffffffff85166000908152606560205260409020546001600160a01b0316806107ec576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff871660048201526024015b60405180910390fd5b600086858560405160200161080393929190611771565b60408051808303601f190181528282528051602091820120600081815260698352839020608085018452805463ffffffff8116865264010000000090046001600160a01b03169285019290925260018201549284019290925260020154606083018190529092506108a0576040517fb285d50000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8816600090815260666020526040908190205490820151146108f3576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109333388836060015189896040516020016109139594939291906117b0565b60408051601f198184030181529190526001600160a01b03851690611065565b9350836001600160a01b0316638129fc1c82604001516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561097457600080fd5b505af1158015610988573d6000803e3d6000fd5b5050505050600061099b89898989610c9d565b600081815260676020526040902054909150156109e7576040517f014f6fe5000000000000000000000000000000000000000000000000000000008152600481018290526024016107e3565b600081815260676020908152604080832060e08d901b4260a01b178917908190556068805460018082019092557fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c2209775301829055878552606990935281842080547fffffffffffffffff00000000000000000000000000000000000000000000000016815592830184905560029092018390555190918a9163ffffffff8d16916001600160a01b038a16917f5b565efe82411da98814f356d0e7bcb8f0219b8d970307c5afb4a6903a8b2e359190a45050505050949350505050565b63ffffffff83166000908152606560205260409020546001600160a01b031680610b1f576040517f031c6de400000000000000000000000000000000000000000000000000000000815263ffffffff851660048201526024016107e3565b63ffffffff84166000908152606660205260409020543414610b6d576040517f8620aa1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b7a600143611733565b409050600060405180608001604052808763ffffffff168152602001336001600160a01b031681526020013481526020018381525090508060696000888888604051602001610bcb93929190611771565b60408051601f19818403018152918152815160209283012083528282019390935290820160002083518154928501516001600160a01b0316640100000000027fffffffffffffffff00000000000000000000000000000000000000000000000090931663ffffffff91821617929092178155838301516001820155606090930151600290930192909255519087169033907fd21489ad374c6d25907219b881d712154700f9ac5a170df88e2dc1bb0fb9883e90610c8d9034908a908a90611828565b60405180910390a3505050505050565b600084848484604051602001610cb6949392919061184b565b604051602081830303815290604052805190602001209050949350505050565b600080600080600080610d2260688881548110610cf557610cf561160f565b906000526020600020015460e081901c9160a082901c67ffffffffffffffff16916001600160a01b031690565b9199909850909650945050505050565b600054610100900460ff1615808015610d525750600054600160ff909116105b80610d6c5750303b158015610d6c575060005460ff166001145b610df8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016107e3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e5657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610e5e611073565b610e6782610ffb565b8015610eca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b610ed6610f87565b6001600160a01b038116610f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107e3565b610f7581610ffb565b50565b6001600160a01b03163b151590565b6033546001600160a01b0316331461077d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e3565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061071e60008484611112565b600054610100900460ff1661110a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107e3565b61077d61123a565b600060608203516040830351602084035184518060208701018051600283016c5af43d3d93803e606057fd5bf3895289600d8a035278593da1005b363d3d373d3d3d3d610000806062363936013d738160481b1760218a03527f9e4ac34f21c619cefc926c8bd93b54bf5a39c7ab2127a895af1cc0691d7e3dff603a8a035272fd6100003d81600a3d39f336602c57343d527f6062820160781b1761ff9e82106059018a03528060f01b8352606c8101604c8a038cf0975050866111de5763301164256000526004601cfd5b90528552601f198501527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa09092019190915292915050565b600054610100900460ff166112d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107e3565b61077d33610ffb565b803563ffffffff811681146112ee57600080fd5b919050565b6001600160a01b0381168114610f7557600080fd5b6000806040838503121561131b57600080fd5b611324836112da565b91506020830135611334816112f3565b809150509250929050565b60006020828403121561135157600080fd5b61071e826112da565b6000806040838503121561136d57600080fd5b611376836112da565b946020939093013593505050565b60008060006060848603121561139957600080fd5b6113a2846112da565b95602085013595506040909401359392505050565b60005b838110156113d25781810151838201526020016113ba565b838111156113e1576000848401525b50505050565b600081518084526113ff8160208601602086016113b7565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b838110156114c2578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc001855281518051845287810151888501528681015167ffffffffffffffff16878501526060808201519085015260809081015160a0918501829052906114ae818601836113e7565b96890196945050509086019060010161143a565b509098975050505050505050565b60208152600061071e60208301846113e7565b60008083601f8401126114f557600080fd5b50813567ffffffffffffffff81111561150d57600080fd5b60208301915083602082850101111561152557600080fd5b9250929050565b6000806000806060858703121561154257600080fd5b61154b856112da565b935060208501359250604085013567ffffffffffffffff81111561156e57600080fd5b61157a878288016114e3565b95989497509550505050565b60006020828403121561159857600080fd5b5035919050565b6000806000604084860312156115b457600080fd5b6115bd846112da565b9250602084013567ffffffffffffffff8111156115d957600080fd5b6115e5868287016114e3565b9497909650939450505050565b60006020828403121561160457600080fd5b813561071e816112f3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561167f57600080fd5b815167ffffffffffffffff8082111561169757600080fd5b818401915084601f8301126116ab57600080fd5b8151818111156116bd576116bd61163e565b604051601f8201601f19908116603f011681019083821181831017156116e5576116e561163e565b816040528281528760208487010111156116fe57600080fd5b61170f8360208301602088016113b7565b979650505050505050565b60006020828403121561172c57600080fd5b5051919050565b60008282101561176c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500390565b7fffffffff000000000000000000000000000000000000000000000000000000008460e01b168152818360048301376000910160040190815292915050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b8381526040602082015260006118426040830184866117fd565b95945050505050565b63ffffffff851681528360208201526060604082015260006118716060830184866117fd565b969550505050505056fea2646970667358221220394725ab8c997c1e7dde9df0cd3b19512e1ccddee910dc888162f3421591f1f864736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
