{
  "_format": "hh-sol-artifact-1",
  "contractName": "OrderBook",
  "sourceName": "contracts/core/OrderBook.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_routerForKeeper",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "autoWithdraw",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct IOrderBook.ClosePositionOrder[]",
          "name": "orders",
          "type": "tuple[]"
        },
        {
          "indexed": false,
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "requireSuccess",
          "type": "bool"
        }
      ],
      "name": "BatchExecuteClose",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "baseAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "slippage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "withWallet",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct IOrderBook.OpenPositionOrder[]",
          "name": "orders",
          "type": "tuple[]"
        },
        {
          "indexed": false,
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "requireSuccess",
          "type": "bool"
        }
      ],
      "name": "BatchExecuteOpen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "autoWithdraw",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct IOrderBook.ClosePositionOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "ExecuteClose",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "baseAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "slippage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "withWallet",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "indexed": false,
          "internalType": "struct IOrderBook.OpenPositionOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "ExecuteOpen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "NewOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldPendingOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newPendingOwner",
          "type": "address"
        }
      ],
      "name": "NewPendingOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newRouterForKeeper",
          "type": "address"
        }
      ],
      "name": "SetRouterForKeeper",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "autoWithdraw",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.ClosePositionOrder[]",
          "name": "orders",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        },
        {
          "internalType": "bool",
          "name": "requireSuccess",
          "type": "bool"
        }
      ],
      "name": "batchExecuteClose",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "success",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "result",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.RespData[]",
          "name": "respData",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "baseAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "slippage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "withWallet",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.OpenPositionOrder[]",
          "name": "orders",
          "type": "tuple[]"
        },
        {
          "internalType": "bytes[]",
          "name": "signatures",
          "type": "bytes[]"
        },
        {
          "internalType": "bool",
          "name": "requireSuccess",
          "type": "bool"
        }
      ],
      "name": "batchExecuteOpen",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "success",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "result",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.RespData[]",
          "name": "respData",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "autoWithdraw",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.ClosePositionOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "executeClose",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "baseAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "slippage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "withWallet",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.OpenPositionOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "executeOpen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "routerForKeeper",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newPendingOwner",
          "type": "address"
        }
      ],
      "name": "setPendingOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_routerForKeeper",
          "type": "address"
        }
      ],
      "name": "setRouterForKeeper",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "usedNonce",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "autoWithdraw",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.ClosePositionOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "verifyClose",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "routerToExecute",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "trader",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "baseToken",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "quoteToken",
              "type": "address"
            },
            {
              "internalType": "uint8",
              "name": "side",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "baseAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "quoteAmount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "slippage",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "limitPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "withWallet",
              "type": "bool"
            },
            {
              "internalType": "bytes",
              "name": "nonce",
              "type": "bytes"
            }
          ],
          "internalType": "struct IOrderBook.OpenPositionOrder",
          "name": "order",
          "type": "tuple"
        },
        {
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "verifyOpen",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b5060405162002732380380620027328339810160408190526200003491620000c3565b6001600160a01b0381166200008f5760405162461bcd60e51b815260206004820152601760248201527f4f72646572426f6f6b3a205a45524f5f41444452455353000000000000000000604482015260640160405180910390fd5b60008054336001600160a01b031991821617909155600280549091166001600160a01b0392909216919091179055620000f3565b600060208284031215620000d5578081fd5b81516001600160a01b0381168114620000ec578182fd5b9392505050565b61262f80620001036000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063b482d89f1161008c578063e4b7379e11610066578063e4b7379e146101d6578063ebbc4965146101e9578063eda5f23b146101f1578063f9a156bd14610204576100cf565b8063b482d89f14610190578063c42069ec146101b0578063e30c3978146101c3576100cf565b80630f600901146100d457806321266ea01461011757806324cedc661461012c5780635b6bf9cc1461013f578063631e6e63146101525780638da5cb5b14610165575b600080fd5b6101026100e2366004611e29565b805160208183018101805160038252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b61012a610125366004611ccc565b610217565b005b61010261013a366004611ec5565b610329565b61010261014d366004611e64565b61049f565b61012a610160366004611e64565b6105fd565b600054610178906001600160a01b031681565b6040516001600160a01b03909116815260200161010e565b6101a361019e366004611da6565b610692565b60405161010e919061223f565b61012a6101be366004611ccc565b61089c565b600154610178906001600160a01b031681565b61012a6101e4366004611ec5565b6109a0565b61012a610a1c565b600254610178906001600160a01b031681565b6101a3610212366004611ce6565b610b10565b6000546001600160a01b0316331461026f5760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064015b60405180910390fd5b6001600160a01b0381166102d55760405162461bcd60e51b815260206004820152602760248201527f4f72646572426f6f6b2e736574526f757465724b65657065723a205a45524f5f6044820152664144445245535360c81b6064820152608401610266565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fdb088fd739abcd8775993cad351b73fbbac34ccdb4ba89ee5c26ec448362cdb99060200160405180910390a150565b6000806103658361035f86604051602001610344919061236c565b60405160208183030381529060405280519060200120610cff565b90610d53565b9050806001600160a01b031684602001516001600160a01b0316146103cc5760405162461bcd60e51b815260206004820181905260248201527f4f72646572426f6f6b2e7665726966794f70656e3a204e4f545f5349474e45526044820152606401610266565b60038461016001516040516103e19190612150565b9081526040519081900360200190205460ff16156104415760405162461bcd60e51b815260206004820181905260248201527f4f72646572426f6f6b2e7665726966794f70656e3a204e4f4e43455f555345446044820152606401610266565b83610120015142106104955760405162461bcd60e51b815260206004820152601d60248201527f4f72646572426f6f6b2e7665726966794f70656e3a20455850495245440000006044820152606401610266565b5060019392505050565b6000806104ba8361035f86604051602001610344919061232b565b9050806001600160a01b031684602001516001600160a01b03161461052b5760405162461bcd60e51b815260206004820152602160248201527f4f72646572426f6f6b2e766572696679436c6f73653a204e4f545f5349474e456044820152602960f91b6064820152608401610266565b60038461012001516040516105409190612150565b9081526040519081900360200190205460ff16156105aa5760405162461bcd60e51b815260206004820152602160248201527f4f72646572426f6f6b2e766572696679436c6f73653a204e4f4e43455f5553456044820152601160fa1b6064820152608401610266565b8360e0015142106104955760405162461bcd60e51b815260206004820152601e60248201527f4f72646572426f6f6b2e766572696679436c6f73653a204558504952454400006044820152606401610266565b600154600160a01b900460ff16156106275760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b1781556106479083908390610d77565b507fe39072efb9ac78812c827e5ce16b731d7844ec346ac9a8824060e7d188e43063828260405161067992919061233e565b60405180910390a150506001805460ff60a01b19169055565b600154606090600160a01b900460ff16156106bf5760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b17905582518451146107385760405162461bcd60e51b815260206004820152602c60248201527f4f72646572426f6f6b2e6261746368457865637574654f70656e3a204c454e4760448201526b0a890be9c9ea8be9a82a886960a31b6064820152608401610266565b835167ffffffffffffffff81111561076057634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107a657816020015b60408051808201909152600081526060602082015281526020019060019003908161077e5790505b50905060005b845181101561084c5761080e8582815181106107d857634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061080057634e487b7160e01b600052603260045260246000fd5b60200260200101518561114f565b82828151811061082e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610844906125b2565b9150506107ac565b507f1f650e5127eacee52d5f08647101de4064670ebac5bc69ae14e979b9851ec560848484604051610880939291906121ea565b60405180910390a16001805460ff60a01b191690559392505050565b6000546001600160a01b031633146108ef5760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b6044820152606401610266565b6001546001600160a01b03828116911614156109445760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b6044820152606401610266565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff16156109ca5760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b1781556109ea908390839061114f565b507f4245af4e3433550a9a59405b194065dbca3c8e4078bbebd843fb68f9d920a234828260405161067992919061237f565b6001546001600160a01b03163314610a765760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e455200006044820152606401610266565b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b600154606090600160a01b900460ff1615610b3d5760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b1790558251845114610bb75760405162461bcd60e51b815260206004820152602d60248201527f4f72646572426f6f6b2e626174636845786563757465436c6f73653a204c454e60448201526c08ea890be9c9ea8be9a82a8869609b1b6064820152608401610266565b835167ffffffffffffffff811115610bdf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c2557816020015b604080518082019091526000815260606020820152815260200190600190039081610bfd5790505b50905060005b8451811015610ccb57610c8d858281518110610c5757634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610c7f57634e487b7160e01b600052603260045260246000fd5b602002602001015185610d77565b828281518110610cad57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610cc3906125b2565b915050610c2b565b507f9f627f13644726996379dcdcce4e3ea31c1785c9b22da323fc32ff1a39f5c1228484846040516108809392919061216c565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c016040516020818303038152906040528051906020012090505b919050565b6000806000610d62858561168c565b91509150610d6f816116fc565b509392505050565b604080518082019091526000815260606020820152610d96848461049f565b610d9f57600080fd5b60025484516001600160a01b03908116911614610e0a5760405162461bcd60e51b8152602060048201526024808201527f4f72646572426f6f6b2e65786563757465436c6f73653a2057524f4e475f524f6044820152632aaa22a960e11b6064820152608401610266565b60408401516001600160a01b0316610e745760405162461bcd60e51b815260206004820152602760248201527f4f72646572426f6f6b2e65786563757465436c6f73653a204f524445525f4e4f6044820152661517d193d5539160ca1b6064820152608401610266565b608084015160ff161580610e8f5750836080015160ff166001145b610ee75760405162461bcd60e51b8152602060048201526024808201527f4f72646572426f6f6b2e65786563757465436c6f73653a20494e56414c49445f6044820152635349444560e01b6064820152608401610266565b600254604085810151606087015191516309436d2360e21b81526001600160a01b0391821660048201529181166024830152600092169063250db48c9060440160606040518083038186803b158015610f3f57600080fd5b505afa158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f779190611efa565b50509050846080015160ff16600014610f97578460c00151811115610fa0565b8460c001518110155b610ff85760405162461bcd60e51b815260206004820152602360248201527f4f72646572426f6f6b2e65786563757465436c6f73653a2057524f4e475f505260448201526249434560e81b6064820152608401610266565b60025460405160009182916001600160a01b03909116906353bcd57760e11b90611026908a9060240161232b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110649190612150565b6000604051808303816000865af19150503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b509150915084156110fe57816110fe5760405162461bcd60e51b815260206004820152601a60248201527f5f65786563757465436c6f73653a2063616c6c206661696c65640000000000006044820152606401610266565b600160038861012001516040516111159190612150565b9081526040805160209281900383018120805460ff19169415159490941790935582810190529215158152918201529150505b9392505050565b60408051808201909152600081526060602082015261116e8484610329565b61117757600080fd5b60025484516001600160a01b039081169116146111e25760405162461bcd60e51b815260206004820152602360248201527f4f72646572426f6f6b2e657865637574654f70656e3a2057524f4e475f524f556044820152622a22a960e91b6064820152608401610266565b60408401516001600160a01b031661124b5760405162461bcd60e51b815260206004820152602660248201527f4f72646572426f6f6b2e657865637574654f70656e3a204f524445525f4e4f5460448201526517d193d5539160d21b6064820152608401610266565b608084015160ff1615806112665750836080015160ff166001145b6112be5760405162461bcd60e51b815260206004820152602360248201527f4f72646572426f6f6b2e657865637574654f70656e3a20494e56414c49445f5360448201526249444560e81b6064820152608401610266565b600254604085810151606087015191516309436d2360e21b81526001600160a01b0391821660048201529181166024830152600092839283929091169063250db48c9060440160606040518083038186803b15801561131c57600080fd5b505afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113549190611efa565b925092509250866080015160ff16600014156113945786610100015183111561138f5760405162461bcd60e51b8152600401610266906122e9565b6113b9565b8661010001518310156113b95760405162461bcd60e51b8152600401610266906122e9565b600060606000896080015160ff16600014611421576127108a60e001516127106113e39190612409565b6113ed878761256b565b6113f890600a61247e565b8c6101000151611408919061254c565b611412919061254c565b61141c9190612421565b61146f565b6127108a60e00151612710611436919061256b565b611440878761256b565b61144b90600a61247e565b8c610100015161145b919061254c565b611465919061254c565b61146f9190612421565b905089610140015115611532576002546040516001600160a01b03909116906376fe0aab60e01b906114a7908d908590602401612392565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516114e59190612150565b6000604051808303816000865af19150503d8060008114611522576040519150601f19603f3d011682016040523d82523d6000602084013e611527565b606091505b5090935091506115e4565b6002546040516001600160a01b039091169063c37457af60e01b9061155d908d908590602401612392565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161159b9190612150565b6000604051808303816000865af19150503d80600081146115d8576040519150601f19603f3d011682016040523d82523d6000602084013e6115dd565b606091505b5090935091505b871561163757826116375760405162461bcd60e51b815260206004820152601960248201527f5f657865637574654f70656e3a2063616c6c206661696c6564000000000000006044820152606401610266565b600160038b610160015160405161164e9190612150565b9081526040805160209281900383018120805460ff191694151594909417909355828101905293151581529283019190915250979650505050505050565b6000808251604114156116c35760208301516040840151606085015160001a6116b787828585611902565b945094505050506116f5565b8251604014156116ed57602083015160408401516116e28683836119ef565b9350935050506116f5565b506000905060025b9250929050565b600081600481111561171e57634e487b7160e01b600052602160045260246000fd5b1415611729576118ff565b600181600481111561174b57634e487b7160e01b600052602160045260246000fd5b14156117995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610266565b60028160048111156117bb57634e487b7160e01b600052602160045260246000fd5b14156118095760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610266565b600381600481111561182b57634e487b7160e01b600052602160045260246000fd5b14156118845760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610266565b60048160048111156118a657634e487b7160e01b600052602160045260246000fd5b14156118ff5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610266565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561193957506000905060036119e6565b8460ff16601b1415801561195157508460ff16601c14155b1561196257506000905060046119e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156119b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166119df576000600192509250506119e6565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01611a1087828885611902565b935093505050935093915050565b80356001600160a01b0381168114610d4e57600080fd5b600082601f830112611a45578081fd5b81356020611a5a611a55836123e5565b6123b4565b82815281810190858301855b85811015611a8f57611a7d898684358b0101611aac565b84529284019290840190600101611a66565b5090979650505050505050565b80358015158114610d4e57600080fd5b600082601f830112611abc578081fd5b813567ffffffffffffffff811115611ad657611ad66125e3565b611ae9601f8201601f19166020016123b4565b818152846020838601011115611afd578283fd5b816020850160208301379081016020019190915292915050565b6000610140808385031215611b2a578182fd5b611b33816123b4565b915050611b3f82611a1e565b8152611b4d60208301611a1e565b6020820152611b5e60408301611a1e565b6040820152611b6f60608301611a1e565b6060820152611b8060808301611cbb565b608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100611bb1818401611a9c565b908201526101208281013567ffffffffffffffff811115611bd157600080fd5b611bdd85828601611aac565b82840152505092915050565b6000610180808385031215611bfc578182fd5b611c05816123b4565b915050611c1182611a1e565b8152611c1f60208301611a1e565b6020820152611c3060408301611a1e565b6040820152611c4160608301611a1e565b6060820152611c5260808301611cbb565b608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140611c9b818401611a9c565b908201526101608281013567ffffffffffffffff811115611bd157600080fd5b803560ff81168114610d4e57600080fd5b600060208284031215611cdd578081fd5b61114882611a1e565b600080600060608486031215611cfa578182fd5b833567ffffffffffffffff80821115611d11578384fd5b818601915086601f830112611d24578384fd5b81356020611d34611a55836123e5565b82815281810190858301885b85811015611d6957611d578d8684358b0101611b17565b84529284019290840190600101611d40565b50909850505087013592505080821115611d81578384fd5b50611d8e86828701611a35565b925050611d9d60408501611a9c565b90509250925092565b600080600060608486031215611dba578283fd5b833567ffffffffffffffff80821115611dd1578485fd5b818601915086601f830112611de4578485fd5b81356020611df4611a55836123e5565b82815281810190858301895b85811015611d6957611e178d8684358b0101611be9565b84529284019290840190600101611e00565b600060208284031215611e3a578081fd5b813567ffffffffffffffff811115611e50578182fd5b611e5c84828501611aac565b949350505050565b60008060408385031215611e76578182fd5b823567ffffffffffffffff80821115611e8d578384fd5b611e9986838701611b17565b93506020850135915080821115611eae578283fd5b50611ebb85828601611aac565b9150509250929050565b60008060408385031215611ed7578182fd5b823567ffffffffffffffff80821115611eee578384fd5b611e9986838701611be9565b600080600060608486031215611f0e578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085018081965082840281019150828601855b85811015611f6d578284038952611f5b848351611f7a565b98850198935090840190600101611f43565b5091979650505050505050565b60008151808452611f92816020860160208601612582565b601f01601f19169290920160200192915050565b80516001600160a01b0316825260006101406020830151611fd260208601826001600160a01b03169052565b506040830151611fed60408601826001600160a01b03169052565b50606083015161200860608601826001600160a01b03169052565b50608083015161201d608086018260ff169052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401516120508287018215159052565b505061012080840151828287015261206a83870182611f7a565b9695505050505050565b80516001600160a01b03168252600061018060208301516120a060208601826001600160a01b03169052565b5060408301516120bb60408601826001600160a01b03169052565b5060608301516120d660608601826001600160a01b03169052565b5060808301516120eb608086018260ff169052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401516121368287018215159052565b505061016080840151828287015261206a83870182611f7a565b60008251612162818460208701612582565b9190910192915050565b60006060820160608352808651808352608085019150602092506080838202860101838901855b838110156121c157607f198884030185526121af838351611fa6565b94860194925090850190600101612193565b5050858103848701526121d48189611f27565b9450505050508215156040830152949350505050565b60006060820160608352808651808352608085019150602092506080838202860101838901855b838110156121c157607f1988840301855261222d838351612074565b94860194925090850190600101612211565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156122a457888303603f19018552815180511515845287015187840187905261229187850182611f7a565b9588019593505090860190600101612263565b509098975050505050505050565b60208082526019908201527f5265656e7472616e743a207265656e7472616e742063616c6c00000000000000604082015260600190565b60208082526022908201527f4f72646572426f6f6b2e657865637574654f70656e3a2057524f4e475f505249604082015261434560f01b606082015260800190565b6000602082526111486020830184611fa6565b6000604082526123516040830185611fa6565b82810360208401526123638185611f7a565b95945050505050565b6000602082526111486020830184612074565b6000604082526123516040830185612074565b6000604082526123a56040830185612074565b90508260208301529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156123dd576123dd6125e3565b604052919050565b600067ffffffffffffffff8211156123ff576123ff6125e3565b5060209081020190565b6000821982111561241c5761241c6125cd565b500190565b60008261243c57634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161245357506119e6565b818704821115612465576124656125cd565b8086161561247257918102915b9490941c938002612444565b6000611148600019848460008261249757506001611148565b816124a457506000611148565b81600181146124ba57600281146124c4576124f1565b6001915050611148565b60ff8411156124d5576124d56125cd565b6001841b9150848211156124eb576124eb6125cd565b50611148565b5060208310610133831016604e8410600b8410161715612524575081810a8381111561251f5761251f6125cd565b611148565b6125318484846001612441565b808604821115612543576125436125cd565b02949350505050565b6000816000190483118215151615612566576125666125cd565b500290565b60008282101561257d5761257d6125cd565b500390565b60005b8381101561259d578181015183820152602001612585565b838111156125ac576000848401525b50505050565b60006000198214156125c6576125c66125cd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212206d6110b1284f5ed9e81d441955762963604def46a6c5e99a07a849639819e92a64736f6c63430008020033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063b482d89f1161008c578063e4b7379e11610066578063e4b7379e146101d6578063ebbc4965146101e9578063eda5f23b146101f1578063f9a156bd14610204576100cf565b8063b482d89f14610190578063c42069ec146101b0578063e30c3978146101c3576100cf565b80630f600901146100d457806321266ea01461011757806324cedc661461012c5780635b6bf9cc1461013f578063631e6e63146101525780638da5cb5b14610165575b600080fd5b6101026100e2366004611e29565b805160208183018101805160038252928201919093012091525460ff1681565b60405190151581526020015b60405180910390f35b61012a610125366004611ccc565b610217565b005b61010261013a366004611ec5565b610329565b61010261014d366004611e64565b61049f565b61012a610160366004611e64565b6105fd565b600054610178906001600160a01b031681565b6040516001600160a01b03909116815260200161010e565b6101a361019e366004611da6565b610692565b60405161010e919061223f565b61012a6101be366004611ccc565b61089c565b600154610178906001600160a01b031681565b61012a6101e4366004611ec5565b6109a0565b61012a610a1c565b600254610178906001600160a01b031681565b6101a3610212366004611ce6565b610b10565b6000546001600160a01b0316331461026f5760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064015b60405180910390fd5b6001600160a01b0381166102d55760405162461bcd60e51b815260206004820152602760248201527f4f72646572426f6f6b2e736574526f757465724b65657065723a205a45524f5f6044820152664144445245535360c81b6064820152608401610266565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fdb088fd739abcd8775993cad351b73fbbac34ccdb4ba89ee5c26ec448362cdb99060200160405180910390a150565b6000806103658361035f86604051602001610344919061236c565b60405160208183030381529060405280519060200120610cff565b90610d53565b9050806001600160a01b031684602001516001600160a01b0316146103cc5760405162461bcd60e51b815260206004820181905260248201527f4f72646572426f6f6b2e7665726966794f70656e3a204e4f545f5349474e45526044820152606401610266565b60038461016001516040516103e19190612150565b9081526040519081900360200190205460ff16156104415760405162461bcd60e51b815260206004820181905260248201527f4f72646572426f6f6b2e7665726966794f70656e3a204e4f4e43455f555345446044820152606401610266565b83610120015142106104955760405162461bcd60e51b815260206004820152601d60248201527f4f72646572426f6f6b2e7665726966794f70656e3a20455850495245440000006044820152606401610266565b5060019392505050565b6000806104ba8361035f86604051602001610344919061232b565b9050806001600160a01b031684602001516001600160a01b03161461052b5760405162461bcd60e51b815260206004820152602160248201527f4f72646572426f6f6b2e766572696679436c6f73653a204e4f545f5349474e456044820152602960f91b6064820152608401610266565b60038461012001516040516105409190612150565b9081526040519081900360200190205460ff16156105aa5760405162461bcd60e51b815260206004820152602160248201527f4f72646572426f6f6b2e766572696679436c6f73653a204e4f4e43455f5553456044820152601160fa1b6064820152608401610266565b8360e0015142106104955760405162461bcd60e51b815260206004820152601e60248201527f4f72646572426f6f6b2e766572696679436c6f73653a204558504952454400006044820152606401610266565b600154600160a01b900460ff16156106275760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b1781556106479083908390610d77565b507fe39072efb9ac78812c827e5ce16b731d7844ec346ac9a8824060e7d188e43063828260405161067992919061233e565b60405180910390a150506001805460ff60a01b19169055565b600154606090600160a01b900460ff16156106bf5760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b17905582518451146107385760405162461bcd60e51b815260206004820152602c60248201527f4f72646572426f6f6b2e6261746368457865637574654f70656e3a204c454e4760448201526b0a890be9c9ea8be9a82a886960a31b6064820152608401610266565b835167ffffffffffffffff81111561076057634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156107a657816020015b60408051808201909152600081526060602082015281526020019060019003908161077e5790505b50905060005b845181101561084c5761080e8582815181106107d857634e487b7160e01b600052603260045260246000fd5b602002602001015185838151811061080057634e487b7160e01b600052603260045260246000fd5b60200260200101518561114f565b82828151811061082e57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610844906125b2565b9150506107ac565b507f1f650e5127eacee52d5f08647101de4064670ebac5bc69ae14e979b9851ec560848484604051610880939291906121ea565b60405180910390a16001805460ff60a01b191690559392505050565b6000546001600160a01b031633146108ef5760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b6044820152606401610266565b6001546001600160a01b03828116911614156109445760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b6044820152606401610266565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600154600160a01b900460ff16156109ca5760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b1781556109ea908390839061114f565b507f4245af4e3433550a9a59405b194065dbca3c8e4078bbebd843fb68f9d920a234828260405161067992919061237f565b6001546001600160a01b03163314610a765760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e455200006044820152606401610266565b60008054600180546001600160a01b038082166001600160a01b03198086168217808855931690935560405193811694929391169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b23649190a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b600154606090600160a01b900460ff1615610b3d5760405162461bcd60e51b8152600401610266906122b2565b6001805460ff60a01b1916600160a01b1790558251845114610bb75760405162461bcd60e51b815260206004820152602d60248201527f4f72646572426f6f6b2e626174636845786563757465436c6f73653a204c454e60448201526c08ea890be9c9ea8be9a82a8869609b1b6064820152608401610266565b835167ffffffffffffffff811115610bdf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610c2557816020015b604080518082019091526000815260606020820152815260200190600190039081610bfd5790505b50905060005b8451811015610ccb57610c8d858281518110610c5757634e487b7160e01b600052603260045260246000fd5b6020026020010151858381518110610c7f57634e487b7160e01b600052603260045260246000fd5b602002602001015185610d77565b828281518110610cad57634e487b7160e01b600052603260045260246000fd5b60200260200101819052508080610cc3906125b2565b915050610c2b565b507f9f627f13644726996379dcdcce4e3ea31c1785c9b22da323fc32ff1a39f5c1228484846040516108809392919061216c565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c016040516020818303038152906040528051906020012090505b919050565b6000806000610d62858561168c565b91509150610d6f816116fc565b509392505050565b604080518082019091526000815260606020820152610d96848461049f565b610d9f57600080fd5b60025484516001600160a01b03908116911614610e0a5760405162461bcd60e51b8152602060048201526024808201527f4f72646572426f6f6b2e65786563757465436c6f73653a2057524f4e475f524f6044820152632aaa22a960e11b6064820152608401610266565b60408401516001600160a01b0316610e745760405162461bcd60e51b815260206004820152602760248201527f4f72646572426f6f6b2e65786563757465436c6f73653a204f524445525f4e4f6044820152661517d193d5539160ca1b6064820152608401610266565b608084015160ff161580610e8f5750836080015160ff166001145b610ee75760405162461bcd60e51b8152602060048201526024808201527f4f72646572426f6f6b2e65786563757465436c6f73653a20494e56414c49445f6044820152635349444560e01b6064820152608401610266565b600254604085810151606087015191516309436d2360e21b81526001600160a01b0391821660048201529181166024830152600092169063250db48c9060440160606040518083038186803b158015610f3f57600080fd5b505afa158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f779190611efa565b50509050846080015160ff16600014610f97578460c00151811115610fa0565b8460c001518110155b610ff85760405162461bcd60e51b815260206004820152602360248201527f4f72646572426f6f6b2e65786563757465436c6f73653a2057524f4e475f505260448201526249434560e81b6064820152608401610266565b60025460405160009182916001600160a01b03909116906353bcd57760e11b90611026908a9060240161232b565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516110649190612150565b6000604051808303816000865af19150503d80600081146110a1576040519150601f19603f3d011682016040523d82523d6000602084013e6110a6565b606091505b509150915084156110fe57816110fe5760405162461bcd60e51b815260206004820152601a60248201527f5f65786563757465436c6f73653a2063616c6c206661696c65640000000000006044820152606401610266565b600160038861012001516040516111159190612150565b9081526040805160209281900383018120805460ff19169415159490941790935582810190529215158152918201529150505b9392505050565b60408051808201909152600081526060602082015261116e8484610329565b61117757600080fd5b60025484516001600160a01b039081169116146111e25760405162461bcd60e51b815260206004820152602360248201527f4f72646572426f6f6b2e657865637574654f70656e3a2057524f4e475f524f556044820152622a22a960e91b6064820152608401610266565b60408401516001600160a01b031661124b5760405162461bcd60e51b815260206004820152602660248201527f4f72646572426f6f6b2e657865637574654f70656e3a204f524445525f4e4f5460448201526517d193d5539160d21b6064820152608401610266565b608084015160ff1615806112665750836080015160ff166001145b6112be5760405162461bcd60e51b815260206004820152602360248201527f4f72646572426f6f6b2e657865637574654f70656e3a20494e56414c49445f5360448201526249444560e81b6064820152608401610266565b600254604085810151606087015191516309436d2360e21b81526001600160a01b0391821660048201529181166024830152600092839283929091169063250db48c9060440160606040518083038186803b15801561131c57600080fd5b505afa158015611330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113549190611efa565b925092509250866080015160ff16600014156113945786610100015183111561138f5760405162461bcd60e51b8152600401610266906122e9565b6113b9565b8661010001518310156113b95760405162461bcd60e51b8152600401610266906122e9565b600060606000896080015160ff16600014611421576127108a60e001516127106113e39190612409565b6113ed878761256b565b6113f890600a61247e565b8c6101000151611408919061254c565b611412919061254c565b61141c9190612421565b61146f565b6127108a60e00151612710611436919061256b565b611440878761256b565b61144b90600a61247e565b8c610100015161145b919061254c565b611465919061254c565b61146f9190612421565b905089610140015115611532576002546040516001600160a01b03909116906376fe0aab60e01b906114a7908d908590602401612392565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516114e59190612150565b6000604051808303816000865af19150503d8060008114611522576040519150601f19603f3d011682016040523d82523d6000602084013e611527565b606091505b5090935091506115e4565b6002546040516001600160a01b039091169063c37457af60e01b9061155d908d908590602401612392565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161159b9190612150565b6000604051808303816000865af19150503d80600081146115d8576040519150601f19603f3d011682016040523d82523d6000602084013e6115dd565b606091505b5090935091505b871561163757826116375760405162461bcd60e51b815260206004820152601960248201527f5f657865637574654f70656e3a2063616c6c206661696c6564000000000000006044820152606401610266565b600160038b610160015160405161164e9190612150565b9081526040805160209281900383018120805460ff191694151594909417909355828101905293151581529283019190915250979650505050505050565b6000808251604114156116c35760208301516040840151606085015160001a6116b787828585611902565b945094505050506116f5565b8251604014156116ed57602083015160408401516116e28683836119ef565b9350935050506116f5565b506000905060025b9250929050565b600081600481111561171e57634e487b7160e01b600052602160045260246000fd5b1415611729576118ff565b600181600481111561174b57634e487b7160e01b600052602160045260246000fd5b14156117995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610266565b60028160048111156117bb57634e487b7160e01b600052602160045260246000fd5b14156118095760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610266565b600381600481111561182b57634e487b7160e01b600052602160045260246000fd5b14156118845760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610266565b60048160048111156118a657634e487b7160e01b600052602160045260246000fd5b14156118ff5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610266565b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561193957506000905060036119e6565b8460ff16601b1415801561195157508460ff16601c14155b1561196257506000905060046119e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156119b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166119df576000600192509250506119e6565b9150600090505b94509492505050565b6000806001600160ff1b03831660ff84901c601b01611a1087828885611902565b935093505050935093915050565b80356001600160a01b0381168114610d4e57600080fd5b600082601f830112611a45578081fd5b81356020611a5a611a55836123e5565b6123b4565b82815281810190858301855b85811015611a8f57611a7d898684358b0101611aac565b84529284019290840190600101611a66565b5090979650505050505050565b80358015158114610d4e57600080fd5b600082601f830112611abc578081fd5b813567ffffffffffffffff811115611ad657611ad66125e3565b611ae9601f8201601f19166020016123b4565b818152846020838601011115611afd578283fd5b816020850160208301379081016020019190915292915050565b6000610140808385031215611b2a578182fd5b611b33816123b4565b915050611b3f82611a1e565b8152611b4d60208301611a1e565b6020820152611b5e60408301611a1e565b6040820152611b6f60608301611a1e565b6060820152611b8060808301611cbb565b608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100611bb1818401611a9c565b908201526101208281013567ffffffffffffffff811115611bd157600080fd5b611bdd85828601611aac565b82840152505092915050565b6000610180808385031215611bfc578182fd5b611c05816123b4565b915050611c1182611a1e565b8152611c1f60208301611a1e565b6020820152611c3060408301611a1e565b6040820152611c4160608301611a1e565b6060820152611c5260808301611cbb565b608082015260a082013560a082015260c082013560c082015260e082013560e0820152610100808301358183015250610120808301358183015250610140611c9b818401611a9c565b908201526101608281013567ffffffffffffffff811115611bd157600080fd5b803560ff81168114610d4e57600080fd5b600060208284031215611cdd578081fd5b61114882611a1e565b600080600060608486031215611cfa578182fd5b833567ffffffffffffffff80821115611d11578384fd5b818601915086601f830112611d24578384fd5b81356020611d34611a55836123e5565b82815281810190858301885b85811015611d6957611d578d8684358b0101611b17565b84529284019290840190600101611d40565b50909850505087013592505080821115611d81578384fd5b50611d8e86828701611a35565b925050611d9d60408501611a9c565b90509250925092565b600080600060608486031215611dba578283fd5b833567ffffffffffffffff80821115611dd1578485fd5b818601915086601f830112611de4578485fd5b81356020611df4611a55836123e5565b82815281810190858301895b85811015611d6957611e178d8684358b0101611be9565b84529284019290840190600101611e00565b600060208284031215611e3a578081fd5b813567ffffffffffffffff811115611e50578182fd5b611e5c84828501611aac565b949350505050565b60008060408385031215611e76578182fd5b823567ffffffffffffffff80821115611e8d578384fd5b611e9986838701611b17565b93506020850135915080821115611eae578283fd5b50611ebb85828601611aac565b9150509250929050565b60008060408385031215611ed7578182fd5b823567ffffffffffffffff80821115611eee578384fd5b611e9986838701611be9565b600080600060608486031215611f0e578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085018081965082840281019150828601855b85811015611f6d578284038952611f5b848351611f7a565b98850198935090840190600101611f43565b5091979650505050505050565b60008151808452611f92816020860160208601612582565b601f01601f19169290920160200192915050565b80516001600160a01b0316825260006101406020830151611fd260208601826001600160a01b03169052565b506040830151611fed60408601826001600160a01b03169052565b50606083015161200860608601826001600160a01b03169052565b50608083015161201d608086018260ff169052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401516120508287018215159052565b505061012080840151828287015261206a83870182611f7a565b9695505050505050565b80516001600160a01b03168252600061018060208301516120a060208601826001600160a01b03169052565b5060408301516120bb60408601826001600160a01b03169052565b5060608301516120d660608601826001600160a01b03169052565b5060808301516120eb608086018260ff169052565b5060a083015160a085015260c083015160c085015260e083015160e0850152610100808401518186015250610120808401518186015250610140808401516121368287018215159052565b505061016080840151828287015261206a83870182611f7a565b60008251612162818460208701612582565b9190910192915050565b60006060820160608352808651808352608085019150602092506080838202860101838901855b838110156121c157607f198884030185526121af838351611fa6565b94860194925090850190600101612193565b5050858103848701526121d48189611f27565b9450505050508215156040830152949350505050565b60006060820160608352808651808352608085019150602092506080838202860101838901855b838110156121c157607f1988840301855261222d838351612074565b94860194925090850190600101612211565b60208082528251828201819052600091906040908185019080840286018301878501865b838110156122a457888303603f19018552815180511515845287015187840187905261229187850182611f7a565b9588019593505090860190600101612263565b509098975050505050505050565b60208082526019908201527f5265656e7472616e743a207265656e7472616e742063616c6c00000000000000604082015260600190565b60208082526022908201527f4f72646572426f6f6b2e657865637574654f70656e3a2057524f4e475f505249604082015261434560f01b606082015260800190565b6000602082526111486020830184611fa6565b6000604082526123516040830185611fa6565b82810360208401526123638185611f7a565b95945050505050565b6000602082526111486020830184612074565b6000604082526123516040830185612074565b6000604082526123a56040830185612074565b90508260208301529392505050565b604051601f8201601f1916810167ffffffffffffffff811182821017156123dd576123dd6125e3565b604052919050565b600067ffffffffffffffff8211156123ff576123ff6125e3565b5060209081020190565b6000821982111561241c5761241c6125cd565b500190565b60008261243c57634e487b7160e01b81526012600452602481fd5b500490565b80825b600180861161245357506119e6565b818704821115612465576124656125cd565b8086161561247257918102915b9490941c938002612444565b6000611148600019848460008261249757506001611148565b816124a457506000611148565b81600181146124ba57600281146124c4576124f1565b6001915050611148565b60ff8411156124d5576124d56125cd565b6001841b9150848211156124eb576124eb6125cd565b50611148565b5060208310610133831016604e8410600b8410161715612524575081810a8381111561251f5761251f6125cd565b611148565b6125318484846001612441565b808604821115612543576125436125cd565b02949350505050565b6000816000190483118215151615612566576125666125cd565b500290565b60008282101561257d5761257d6125cd565b500390565b60005b8381101561259d578181015183820152602001612585565b838111156125ac576000848401525b50505050565b60006000198214156125c6576125c66125cd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea26469706673582212206d6110b1284f5ed9e81d441955762963604def46a6c5e99a07a849639819e92a64736f6c63430008020033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
