{
  "_format": "hh-sol-artifact-1",
  "contractName": "FixedPointTest",
  "sourceName": "contracts/soma/SomaSwap/test/FixedPointTest.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        }
      ],
      "name": "decode",
      "outputs": [
        {
          "internalType": "uint112",
          "name": "",
          "type": "uint112"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "_x",
              "type": "uint256"
            }
          ],
          "internalType": "struct FixedPoint.uq144x112",
          "name": "self",
          "type": "tuple"
        }
      ],
      "name": "decode144",
      "outputs": [
        {
          "internalType": "uint144",
          "name": "",
          "type": "uint144"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "other",
          "type": "tuple"
        }
      ],
      "name": "divuq",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint112",
          "name": "x",
          "type": "uint112"
        }
      ],
      "name": "encode",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint144",
          "name": "x",
          "type": "uint144"
        }
      ],
      "name": "encode144",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "_x",
              "type": "uint256"
            }
          ],
          "internalType": "struct FixedPoint.uq144x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "numerator",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "denominator",
          "type": "uint256"
        }
      ],
      "name": "fraction",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "other",
          "type": "tuple"
        }
      ],
      "name": "getGasCostOfDivuq",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "numerator",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "denominator",
          "type": "uint256"
        }
      ],
      "name": "getGasCostOfFraction",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "other",
          "type": "tuple"
        }
      ],
      "name": "getGasCostOfMuluq",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        }
      ],
      "name": "getGasCostOfSqrt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "y",
          "type": "uint256"
        }
      ],
      "name": "mul",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "_x",
              "type": "uint256"
            }
          ],
          "internalType": "struct FixedPoint.uq144x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        },
        {
          "internalType": "int256",
          "name": "y",
          "type": "int256"
        }
      ],
      "name": "muli",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "other",
          "type": "tuple"
        }
      ],
      "name": "muluq",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        }
      ],
      "name": "reciprocal",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "self",
          "type": "tuple"
        }
      ],
      "name": "sqrt",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "_x",
              "type": "uint224"
            }
          ],
          "internalType": "struct FixedPoint.uq112x112",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061156a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636d173f7111610097578063c814e31411610066578063c814e31414610235578063ca2d029914610248578063ca74fcc01461025b578063d993d3791461026e57600080fd5b80636d173f71146101da57806389258451146101ed578063af35b76914610200578063b1acad5c1461022257600080fd5b80634fd04a40116100d35780634fd04a40146101505780635a6066891461017b5780635f9f4c3b1461018e578063644a478b146101b957600080fd5b80630f1530e4146100fa57806331f92b131461012a5780633f1626c81461013d575b600080fd5b61010d61010836600461127f565b610281565b60405190516001600160e01b031681526020015b60405180910390f35b61010d6101383660046112b9565b6102a3565b61010d61014b3660046112b9565b6102c9565b61016361015e3660046112b9565b6102ef565b6040516001600160701b039091168152602001610121565b61010d6101893660046112d5565b610313565b6101a161019c3660046112b9565b610348565b6040516001600160901b039091168152602001610121565b6101cc6101c736600461127f565b610363565b604051908152602001610121565b6101cc6101e83660046112d5565b610387565b6101cc6101fb36600461130a565b6103ae565b61021361020e36600461130a565b6103c8565b60405190518152602001610121565b6101cc6102303660046112b9565b6103ef565b610213610243366004611335565b61041a565b61010d61025636600461135e565b610451565b61010d6102693660046112d5565b61048a565b6101cc61027c3660046112d5565b6104bf565b60408051602081019091526000815261029a83836104e6565b90505b92915050565b60408051602081019091526000815261029d6102c4368490038401846113be565b61061e565b60408051602081019091526000815261029d6102ea368490038401846113be565b61072d565b600061029d610303368490038401846113be565b5160701c6001600160701b031690565b60408051602081019091526000815261029a610334368590038501856113be565b610343368590038501856113be565b61080e565b600061029d61035c368490038401846113f8565b5160701c90565b6000805a905061037384846104e6565b505a61037f9082611432565b949350505050565b6000805a905061037361039f368690038601866113be565b610343368690038601866113be565b600061029a6103c2368590038501856113be565b83610a07565b60408051602081019091526000815261029a6103e9368590038501856113be565b83610aa8565b6000805a90506104076102ea368590038501856113be565b505a6104139082611432565b9392505050565b60408051602080820183526000808352835180830185525282519081019092526001600160701b0319607084901b1682529061029d565b6040805160208082018352600080835283518083018552528251908101909252600160701b600160e01b03607084901b1682529061029d565b60408051602081019091526000815261029a6104ab368590038501856113be565b6104ba368590038501856113be565b610b46565b6000805a90506103736104d7368690038601866113be565b6104ba368690038601866113be565b604080516020810190915260008152600082116105595760405162461bcd60e51b815260206004820152602660248201527f4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206260448201526579207a65726f60d01b60648201526084015b60405180910390fd5b82600003610576575060408051602081019091526000815261029d565b6001600160901b03831161060d57600061059483607086901b61145b565b90506001600160e01b038111156105ed5760405162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f7700006044820152606401610550565b6040518060200160405280826001600160e01b031681525091505061029d565b600061059484600160701b85610d25565b60408051602081019091526000815281516001600160e01b031660000361069a5760405162461bcd60e51b815260206004820152602a60248201527f4669786564506f696e743a3a7265636970726f63616c3a207265636970726f63604482015269616c206f66207a65726f60b01b6064820152608401610550565b81516001600160e01b03166001036106f45760405162461bcd60e51b815260206004820181905260248201527f4669786564506f696e743a3a7265636970726f63616c3a206f766572666c6f776044820152606401610550565b604051806020016040528083600001516001600160e01b0316600160e01b61071c919061145b565b6001600160e01b0316905292915050565b60408051602081019091526000815281516001600160901b036001600160e01b039091161161077b57604051806020016040528061071c607085600001516001600160e01b0316901b610df0565b600061079383600001516001600160e01b0316610f6c565b61079e9060ff61146f565b90506107ab600282611488565b6107b5908261146f565b9050604051806020016040528060028360706107d1919061146f565b6107db91906114aa565b60ff166107fa8460ff1687600001516001600160e01b0316901b610df0565b6001600160e01b03911b1690529392505050565b60408051602081019091526000815282516001600160e01b0316158061083c575081516001600160e01b0316155b15610856575060408051602081019091526000815261029d565b825182516001600160701b03607083811c8216938216929081901c82169116600061088183866114cc565b9050600061089b6001600160701b038085169087166114cc565b905060006108b56001600160701b038086169089166114cc565b905060006108cf6001600160701b038089169088166114cc565b90506001600160701b036001600160e01b038516111561093b5760405162461bcd60e51b815260206004820152602160248201527f4669786564506f696e743a3a6d756c75713a207570706572206f766572666c6f6044820152607760f81b6064820152608401610550565b6000607084811c6001600160701b0316906001600160e01b03848116916109739187169089901b600160701b600160e01b03166114fe565b61097d91906114fe565b61098791906114fe565b90506001600160e01b038111156109e05760405162461bcd60e51b815260206004820152601f60248201527f4669786564506f696e743a3a6d756c75713a2073756d206f766572666c6f77006044820152606401610550565b60408051602081019091526001600160e01b0390911681529b9a5050505050505050505050565b600080610a3c84600001516001600160e01b031660008512610a295784610a32565b610a3285611511565b600160701b610d25565b9050600160ff1b8110610a915760405162461bcd60e51b815260206004820152601a60248201527f4669786564506f696e743a3a6d756c693a206f766572666c6f770000000000006044820152606401610550565b60008312610a9f578061037f565b61037f81611511565b6040805160208101909152600081526000821580610ae5575083516001600160e01b031683610ad7818361152d565b9250610ae3908361145b565b145b610b315760405162461bcd60e51b815260206004820152601960248201527f4669786564506f696e743a3a6d756c3a206f766572666c6f77000000000000006044820152606401610550565b60408051602081019091529081529392505050565b60408051602081019091526000815281516001600160e01b0316610bb85760405162461bcd60e51b815260206004820152602360248201527f4669786564506f696e743a3a64697675713a206469766973696f6e206279207a60448201526265726f60e81b6064820152608401610550565b815183516001600160e01b03918216911603610be657506040805160208101909152600160701b815261029d565b82516001600160901b036001600160e01b0390911611610c825781518351600091610c29916001600160e01b039091169060701b6001600160701b03191661145b565b90506001600160e01b038111156105ed5760405162461bcd60e51b815260206004820152601b60248201527f4669786564506f696e743a3a64697675713a206f766572666c6f7700000000006044820152606401610550565b6000610cad600160701b85600001516001600160e01b031685600001516001600160e01b0316610d25565b90506001600160e01b03811115610d065760405162461bcd60e51b815260206004820152601b60248201527f4669786564506f696e743a3a64697675713a206f766572666c6f7700000000006044820152606401610550565b60408051602081019091526001600160e01b0390911681529392505050565b6000806000610d3486866110a9565b9150915060008480610d4857610d48611445565b868809905082811115610d6357610d60600183611432565b91505b610d6d8184611432565b925081600003610d8b57610d81858461145b565b9350505050610413565b848210610dda5760405162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f570000000000006044820152606401610550565b610de58383876110eb565b979650505050505050565b600081600003610e0257506000919050565b816001600160801b8210610e1b5760809190911c9060401b5b600160401b8210610e315760409190911c9060201b5b6401000000008210610e485760209190911c9060101b5b620100008210610e5d5760109190911c9060081b5b6101008210610e715760089190911c9060041b5b60108210610e845760049190911c9060021b5b60088210610e905760011b5b6001610e9c828661145b565b610ea690836114fe565b901c90506001610eb6828661145b565b610ec090836114fe565b901c90506001610ed0828661145b565b610eda90836114fe565b901c90506001610eea828661145b565b610ef490836114fe565b901c90506001610f04828661145b565b610f0e90836114fe565b901c90506001610f1e828661145b565b610f2890836114fe565b901c90506001610f38828661145b565b610f4290836114fe565b901c90506000610f52828661145b565b9050808210610f615780610f63565b815b95945050505050565b6000808211610fc75760405162461bcd60e51b815260206004820152602160248201527f4269744d6174683a3a6d6f73745369676e69666963616e744269743a207a65726044820152606f60f81b6064820152608401610550565b600160801b8210610fe557608091821c91610fe29082611544565b90505b600160401b821061100357604091821c916110009082611544565b90505b640100000000821061102257602091821c9161101f9082611544565b90505b62010000821061103f57601091821c9161103c9082611544565b90505b610100821061105b57600891821c916110589082611544565b90505b6010821061107657600491821c916110739082611544565b90505b6004821061109157600291821c9161108e9082611544565b90505b600282106110a45761029d600182611544565b919050565b6000808060001984860990506110bf848661152d565b92506110cb8382611432565b9150828110156110e3576110e0600183611432565b91505b509250929050565b6000806110f783611266565b83169050611105818461145b565b9250611111818661145b565b94508061111d82611266565b611127919061145b565b6111329060016114fe565b61113c908561152d565b61114690866114fe565b94506001611154818561152d565b61115f906002611432565b611169908261152d565b9050611175818561152d565b611180906002611432565b61118a908261152d565b9050611196818561152d565b6111a1906002611432565b6111ab908261152d565b90506111b7818561152d565b6111c2906002611432565b6111cc908261152d565b90506111d8818561152d565b6111e3906002611432565b6111ed908261152d565b90506111f9818561152d565b611204906002611432565b61120e908261152d565b905061121a818561152d565b611225906002611432565b61122f908261152d565b905061123b818561152d565b611246906002611432565b611250908261152d565b905061125c818761152d565b9695505050505050565b600061127482600019611432565b61029d9060016114fe565b6000806040838503121561129257600080fd5b50508035926020909101359150565b6000602082840312156112b357600080fd5b50919050565b6000602082840312156112cb57600080fd5b61029a83836112a1565b600080604083850312156112e857600080fd5b6112f284846112a1565b915061130184602085016112a1565b90509250929050565b6000806040838503121561131d57600080fd5b61132784846112a1565b946020939093013593505050565b60006020828403121561134757600080fd5b81356001600160901b038116811461041357600080fd5b60006020828403121561137057600080fd5b81356001600160701b038116811461041357600080fd5b6040516020810167ffffffffffffffff811182821017156113b857634e487b7160e01b600052604160045260246000fd5b60405290565b6000602082840312156113d057600080fd5b6113d8611387565b82356001600160e01b03811681146113ef57600080fd5b81529392505050565b60006020828403121561140a57600080fd5b611412611387565b9135825250919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561029d5761029d61141c565b634e487b7160e01b600052601260045260246000fd5b60008261146a5761146a611445565b500490565b60ff828116828216039081111561029d5761029d61141c565b600060ff83168061149b5761149b611445565b8060ff84160691505092915050565b600060ff8316806114bd576114bd611445565b8060ff84160491505092915050565b6001600160e01b038281168282168181028316929181158285048214176114f5576114f561141c565b50505092915050565b8082018082111561029d5761029d61141c565b6000600160ff1b82016115265761152661141c565b5060000390565b808202811582820484141761029d5761029d61141c565b60ff818116838216019081111561029d5761029d61141c56fea164736f6c6343000812000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80636d173f7111610097578063c814e31411610066578063c814e31414610235578063ca2d029914610248578063ca74fcc01461025b578063d993d3791461026e57600080fd5b80636d173f71146101da57806389258451146101ed578063af35b76914610200578063b1acad5c1461022257600080fd5b80634fd04a40116100d35780634fd04a40146101505780635a6066891461017b5780635f9f4c3b1461018e578063644a478b146101b957600080fd5b80630f1530e4146100fa57806331f92b131461012a5780633f1626c81461013d575b600080fd5b61010d61010836600461127f565b610281565b60405190516001600160e01b031681526020015b60405180910390f35b61010d6101383660046112b9565b6102a3565b61010d61014b3660046112b9565b6102c9565b61016361015e3660046112b9565b6102ef565b6040516001600160701b039091168152602001610121565b61010d6101893660046112d5565b610313565b6101a161019c3660046112b9565b610348565b6040516001600160901b039091168152602001610121565b6101cc6101c736600461127f565b610363565b604051908152602001610121565b6101cc6101e83660046112d5565b610387565b6101cc6101fb36600461130a565b6103ae565b61021361020e36600461130a565b6103c8565b60405190518152602001610121565b6101cc6102303660046112b9565b6103ef565b610213610243366004611335565b61041a565b61010d61025636600461135e565b610451565b61010d6102693660046112d5565b61048a565b6101cc61027c3660046112d5565b6104bf565b60408051602081019091526000815261029a83836104e6565b90505b92915050565b60408051602081019091526000815261029d6102c4368490038401846113be565b61061e565b60408051602081019091526000815261029d6102ea368490038401846113be565b61072d565b600061029d610303368490038401846113be565b5160701c6001600160701b031690565b60408051602081019091526000815261029a610334368590038501856113be565b610343368590038501856113be565b61080e565b600061029d61035c368490038401846113f8565b5160701c90565b6000805a905061037384846104e6565b505a61037f9082611432565b949350505050565b6000805a905061037361039f368690038601866113be565b610343368690038601866113be565b600061029a6103c2368590038501856113be565b83610a07565b60408051602081019091526000815261029a6103e9368590038501856113be565b83610aa8565b6000805a90506104076102ea368590038501856113be565b505a6104139082611432565b9392505050565b60408051602080820183526000808352835180830185525282519081019092526001600160701b0319607084901b1682529061029d565b6040805160208082018352600080835283518083018552528251908101909252600160701b600160e01b03607084901b1682529061029d565b60408051602081019091526000815261029a6104ab368590038501856113be565b6104ba368590038501856113be565b610b46565b6000805a90506103736104d7368690038601866113be565b6104ba368690038601866113be565b604080516020810190915260008152600082116105595760405162461bcd60e51b815260206004820152602660248201527f4669786564506f696e743a3a6672616374696f6e3a206469766973696f6e206260448201526579207a65726f60d01b60648201526084015b60405180910390fd5b82600003610576575060408051602081019091526000815261029d565b6001600160901b03831161060d57600061059483607086901b61145b565b90506001600160e01b038111156105ed5760405162461bcd60e51b815260206004820152601e60248201527f4669786564506f696e743a3a6672616374696f6e3a206f766572666c6f7700006044820152606401610550565b6040518060200160405280826001600160e01b031681525091505061029d565b600061059484600160701b85610d25565b60408051602081019091526000815281516001600160e01b031660000361069a5760405162461bcd60e51b815260206004820152602a60248201527f4669786564506f696e743a3a7265636970726f63616c3a207265636970726f63604482015269616c206f66207a65726f60b01b6064820152608401610550565b81516001600160e01b03166001036106f45760405162461bcd60e51b815260206004820181905260248201527f4669786564506f696e743a3a7265636970726f63616c3a206f766572666c6f776044820152606401610550565b604051806020016040528083600001516001600160e01b0316600160e01b61071c919061145b565b6001600160e01b0316905292915050565b60408051602081019091526000815281516001600160901b036001600160e01b039091161161077b57604051806020016040528061071c607085600001516001600160e01b0316901b610df0565b600061079383600001516001600160e01b0316610f6c565b61079e9060ff61146f565b90506107ab600282611488565b6107b5908261146f565b9050604051806020016040528060028360706107d1919061146f565b6107db91906114aa565b60ff166107fa8460ff1687600001516001600160e01b0316901b610df0565b6001600160e01b03911b1690529392505050565b60408051602081019091526000815282516001600160e01b0316158061083c575081516001600160e01b0316155b15610856575060408051602081019091526000815261029d565b825182516001600160701b03607083811c8216938216929081901c82169116600061088183866114cc565b9050600061089b6001600160701b038085169087166114cc565b905060006108b56001600160701b038086169089166114cc565b905060006108cf6001600160701b038089169088166114cc565b90506001600160701b036001600160e01b038516111561093b5760405162461bcd60e51b815260206004820152602160248201527f4669786564506f696e743a3a6d756c75713a207570706572206f766572666c6f6044820152607760f81b6064820152608401610550565b6000607084811c6001600160701b0316906001600160e01b03848116916109739187169089901b600160701b600160e01b03166114fe565b61097d91906114fe565b61098791906114fe565b90506001600160e01b038111156109e05760405162461bcd60e51b815260206004820152601f60248201527f4669786564506f696e743a3a6d756c75713a2073756d206f766572666c6f77006044820152606401610550565b60408051602081019091526001600160e01b0390911681529b9a5050505050505050505050565b600080610a3c84600001516001600160e01b031660008512610a295784610a32565b610a3285611511565b600160701b610d25565b9050600160ff1b8110610a915760405162461bcd60e51b815260206004820152601a60248201527f4669786564506f696e743a3a6d756c693a206f766572666c6f770000000000006044820152606401610550565b60008312610a9f578061037f565b61037f81611511565b6040805160208101909152600081526000821580610ae5575083516001600160e01b031683610ad7818361152d565b9250610ae3908361145b565b145b610b315760405162461bcd60e51b815260206004820152601960248201527f4669786564506f696e743a3a6d756c3a206f766572666c6f77000000000000006044820152606401610550565b60408051602081019091529081529392505050565b60408051602081019091526000815281516001600160e01b0316610bb85760405162461bcd60e51b815260206004820152602360248201527f4669786564506f696e743a3a64697675713a206469766973696f6e206279207a60448201526265726f60e81b6064820152608401610550565b815183516001600160e01b03918216911603610be657506040805160208101909152600160701b815261029d565b82516001600160901b036001600160e01b0390911611610c825781518351600091610c29916001600160e01b039091169060701b6001600160701b03191661145b565b90506001600160e01b038111156105ed5760405162461bcd60e51b815260206004820152601b60248201527f4669786564506f696e743a3a64697675713a206f766572666c6f7700000000006044820152606401610550565b6000610cad600160701b85600001516001600160e01b031685600001516001600160e01b0316610d25565b90506001600160e01b03811115610d065760405162461bcd60e51b815260206004820152601b60248201527f4669786564506f696e743a3a64697675713a206f766572666c6f7700000000006044820152606401610550565b60408051602081019091526001600160e01b0390911681529392505050565b6000806000610d3486866110a9565b9150915060008480610d4857610d48611445565b868809905082811115610d6357610d60600183611432565b91505b610d6d8184611432565b925081600003610d8b57610d81858461145b565b9350505050610413565b848210610dda5760405162461bcd60e51b815260206004820152601a60248201527f46756c6c4d6174683a2046554c4c4449565f4f564552464c4f570000000000006044820152606401610550565b610de58383876110eb565b979650505050505050565b600081600003610e0257506000919050565b816001600160801b8210610e1b5760809190911c9060401b5b600160401b8210610e315760409190911c9060201b5b6401000000008210610e485760209190911c9060101b5b620100008210610e5d5760109190911c9060081b5b6101008210610e715760089190911c9060041b5b60108210610e845760049190911c9060021b5b60088210610e905760011b5b6001610e9c828661145b565b610ea690836114fe565b901c90506001610eb6828661145b565b610ec090836114fe565b901c90506001610ed0828661145b565b610eda90836114fe565b901c90506001610eea828661145b565b610ef490836114fe565b901c90506001610f04828661145b565b610f0e90836114fe565b901c90506001610f1e828661145b565b610f2890836114fe565b901c90506001610f38828661145b565b610f4290836114fe565b901c90506000610f52828661145b565b9050808210610f615780610f63565b815b95945050505050565b6000808211610fc75760405162461bcd60e51b815260206004820152602160248201527f4269744d6174683a3a6d6f73745369676e69666963616e744269743a207a65726044820152606f60f81b6064820152608401610550565b600160801b8210610fe557608091821c91610fe29082611544565b90505b600160401b821061100357604091821c916110009082611544565b90505b640100000000821061102257602091821c9161101f9082611544565b90505b62010000821061103f57601091821c9161103c9082611544565b90505b610100821061105b57600891821c916110589082611544565b90505b6010821061107657600491821c916110739082611544565b90505b6004821061109157600291821c9161108e9082611544565b90505b600282106110a45761029d600182611544565b919050565b6000808060001984860990506110bf848661152d565b92506110cb8382611432565b9150828110156110e3576110e0600183611432565b91505b509250929050565b6000806110f783611266565b83169050611105818461145b565b9250611111818661145b565b94508061111d82611266565b611127919061145b565b6111329060016114fe565b61113c908561152d565b61114690866114fe565b94506001611154818561152d565b61115f906002611432565b611169908261152d565b9050611175818561152d565b611180906002611432565b61118a908261152d565b9050611196818561152d565b6111a1906002611432565b6111ab908261152d565b90506111b7818561152d565b6111c2906002611432565b6111cc908261152d565b90506111d8818561152d565b6111e3906002611432565b6111ed908261152d565b90506111f9818561152d565b611204906002611432565b61120e908261152d565b905061121a818561152d565b611225906002611432565b61122f908261152d565b905061123b818561152d565b611246906002611432565b611250908261152d565b905061125c818761152d565b9695505050505050565b600061127482600019611432565b61029d9060016114fe565b6000806040838503121561129257600080fd5b50508035926020909101359150565b6000602082840312156112b357600080fd5b50919050565b6000602082840312156112cb57600080fd5b61029a83836112a1565b600080604083850312156112e857600080fd5b6112f284846112a1565b915061130184602085016112a1565b90509250929050565b6000806040838503121561131d57600080fd5b61132784846112a1565b946020939093013593505050565b60006020828403121561134757600080fd5b81356001600160901b038116811461041357600080fd5b60006020828403121561137057600080fd5b81356001600160701b038116811461041357600080fd5b6040516020810167ffffffffffffffff811182821017156113b857634e487b7160e01b600052604160045260246000fd5b60405290565b6000602082840312156113d057600080fd5b6113d8611387565b82356001600160e01b03811681146113ef57600080fd5b81529392505050565b60006020828403121561140a57600080fd5b611412611387565b9135825250919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561029d5761029d61141c565b634e487b7160e01b600052601260045260246000fd5b60008261146a5761146a611445565b500490565b60ff828116828216039081111561029d5761029d61141c565b600060ff83168061149b5761149b611445565b8060ff84160691505092915050565b600060ff8316806114bd576114bd611445565b8060ff84160491505092915050565b6001600160e01b038281168282168181028316929181158285048214176114f5576114f561141c565b50505092915050565b8082018082111561029d5761029d61141c565b6000600160ff1b82016115265761152661141c565b5060000390565b808202811582820484141761029d5761029d61141c565b60ff818116838216019081111561029d5761029d61141c56fea164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
