{
  "_format": "hh-sol-artifact-1",
  "contractName": "MockAmmOfMargin",
  "sourceName": "contracts/mocks/MockAmmM.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "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": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "inputToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outputToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "name": "estimateSwap",
      "outputs": [
        {
          "internalType": "uint256[2]",
          "name": "amounts",
          "type": "uint256[2]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "inputToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outputToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "name": "forceSwap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getReserves",
      "outputs": [
        {
          "internalType": "uint112",
          "name": "reserveBase",
          "type": "uint112"
        },
        {
          "internalType": "uint112",
          "name": "reserveQuote",
          "type": "uint112"
        },
        {
          "internalType": "uint32",
          "name": "blockTimestamp",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "margin",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "price",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "quoteToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "margin_",
          "type": "address"
        }
      ],
      "name": "setMargin",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_price",
          "type": "uint256"
        }
      ],
      "name": "setPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint112",
          "name": "reserveBase",
          "type": "uint112"
        },
        {
          "internalType": "uint112",
          "name": "reserveQuote",
          "type": "uint112"
        }
      ],
      "name": "setReserves",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "trader",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "inputToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "outputToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "inputAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "outputAmount",
          "type": "uint256"
        }
      ],
      "name": "swap",
      "outputs": [
        {
          "internalType": "uint256[2]",
          "name": "amounts",
          "type": "uint256[2]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "user",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405263773594006009553480156200001957600080fd5b5060405162001569380380620015698339810160408190526200003c91620001cf565b8151829082906200005590600390602085019062000076565b5080516200006b90600490602084019062000076565b505050505062000289565b828054620000849062000236565b90600052602060002090601f016020900481019282620000a85760008555620000f3565b82601f10620000c357805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f3578251825591602001919060010190620000d6565b506200010192915062000105565b5090565b5b8082111562000101576000815560010162000106565b600082601f8301126200012d578081fd5b81516001600160401b03808211156200014a576200014a62000273565b604051601f8301601f19908116603f0116810190828211818310171562000175576200017562000273565b8160405283815260209250868385880101111562000191578485fd5b8491505b83821015620001b4578582018301518183018401529082019062000195565b83821115620001c557848385830101525b9695505050505050565b60008060408385031215620001e2578182fd5b82516001600160401b0380821115620001f9578384fd5b62000207868387016200011c565b935060208501519150808211156200021d578283fd5b506200022c858286016200011c565b9150509250929050565b6002810460018216806200024b57607f821691505b602082108114156200026d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6112d080620002996000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80638f76691a116100de578063a457c2d711610097578063c55dae6311610071578063c55dae631461042a578063d9caed121461043d578063dd62ed3e14610450578063e343fe12146104895761018e565b8063a457c2d7146103e4578063a9059cbb146103f7578063bc9365761461040a5761018e565b80638f76691a1461036a57806391b7f5ed1461037d57806395d89b4114610390578063988370a3146103985780639ce909b7146103ab578063a035b1fe146103db5761018e565b8063313ce5671161014b578063485cc95511610125578063485cc955146102965780636a627842146102d257806370a082311461030057806375ea5f2e146103135761018e565b8063313ce5671461025f578063395093511461026e57806347e7ef24146102815761018e565b806306fdde03146101935780630902f1ac146101b1578063095ea7b3146101ec57806318160ddd1461020f578063217a4b701461022157806323b872dd1461024c575b600080fd5b61019b61049c565b6040516101a8919061114c565b60405180910390f35b600854604080516001600160701b038084168252600160701b8404166020820152600160e01b90920463ffffffff16908201526060016101a8565b6101ff6101fa3660046110b1565b61052e565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b600654610234906001600160a01b031681565b6040516001600160a01b0390911681526020016101a8565b6101ff61025a366004611035565b610544565b604051601281526020016101a8565b6101ff61027c3660046110b1565b6105f3565b61029461028f3660046110b1565b61062f565b005b6102946102a4366004610faf565b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6102e56102e0366004610f8e565b610699565b604080519384526020840192909252908201526060016101a8565b61021361030e366004610f8e565b6106af565b6102946103213660046110da565b600880546001600160701b03928316600160701b026dffffffffffffffffffffffffffff60701b19949093166dffffffffffffffffffffffffffff199091161792909216179055565b600754610234906001600160a01b031681565b61029461038b366004611103565b600955565b61019b6106ce565b6102946103a6366004610fe1565b6106dd565b6102946103b9366004610f8e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61021360095481565b6101ff6103f23660046110b1565b610814565b6101ff6104053660046110b1565b6108ad565b61041d610418366004611070565b6108ba565b6040516101a8919061111b565b600554610234906001600160a01b031681565b61029461044b366004611035565b6109db565b61021361045e366004610faf565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61041d610497366004610fe1565b610a4e565b6060600380546104ab90611249565b80601f01602080910402602001604051908101604052809291908181526020018280546104d790611249565b80156105245780601f106104f957610100808354040283529160200191610524565b820191906000526020600020905b81548152906001019060200180831161050757829003601f168201915b5050505050905090565b600061053b338484610b70565b50600192915050565b6000610551848484610c94565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105db5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6105e88533858403610b70565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161053b91859061062a9086906111ca565b610b70565b6007546040516311f9fbc960e21b81526001600160a01b03848116600483015260248201849052909116906347e7ef2490604401600060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505050505050565b6103e880806106a88482610e63565b9193909250565b6001600160a01b0381166000908152602081905260409020545b919050565b6060600480546104ab90611249565b6005546001600160a01b038581169116141561078257600880548391906000906107119084906001600160701b031661119f565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550806008600e8282829054906101000a90046001600160701b03166107599190611221565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555061080d565b600880548291906000906107a09084906001600160701b0316611221565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550816008600e8282829054906101000a90046001600160701b03166107e8919061119f565b92506101000a8154816001600160701b0302191690836001600160701b031602179055505b5050505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156108965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105d2565b6108a33385858403610b70565b5060019392505050565b600061053b338484610c94565b6108c2610f42565b6005546001600160a01b038681169116141561095857821561091a57604051806040016040528060008152602001670de0b6b3a7640000600954866109079190611202565b61091191906111e2565b90529050610953565b604051806040016040528060095484670de0b6b3a764000061093c9190611202565b61094691906111e2565b8152602001600081525090505b6109d3565b821561099a5760405180604001604052806000815260200160095485670de0b6b3a76400006109879190611202565b61099191906111e2565b905290506109d3565b6040518060400160405280670de0b6b3a7640000600954856109bc9190611202565b6109c691906111e2565b8152602001600081525090505b949350505050565b600754604051636ce5768960e11b81526001600160a01b0385811660048301528481166024830152604482018490529091169063d9caed1290606401600060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b50505050505050565b610a56610f42565b6005546001600160a01b0386811691161415610aec578215610aae57604051806040016040528060008152602001670de0b6b3a764000060095486610a9b9190611202565b610aa591906111e2565b90529050610ae7565b604051806040016040528060095484670de0b6b3a7640000610ad09190611202565b610ada91906111e2565b8152602001600081525090505b610b67565b8215610b2e5760405180604001604052806000815260200160095485670de0b6b3a7640000610b1b9190611202565b610b2591906111e2565b90529050610b67565b6040518060400160405280670de0b6b3a764000060095485610b509190611202565b610b5a91906111e2565b8152602001600081525090505b95945050505050565b6001600160a01b038316610bd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105d2565b6001600160a01b038216610c335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105d2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cf85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105d2565b6001600160a01b038216610d5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105d2565b6001600160a01b03831660009081526020819052604090205481811015610dd25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105d2565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610e099084906111ca565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e5591815260200190565b60405180910390a350505050565b6001600160a01b038216610eb95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105d2565b8060026000828254610ecb91906111ca565b90915550506001600160a01b03821660009081526020819052604081208054839290610ef89084906111ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b03811681146106c957600080fd5b80356001600160701b03811681146106c957600080fd5b600060208284031215610f9f578081fd5b610fa882610f60565b9392505050565b60008060408385031215610fc1578081fd5b610fca83610f60565b9150610fd860208401610f60565b90509250929050565b600080600080600060a08688031215610ff8578081fd5b61100186610f60565b945061100f60208701610f60565b935061101d60408701610f60565b94979396509394606081013594506080013592915050565b600080600060608486031215611049578283fd5b61105284610f60565b925061106060208501610f60565b9150604084013590509250925092565b60008060008060808587031215611085578384fd5b61108e85610f60565b935061109c60208601610f60565b93969395505050506040820135916060013590565b600080604083850312156110c3578182fd5b6110cc83610f60565b946020939093013593505050565b600080604083850312156110ec578182fd5b6110f583610f77565b9150610fd860208401610f77565b600060208284031215611114578081fd5b5035919050565b60408101818360005b6002811015611143578151835260209283019290910190600101611124565b50505092915050565b6000602080835283518082850152825b818110156111785785810183015185820160400152820161115c565b818111156111895783604083870101525b50601f01601f1916929092016040019392505050565b60006001600160701b038083168185168083038211156111c1576111c1611284565b01949350505050565b600082198211156111dd576111dd611284565b500190565b6000826111fd57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561121c5761121c611284565b500290565b60006001600160701b038381169083168181101561124157611241611284565b039392505050565b60028104600182168061125d57607f821691505b6020821081141561127e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220c9773df44bc3b09c65b927f6c38e2b8454a662ac01fb41a7e44a70829027227164736f6c63430008020033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80638f76691a116100de578063a457c2d711610097578063c55dae6311610071578063c55dae631461042a578063d9caed121461043d578063dd62ed3e14610450578063e343fe12146104895761018e565b8063a457c2d7146103e4578063a9059cbb146103f7578063bc9365761461040a5761018e565b80638f76691a1461036a57806391b7f5ed1461037d57806395d89b4114610390578063988370a3146103985780639ce909b7146103ab578063a035b1fe146103db5761018e565b8063313ce5671161014b578063485cc95511610125578063485cc955146102965780636a627842146102d257806370a082311461030057806375ea5f2e146103135761018e565b8063313ce5671461025f578063395093511461026e57806347e7ef24146102815761018e565b806306fdde03146101935780630902f1ac146101b1578063095ea7b3146101ec57806318160ddd1461020f578063217a4b701461022157806323b872dd1461024c575b600080fd5b61019b61049c565b6040516101a8919061114c565b60405180910390f35b600854604080516001600160701b038084168252600160701b8404166020820152600160e01b90920463ffffffff16908201526060016101a8565b6101ff6101fa3660046110b1565b61052e565b60405190151581526020016101a8565b6002545b6040519081526020016101a8565b600654610234906001600160a01b031681565b6040516001600160a01b0390911681526020016101a8565b6101ff61025a366004611035565b610544565b604051601281526020016101a8565b6101ff61027c3660046110b1565b6105f3565b61029461028f3660046110b1565b61062f565b005b6102946102a4366004610faf565b600580546001600160a01b039384166001600160a01b03199182161790915560068054929093169116179055565b6102e56102e0366004610f8e565b610699565b604080519384526020840192909252908201526060016101a8565b61021361030e366004610f8e565b6106af565b6102946103213660046110da565b600880546001600160701b03928316600160701b026dffffffffffffffffffffffffffff60701b19949093166dffffffffffffffffffffffffffff199091161792909216179055565b600754610234906001600160a01b031681565b61029461038b366004611103565b600955565b61019b6106ce565b6102946103a6366004610fe1565b6106dd565b6102946103b9366004610f8e565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61021360095481565b6101ff6103f23660046110b1565b610814565b6101ff6104053660046110b1565b6108ad565b61041d610418366004611070565b6108ba565b6040516101a8919061111b565b600554610234906001600160a01b031681565b61029461044b366004611035565b6109db565b61021361045e366004610faf565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61041d610497366004610fe1565b610a4e565b6060600380546104ab90611249565b80601f01602080910402602001604051908101604052809291908181526020018280546104d790611249565b80156105245780601f106104f957610100808354040283529160200191610524565b820191906000526020600020905b81548152906001019060200180831161050757829003601f168201915b5050505050905090565b600061053b338484610b70565b50600192915050565b6000610551848484610c94565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105db5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6105e88533858403610b70565b506001949350505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161053b91859061062a9086906111ca565b610b70565b6007546040516311f9fbc960e21b81526001600160a01b03848116600483015260248201849052909116906347e7ef2490604401600060405180830381600087803b15801561067d57600080fd5b505af1158015610691573d6000803e3d6000fd5b505050505050565b6103e880806106a88482610e63565b9193909250565b6001600160a01b0381166000908152602081905260409020545b919050565b6060600480546104ab90611249565b6005546001600160a01b038581169116141561078257600880548391906000906107119084906001600160701b031661119f565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550806008600e8282829054906101000a90046001600160701b03166107599190611221565b92506101000a8154816001600160701b0302191690836001600160701b0316021790555061080d565b600880548291906000906107a09084906001600160701b0316611221565b92506101000a8154816001600160701b0302191690836001600160701b03160217905550816008600e8282829054906101000a90046001600160701b03166107e8919061119f565b92506101000a8154816001600160701b0302191690836001600160701b031602179055505b5050505050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156108965760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016105d2565b6108a33385858403610b70565b5060019392505050565b600061053b338484610c94565b6108c2610f42565b6005546001600160a01b038681169116141561095857821561091a57604051806040016040528060008152602001670de0b6b3a7640000600954866109079190611202565b61091191906111e2565b90529050610953565b604051806040016040528060095484670de0b6b3a764000061093c9190611202565b61094691906111e2565b8152602001600081525090505b6109d3565b821561099a5760405180604001604052806000815260200160095485670de0b6b3a76400006109879190611202565b61099191906111e2565b905290506109d3565b6040518060400160405280670de0b6b3a7640000600954856109bc9190611202565b6109c691906111e2565b8152602001600081525090505b949350505050565b600754604051636ce5768960e11b81526001600160a01b0385811660048301528481166024830152604482018490529091169063d9caed1290606401600060405180830381600087803b158015610a3157600080fd5b505af1158015610a45573d6000803e3d6000fd5b50505050505050565b610a56610f42565b6005546001600160a01b0386811691161415610aec578215610aae57604051806040016040528060008152602001670de0b6b3a764000060095486610a9b9190611202565b610aa591906111e2565b90529050610ae7565b604051806040016040528060095484670de0b6b3a7640000610ad09190611202565b610ada91906111e2565b8152602001600081525090505b610b67565b8215610b2e5760405180604001604052806000815260200160095485670de0b6b3a7640000610b1b9190611202565b610b2591906111e2565b90529050610b67565b6040518060400160405280670de0b6b3a764000060095485610b509190611202565b610b5a91906111e2565b8152602001600081525090505b95945050505050565b6001600160a01b038316610bd25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016105d2565b6001600160a01b038216610c335760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016105d2565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610cf85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016105d2565b6001600160a01b038216610d5a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016105d2565b6001600160a01b03831660009081526020819052604090205481811015610dd25760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016105d2565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290610e099084906111ca565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e5591815260200190565b60405180910390a350505050565b6001600160a01b038216610eb95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016105d2565b8060026000828254610ecb91906111ca565b90915550506001600160a01b03821660009081526020819052604081208054839290610ef89084906111ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b03811681146106c957600080fd5b80356001600160701b03811681146106c957600080fd5b600060208284031215610f9f578081fd5b610fa882610f60565b9392505050565b60008060408385031215610fc1578081fd5b610fca83610f60565b9150610fd860208401610f60565b90509250929050565b600080600080600060a08688031215610ff8578081fd5b61100186610f60565b945061100f60208701610f60565b935061101d60408701610f60565b94979396509394606081013594506080013592915050565b600080600060608486031215611049578283fd5b61105284610f60565b925061106060208501610f60565b9150604084013590509250925092565b60008060008060808587031215611085578384fd5b61108e85610f60565b935061109c60208601610f60565b93969395505050506040820135916060013590565b600080604083850312156110c3578182fd5b6110cc83610f60565b946020939093013593505050565b600080604083850312156110ec578182fd5b6110f583610f77565b9150610fd860208401610f77565b600060208284031215611114578081fd5b5035919050565b60408101818360005b6002811015611143578151835260209283019290910190600101611124565b50505092915050565b6000602080835283518082850152825b818110156111785785810183015185820160400152820161115c565b818111156111895783604083870101525b50601f01601f1916929092016040019392505050565b60006001600160701b038083168185168083038211156111c1576111c1611284565b01949350505050565b600082198211156111dd576111dd611284565b500190565b6000826111fd57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561121c5761121c611284565b500290565b60006001600160701b038381169083168181101561124157611241611284565b039392505050565b60028104600182168061125d57607f821691505b6020821081141561127e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220c9773df44bc3b09c65b927f6c38e2b8454a662ac01fb41a7e44a70829027227164736f6c63430008020033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
