{
  "_format": "hh-sol-artifact-1",
  "contractName": "L1StandardBridge",
  "sourceName": "contracts/L1/messaging/L1StandardBridge.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_chainid",
          "type": "uint256"
        }
      ],
      "name": "ERC20ChainID",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "ERC20DepositInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "ERC20WithdrawalFinalized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "ETHDepositInitiated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "ETHWithdrawalFinalized",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_CHAINID",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "addressmgr",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositERC20",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositERC20ByChainId",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositERC20To",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositERC20ToByChainId",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositETHByChainId",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositETHTo",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "_l2Gas",
          "type": "uint32"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "depositETHToByChainId",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "deposits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "donateETH",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "finalizeERC20Withdrawal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_l1Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2Token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "finalizeERC20WithdrawalByChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "finalizeETHWithdrawal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "finalizeETHWithdrawalByChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_chainid",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "finalizeMetisWithdrawalByChainId",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_l1messenger",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_l2TokenBridge",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_metis",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_addressmgr",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2TokenBridge",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "messenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "metis",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50600080546001600160a01b0319169055612c51806100306000396000f3fe60806040526004361061016a5760003560e01c80638b4c40b0116100cb578063a9f9e6751161007f578063ef808be211610059578063ef808be214610371578063f4a1381414610384578063f8c8765e146103c257600080fd5b8063a9f9e6751461031e578063b1a1a8821461033e578063e59745541461035157600080fd5b806391c49bf8116100b057806391c49bf8146102d85780639a2ac6d5146102f8578063a396a59c1461030b57600080fd5b80638b4c40b01461018f57806390a40a76146102b857600080fd5b806358a997f6116101225780636cebdc45116101075780636cebdc4514610265578063838b25201461028557806384e930f0146102a557600080fd5b806358a997f6146102215780635bbbb7ed1461024157600080fd5b8063153928f411610153578063153928f4146101b1578063200997b3146101ee5780633cb747bf1461020157600080fd5b80630546aaa91461016f5780631532ec3414610191575b600080fd5b34801561017b57600080fd5b5061018f61018a36600461221a565b6103e2565b005b34801561019d57600080fd5b5061018f6101ac366004612296565b6106c2565b3480156101bd57600080fd5b506003546101d1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018f6101fc366004612322565b61099e565b34801561020d57600080fd5b506000546101d1906001600160a01b031681565b34801561022d57600080fd5b5061018f61023c366004612376565b6109e8565b34801561024d57600080fd5b5061025761044081565b6040519081526020016101e5565b34801561027157600080fd5b5061018f6102803660046123db565b610a52565b34801561029157600080fd5b5061018f6102a036600461247c565b610c0a565b61018f6102b3366004612512565b610c26565b3480156102c457600080fd5b5061018f6102d336600461221a565b610cbe565b3480156102e457600080fd5b506001546101d1906001600160a01b031681565b61018f61030636600461256c565b610e8c565b61018f61031936600461259b565b610ece565b34801561032a57600080fd5b5061018f6103393660046125c8565b610f2e565b61018f61034c366004612641565b6110e7565b34801561035d57600080fd5b506002546101d1906001600160a01b031681565b61018f61037f366004612694565b61117d565b34801561039057600080fd5b5061025761039f366004612713565b600460209081526000938452604080852082529284528284209052825290205481565b3480156103ce57600080fd5b5061018f6103dd366004612755565b61118e565b6001546001600160a01b03166104006000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161461048b5760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b806001600160a01b03166104a76000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050891906127b1565b6001600160a01b0316146105845760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b604080516000808252602082019092526001600160a01b0387169086906040516105ae9190612829565b60006040518083038185875af1925050503d80600081146105eb576040519150601f19603f3d011682016040523d82523d6000602084013e6105f0565b606091505b50509050806106675760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610482565b856001600160a01b0316876001600160a01b03167f727233b1ab656a027266fdc255d394b9aa8a2db3b7ff0fd6150dc3a8686f30cb8787878d6040516106b09493929190612870565b60405180910390a35050505050505050565b6001546001600160a01b03166106e06000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146107665760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b03166107826000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e391906127b1565b6001600160a01b03161461085f5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b604080516000808252602082019092526001600160a01b0387169086906040516108899190612829565b60006040518083038185875af1925050503d80600081146108c6576040519150601f19603f3d011682016040523d82523d6000602084013e6108cb565b606091505b50509050806109425760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610482565b856001600160a01b0316876001600160a01b03167f727233b1ab656a027266fdc255d394b9aa8a2db3b7ff0fd6150dc3a8686f30cb87878761044060405161098d9493929190612870565b60405180910390a350505050505050565b6109e18533868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127592505050565b5050505050565b333b15610a375760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b610a4a610440878733338989898961159d565b505050505050565b6001546001600160a01b0316610a706000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610af65760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b0316610b126000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7391906127b1565b6001600160a01b031614610bef5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b610bff8989898989898989611b37565b505050505050505050565b610c1d610440888833898989898961159d565b50505050505050565b333b15610c755760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b610cb88433338686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127592505050565b50505050565b6001546001600160a01b0316610cdc6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610d625760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b0316610d7e6000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf91906127b1565b6001600160a01b031614610e5b5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b600254610c1d9088906001600160a01b031673deaddeaddeaddeaddeaddeaddeaddeaddead00008989898989611b37565b610cb833858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4792505050565b333b15610f1d5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b610c1d87878733338989898961159d565b6001546001600160a01b0316610f4c6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610fd25760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b0316610fee6000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104f91906127b1565b6001600160a01b0316146110cb5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b6110dd61044089898989898989611b37565b5050505050505050565b333b156111365760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b61117833338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4792505050565b505050565b6110dd88888833898989898961159d565b6000546001600160a01b03161561120d5760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e6974696160448201527f6c697a65642e00000000000000000000000000000000000000000000000000006064820152608401610482565b600080546001600160a01b039586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556001805494861694821694909417909355600280549285169284169290921790915560038054919093169116179055565b6003546040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d564d5f446973636f756e744f7261636c65000000000000000000000000000060448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132991906127b1565b90506000816001600160a01b031663bf53926e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f919061289b565b90508063ffffffff168463ffffffff1610156113a9578093505b6000826001600160a01b031663d137874b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140d919061289b565b61141d9063ffffffff87166128e3565b905034811061142b82611c56565b60405160200161143b9190612920565b604051602081830303815290604052906114685760405162461bcd60e51b815260040161048291906129b7565b5060007f662a633a000000000000000000000000000000000000000000000000000000008173420000000000000000000000000000000000000a8a8a6114ae87346129ca565b8a6040516024016114c4969594939291906129e1565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150611540908a906001600160a01b0316888486611db6565b6001600160a01b038088169089167f742461272f8da1cbe655542d3257acb1f1d5f4e6eaa79692ac5609b0f89cb64461157985346129ca565b888d60405161158a93929190612a2f565b60405180910390a3505050505050505050565b6003546040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d564d5f446973636f756e744f7261636c65000000000000000000000000000060448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165191906127b1565b9050806001600160a01b031663bf53926e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b5919061289b565b63ffffffff168463ffffffff16101561172d57806001600160a01b031663bf53926e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a919061289b565b93505b34816001600160a01b031663d137874b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611790919061289b565b6117a09063ffffffff87166128e3565b111561181c826001600160a01b031663d137874b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611807919061289b565b6118179063ffffffff88166128e3565b611c56565b60405160200161182c9190612920565b604051602081830303815290604052906118595760405162461bcd60e51b815260040161048291906129b7565b5061186f6001600160a01b038a16883088611e40565b6002546060906001600160a01b03908116908b16036119455760405173deaddeaddeaddeaddeaddeaddeaddeaddead000099507f662a633a00000000000000000000000000000000000000000000000000000000906118df906000908c908c908c908c908b908b90602401612a58565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506119e6565b6040517f662a633a0000000000000000000000000000000000000000000000000000000090611984908c908c908c908c908c908b908b90602401612a58565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600154611a00908c906001600160a01b0316878434611db6565b6001600160a01b03808b1660009081526004602090815260408083208f84528252808320938d1683529290522054611a39908790612aa8565b600460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020819055507fc333b5c3e71358b85edbb94334230ac00644c26af29851f9034a7105eb84b0778b604051611ac791815260200190565b60405180910390a1876001600160a01b0316896001600160a01b03168b6001600160a01b03167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968a8a8989604051611b229493929190612ac0565b60405180910390a45050505050505050505050565b6001600160a01b0380881660009081526004602090815260408083208c84528252808320938a1683529290522054611b709084906129ca565b6001600160a01b0380891660008181526004602090815260408083208e84528252808320948c1683529390529190912091909155611baf908585611ef1565b6040518881527fc333b5c3e71358b85edbb94334230ac00644c26af29851f9034a7105eb84b0779060200160405180910390a1846001600160a01b0316866001600160a01b0316886001600160a01b03167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b387878787604051611c359493929190612ac0565b60405180910390a45050505050505050565b610cb861044085858585611275565b606081600003611c9957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611cc35780611cad81612af3565b9150611cbc9050600a83612b2b565b9150611c9d565b60008167ffffffffffffffff811115611cde57611cde6127ce565b6040519080825280601f01601f191660200182016040528015611d08576020820181803683370190505b509050815b8515611dad57611d1e6001826129ca565b90506000611d2d600a88612b2b565b611d3890600a6128e3565b611d4290886129ca565b611d4d906030612b66565b905060008160f81b905080848481518110611d6a57611d6a612b8b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611da4600a89612b2b565b97505050611d0d565b50949350505050565b6000546040517f44dd5ed60000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906344dd5ed6908390611e07908990899088908a90600401612bba565b6000604051808303818588803b158015611e2057600080fd5b505af1158015611e34573d6000803e3d6000fd5b50505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610cb89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f3a565b6040516001600160a01b0383166024820152604481018290526111789084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611e8d565b6000611f8f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661201f9092919063ffffffff16565b8051909150156111785780806020019051810190611fad9190612bf9565b6111785760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610482565b606061202e8484600085612038565b90505b9392505050565b6060824710156120b05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610482565b6001600160a01b0385163b6121075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610482565b600080866001600160a01b031685876040516121239190612829565b60006040518083038185875af1925050503d8060008114612160576040519150601f19603f3d011682016040523d82523d6000602084013e612165565b606091505b5091509150612175828286612180565b979650505050505050565b6060831561218f575081612031565b82511561219f5782518084602001fd5b8160405162461bcd60e51b815260040161048291906129b7565b6001600160a01b03811681146121ce57600080fd5b50565b60008083601f8401126121e357600080fd5b50813567ffffffffffffffff8111156121fb57600080fd5b60208301915083602082850101111561221357600080fd5b9250929050565b60008060008060008060a0878903121561223357600080fd5b863595506020870135612245816121b9565b94506040870135612255816121b9565b935060608701359250608087013567ffffffffffffffff81111561227857600080fd5b61228489828a016121d1565b979a9699509497509295939492505050565b6000806000806000608086880312156122ae57600080fd5b85356122b9816121b9565b945060208601356122c9816121b9565b935060408601359250606086013567ffffffffffffffff8111156122ec57600080fd5b6122f8888289016121d1565b969995985093965092949392505050565b803563ffffffff8116811461231d57600080fd5b919050565b60008060008060006080868803121561233a57600080fd5b85359450602086013561234c816121b9565b935061235a60408701612309565b9250606086013567ffffffffffffffff8111156122ec57600080fd5b60008060008060008060a0878903121561238f57600080fd5b863561239a816121b9565b955060208701356123aa816121b9565b9450604087013593506123bf60608801612309565b9250608087013567ffffffffffffffff81111561227857600080fd5b60008060008060008060008060e0898b0312156123f757600080fd5b883597506020890135612409816121b9565b96506040890135612419816121b9565b95506060890135612429816121b9565b94506080890135612439816121b9565b935060a0890135925060c089013567ffffffffffffffff81111561245c57600080fd5b6124688b828c016121d1565b999c989b5096995094979396929594505050565b600080600080600080600060c0888a03121561249757600080fd5b87356124a2816121b9565b965060208801356124b2816121b9565b955060408801356124c2816121b9565b9450606088013593506124d760808901612309565b925060a088013567ffffffffffffffff8111156124f357600080fd5b6124ff8a828b016121d1565b989b979a50959850939692959293505050565b6000806000806060858703121561252857600080fd5b8435935061253860208601612309565b9250604085013567ffffffffffffffff81111561255457600080fd5b612560878288016121d1565b95989497509550505050565b6000806000806060858703121561258257600080fd5b843561258d816121b9565b935061253860208601612309565b600080600080600080600060c0888a0312156125b657600080fd5b8735965060208801356124b2816121b9565b600080600080600080600060c0888a0312156125e357600080fd5b87356125ee816121b9565b965060208801356125fe816121b9565b9550604088013561260e816121b9565b9450606088013561261e816121b9565b93506080880135925060a088013567ffffffffffffffff8111156124f357600080fd5b60008060006040848603121561265657600080fd5b61265f84612309565b9250602084013567ffffffffffffffff81111561267b57600080fd5b612687868287016121d1565b9497909650939450505050565b60008060008060008060008060e0898b0312156126b057600080fd5b8835975060208901356126c2816121b9565b965060408901356126d2816121b9565b955060608901356126e2816121b9565b9450608089013593506126f760a08a01612309565b925060c089013567ffffffffffffffff81111561245c57600080fd5b60008060006060848603121561272857600080fd5b8335612733816121b9565b925060208401359150604084013561274a816121b9565b809150509250925092565b6000806000806080858703121561276b57600080fd5b8435612776816121b9565b93506020850135612786816121b9565b92506040850135612796816121b9565b915060608501356127a6816121b9565b939692955090935050565b6000602082840312156127c357600080fd5b8151612031816121b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015612818578181015183820152602001612800565b83811115610cb85750506000910152565b6000825161283b8184602087016127fd565b9190910192915050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b84815260606020820152600061288a606083018587612845565b905082604083015295945050505050565b6000602082840312156128ad57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561291b5761291b6128b4565b500290565b7f696e73756666696369656e742066656520737570706c6965642e2073656e642081527f6174206c6561737420000000000000000000000000000000000000000000000060208201526000825161297e8160298501602087016127fd565b9190910160290192915050565b600081518084526129a38160208601602086016127fd565b601f01601f19169290920160200192915050565b602081526000612031602083018461298b565b6000828210156129dc576129dc6128b4565b500390565b60006001600160a01b0380891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612a2360c083018461298b565b98975050505050505050565b838152606060208201526000612a48606083018561298b565b9050826040830152949350505050565b60006001600160a01b03808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152612a9b60c083018486612845565b9998505050505050505050565b60008219821115612abb57612abb6128b4565b500190565b6001600160a01b0385168152836020820152606060408201526000612ae9606083018486612845565b9695505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b2457612b246128b4565b5060010190565b600082612b61577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115612b8357612b836128b4565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8481526001600160a01b0384166020820152608060408201526000612be2608083018561298b565b905063ffffffff8316606083015295945050505050565b600060208284031215612c0b57600080fd5b8151801515811461203157600080fdfea26469706673582212202d31afd4f27daee554c9962f01c8b73d2df89fef1fbaacc7b1741af256030a6a64736f6c634300080f0033",
  "deployedBytecode": "0x60806040526004361061016a5760003560e01c80638b4c40b0116100cb578063a9f9e6751161007f578063ef808be211610059578063ef808be214610371578063f4a1381414610384578063f8c8765e146103c257600080fd5b8063a9f9e6751461031e578063b1a1a8821461033e578063e59745541461035157600080fd5b806391c49bf8116100b057806391c49bf8146102d85780639a2ac6d5146102f8578063a396a59c1461030b57600080fd5b80638b4c40b01461018f57806390a40a76146102b857600080fd5b806358a997f6116101225780636cebdc45116101075780636cebdc4514610265578063838b25201461028557806384e930f0146102a557600080fd5b806358a997f6146102215780635bbbb7ed1461024157600080fd5b8063153928f411610153578063153928f4146101b1578063200997b3146101ee5780633cb747bf1461020157600080fd5b80630546aaa91461016f5780631532ec3414610191575b600080fd5b34801561017b57600080fd5b5061018f61018a36600461221a565b6103e2565b005b34801561019d57600080fd5b5061018f6101ac366004612296565b6106c2565b3480156101bd57600080fd5b506003546101d1906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61018f6101fc366004612322565b61099e565b34801561020d57600080fd5b506000546101d1906001600160a01b031681565b34801561022d57600080fd5b5061018f61023c366004612376565b6109e8565b34801561024d57600080fd5b5061025761044081565b6040519081526020016101e5565b34801561027157600080fd5b5061018f6102803660046123db565b610a52565b34801561029157600080fd5b5061018f6102a036600461247c565b610c0a565b61018f6102b3366004612512565b610c26565b3480156102c457600080fd5b5061018f6102d336600461221a565b610cbe565b3480156102e457600080fd5b506001546101d1906001600160a01b031681565b61018f61030636600461256c565b610e8c565b61018f61031936600461259b565b610ece565b34801561032a57600080fd5b5061018f6103393660046125c8565b610f2e565b61018f61034c366004612641565b6110e7565b34801561035d57600080fd5b506002546101d1906001600160a01b031681565b61018f61037f366004612694565b61117d565b34801561039057600080fd5b5061025761039f366004612713565b600460209081526000938452604080852082529284528284209052825290205481565b3480156103ce57600080fd5b5061018f6103dd366004612755565b61118e565b6001546001600160a01b03166104006000546001600160a01b031690565b6001600160a01b0316336001600160a01b03161461048b5760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084015b60405180910390fd5b806001600160a01b03166104a76000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050891906127b1565b6001600160a01b0316146105845760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b604080516000808252602082019092526001600160a01b0387169086906040516105ae9190612829565b60006040518083038185875af1925050503d80600081146105eb576040519150601f19603f3d011682016040523d82523d6000602084013e6105f0565b606091505b50509050806106675760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610482565b856001600160a01b0316876001600160a01b03167f727233b1ab656a027266fdc255d394b9aa8a2db3b7ff0fd6150dc3a8686f30cb8787878d6040516106b09493929190612870565b60405180910390a35050505050505050565b6001546001600160a01b03166106e06000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146107665760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b03166107826000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e391906127b1565b6001600160a01b03161461085f5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b604080516000808252602082019092526001600160a01b0387169086906040516108899190612829565b60006040518083038185875af1925050503d80600081146108c6576040519150601f19603f3d011682016040523d82523d6000602084013e6108cb565b606091505b50509050806109425760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c65640000000000000000000000006064820152608401610482565b856001600160a01b0316876001600160a01b03167f727233b1ab656a027266fdc255d394b9aa8a2db3b7ff0fd6150dc3a8686f30cb87878761044060405161098d9493929190612870565b60405180910390a350505050505050565b6109e18533868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127592505050565b5050505050565b333b15610a375760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b610a4a610440878733338989898961159d565b505050505050565b6001546001600160a01b0316610a706000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610af65760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b0316610b126000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7391906127b1565b6001600160a01b031614610bef5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b610bff8989898989898989611b37565b505050505050505050565b610c1d610440888833898989898961159d565b50505050505050565b333b15610c755760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b610cb88433338686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061127592505050565b50505050565b6001546001600160a01b0316610cdc6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610d625760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b0316610d7e6000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf91906127b1565b6001600160a01b031614610e5b5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b600254610c1d9088906001600160a01b031673deaddeaddeaddeaddeaddeaddeaddeaddead00008989898989611b37565b610cb833858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4792505050565b333b15610f1d5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b610c1d87878733338989898961159d565b6001546001600160a01b0316610f4c6000546001600160a01b031690565b6001600160a01b0316336001600160a01b031614610fd25760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e746963617465640000000000000000000000000000000000006064820152608401610482565b806001600160a01b0316610fee6000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561102b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104f91906127b1565b6001600160a01b0316146110cb5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d657373616765000000000000000000000000000000006064820152608401610482565b6110dd61044089898989898989611b37565b5050505050505050565b333b156111365760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f4100000000000000000000000000000000006044820152606401610482565b61117833338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4792505050565b505050565b6110dd88888833898989898961159d565b6000546001600160a01b03161561120d5760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e6974696160448201527f6c697a65642e00000000000000000000000000000000000000000000000000006064820152608401610482565b600080546001600160a01b039586167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556001805494861694821694909417909355600280549285169284169290921790915560038054919093169116179055565b6003546040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d564d5f446973636f756e744f7261636c65000000000000000000000000000060448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132991906127b1565b90506000816001600160a01b031663bf53926e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561136b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061138f919061289b565b90508063ffffffff168463ffffffff1610156113a9578093505b6000826001600160a01b031663d137874b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140d919061289b565b61141d9063ffffffff87166128e3565b905034811061142b82611c56565b60405160200161143b9190612920565b604051602081830303815290604052906114685760405162461bcd60e51b815260040161048291906129b7565b5060007f662a633a000000000000000000000000000000000000000000000000000000008173420000000000000000000000000000000000000a8a8a6114ae87346129ca565b8a6040516024016114c4969594939291906129e1565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150611540908a906001600160a01b0316888486611db6565b6001600160a01b038088169089167f742461272f8da1cbe655542d3257acb1f1d5f4e6eaa79692ac5609b0f89cb64461157985346129ca565b888d60405161158a93929190612a2f565b60405180910390a3505050505050505050565b6003546040517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4d564d5f446973636f756e744f7261636c65000000000000000000000000000060448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa15801561162d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165191906127b1565b9050806001600160a01b031663bf53926e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b5919061289b565b63ffffffff168463ffffffff16101561172d57806001600160a01b031663bf53926e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a919061289b565b93505b34816001600160a01b031663d137874b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561176c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611790919061289b565b6117a09063ffffffff87166128e3565b111561181c826001600160a01b031663d137874b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611807919061289b565b6118179063ffffffff88166128e3565b611c56565b60405160200161182c9190612920565b604051602081830303815290604052906118595760405162461bcd60e51b815260040161048291906129b7565b5061186f6001600160a01b038a16883088611e40565b6002546060906001600160a01b03908116908b16036119455760405173deaddeaddeaddeaddeaddeaddeaddeaddead000099507f662a633a00000000000000000000000000000000000000000000000000000000906118df906000908c908c908c908c908b908b90602401612a58565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290506119e6565b6040517f662a633a0000000000000000000000000000000000000000000000000000000090611984908c908c908c908c908c908b908b90602401612a58565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290505b600154611a00908c906001600160a01b0316878434611db6565b6001600160a01b03808b1660009081526004602090815260408083208f84528252808320938d1683529290522054611a39908790612aa8565b600460008c6001600160a01b03166001600160a01b0316815260200190815260200160002060008d815260200190815260200160002060008b6001600160a01b03166001600160a01b03168152602001908152602001600020819055507fc333b5c3e71358b85edbb94334230ac00644c26af29851f9034a7105eb84b0778b604051611ac791815260200190565b60405180910390a1876001600160a01b0316896001600160a01b03168b6001600160a01b03167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968a8a8989604051611b229493929190612ac0565b60405180910390a45050505050505050505050565b6001600160a01b0380881660009081526004602090815260408083208c84528252808320938a1683529290522054611b709084906129ca565b6001600160a01b0380891660008181526004602090815260408083208e84528252808320948c1683529390529190912091909155611baf908585611ef1565b6040518881527fc333b5c3e71358b85edbb94334230ac00644c26af29851f9034a7105eb84b0779060200160405180910390a1846001600160a01b0316866001600160a01b0316886001600160a01b03167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b387878787604051611c359493929190612ac0565b60405180910390a45050505050505050565b610cb861044085858585611275565b606081600003611c9957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611cc35780611cad81612af3565b9150611cbc9050600a83612b2b565b9150611c9d565b60008167ffffffffffffffff811115611cde57611cde6127ce565b6040519080825280601f01601f191660200182016040528015611d08576020820181803683370190505b509050815b8515611dad57611d1e6001826129ca565b90506000611d2d600a88612b2b565b611d3890600a6128e3565b611d4290886129ca565b611d4d906030612b66565b905060008160f81b905080848481518110611d6a57611d6a612b8b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611da4600a89612b2b565b97505050611d0d565b50949350505050565b6000546040517f44dd5ed60000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906344dd5ed6908390611e07908990899088908a90600401612bba565b6000604051808303818588803b158015611e2057600080fd5b505af1158015611e34573d6000803e3d6000fd5b50505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610cb89085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f3a565b6040516001600160a01b0383166024820152604481018290526111789084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611e8d565b6000611f8f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661201f9092919063ffffffff16565b8051909150156111785780806020019051810190611fad9190612bf9565b6111785760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610482565b606061202e8484600085612038565b90505b9392505050565b6060824710156120b05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610482565b6001600160a01b0385163b6121075760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610482565b600080866001600160a01b031685876040516121239190612829565b60006040518083038185875af1925050503d8060008114612160576040519150601f19603f3d011682016040523d82523d6000602084013e612165565b606091505b5091509150612175828286612180565b979650505050505050565b6060831561218f575081612031565b82511561219f5782518084602001fd5b8160405162461bcd60e51b815260040161048291906129b7565b6001600160a01b03811681146121ce57600080fd5b50565b60008083601f8401126121e357600080fd5b50813567ffffffffffffffff8111156121fb57600080fd5b60208301915083602082850101111561221357600080fd5b9250929050565b60008060008060008060a0878903121561223357600080fd5b863595506020870135612245816121b9565b94506040870135612255816121b9565b935060608701359250608087013567ffffffffffffffff81111561227857600080fd5b61228489828a016121d1565b979a9699509497509295939492505050565b6000806000806000608086880312156122ae57600080fd5b85356122b9816121b9565b945060208601356122c9816121b9565b935060408601359250606086013567ffffffffffffffff8111156122ec57600080fd5b6122f8888289016121d1565b969995985093965092949392505050565b803563ffffffff8116811461231d57600080fd5b919050565b60008060008060006080868803121561233a57600080fd5b85359450602086013561234c816121b9565b935061235a60408701612309565b9250606086013567ffffffffffffffff8111156122ec57600080fd5b60008060008060008060a0878903121561238f57600080fd5b863561239a816121b9565b955060208701356123aa816121b9565b9450604087013593506123bf60608801612309565b9250608087013567ffffffffffffffff81111561227857600080fd5b60008060008060008060008060e0898b0312156123f757600080fd5b883597506020890135612409816121b9565b96506040890135612419816121b9565b95506060890135612429816121b9565b94506080890135612439816121b9565b935060a0890135925060c089013567ffffffffffffffff81111561245c57600080fd5b6124688b828c016121d1565b999c989b5096995094979396929594505050565b600080600080600080600060c0888a03121561249757600080fd5b87356124a2816121b9565b965060208801356124b2816121b9565b955060408801356124c2816121b9565b9450606088013593506124d760808901612309565b925060a088013567ffffffffffffffff8111156124f357600080fd5b6124ff8a828b016121d1565b989b979a50959850939692959293505050565b6000806000806060858703121561252857600080fd5b8435935061253860208601612309565b9250604085013567ffffffffffffffff81111561255457600080fd5b612560878288016121d1565b95989497509550505050565b6000806000806060858703121561258257600080fd5b843561258d816121b9565b935061253860208601612309565b600080600080600080600060c0888a0312156125b657600080fd5b8735965060208801356124b2816121b9565b600080600080600080600060c0888a0312156125e357600080fd5b87356125ee816121b9565b965060208801356125fe816121b9565b9550604088013561260e816121b9565b9450606088013561261e816121b9565b93506080880135925060a088013567ffffffffffffffff8111156124f357600080fd5b60008060006040848603121561265657600080fd5b61265f84612309565b9250602084013567ffffffffffffffff81111561267b57600080fd5b612687868287016121d1565b9497909650939450505050565b60008060008060008060008060e0898b0312156126b057600080fd5b8835975060208901356126c2816121b9565b965060408901356126d2816121b9565b955060608901356126e2816121b9565b9450608089013593506126f760a08a01612309565b925060c089013567ffffffffffffffff81111561245c57600080fd5b60008060006060848603121561272857600080fd5b8335612733816121b9565b925060208401359150604084013561274a816121b9565b809150509250925092565b6000806000806080858703121561276b57600080fd5b8435612776816121b9565b93506020850135612786816121b9565b92506040850135612796816121b9565b915060608501356127a6816121b9565b939692955090935050565b6000602082840312156127c357600080fd5b8151612031816121b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b83811015612818578181015183820152602001612800565b83811115610cb85750506000910152565b6000825161283b8184602087016127fd565b9190910192915050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b84815260606020820152600061288a606083018587612845565b905082604083015295945050505050565b6000602082840312156128ad57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561291b5761291b6128b4565b500290565b7f696e73756666696369656e742066656520737570706c6965642e2073656e642081527f6174206c6561737420000000000000000000000000000000000000000000000060208201526000825161297e8160298501602087016127fd565b9190910160290192915050565b600081518084526129a38160208601602086016127fd565b601f01601f19169290920160200192915050565b602081526000612031602083018461298b565b6000828210156129dc576129dc6128b4565b500390565b60006001600160a01b0380891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612a2360c083018461298b565b98975050505050505050565b838152606060208201526000612a48606083018561298b565b9050826040830152949350505050565b60006001600160a01b03808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152612a9b60c083018486612845565b9998505050505050505050565b60008219821115612abb57612abb6128b4565b500190565b6001600160a01b0385168152836020820152606060408201526000612ae9606083018486612845565b9695505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612b2457612b246128b4565b5060010190565b600082612b61577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060ff821660ff84168060ff03821115612b8357612b836128b4565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8481526001600160a01b0384166020820152608060408201526000612be2608083018561298b565b905063ffffffff8316606083015295945050505050565b600060208284031215612c0b57600080fd5b8151801515811461203157600080fdfea26469706673582212202d31afd4f27daee554c9962f01c8b73d2df89fef1fbaacc7b1741af256030a6a64736f6c634300080f0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
