{
  "_format": "hh-sol-artifact-1",
  "contractName": "ReserveHarness",
  "sourceName": "contracts/test/ReserveHarness.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "contract IERC20",
          "name": "_token",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reserveAccumulated",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "withdrawAccumulated",
          "type": "uint256"
        }
      ],
      "name": "Checkpoint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract IERC20",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "Deployed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousManager",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newManager",
          "type": "address"
        }
      ],
      "name": "ManagerTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "pendingOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipOffered",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "checkpoint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ERC20Mintable",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "doubleCheckpoint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_startTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_endTimestamp",
          "type": "uint32"
        }
      ],
      "name": "getReserveAccumulatedBetween",
      "outputs": [
        {
          "internalType": "uint224",
          "name": "",
          "type": "uint224"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "manager",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newManager",
          "type": "address"
        }
      ],
      "name": "setManager",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint224",
              "name": "amount",
              "type": "uint224"
            },
            {
              "internalType": "uint32",
              "name": "timestamp",
              "type": "uint32"
            }
          ],
          "internalType": "struct ObservationLib.Observation[]",
          "name": "observations",
          "type": "tuple[]"
        }
      ],
      "name": "setObservationsAt",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "token",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawAccumulator",
      "outputs": [
        {
          "internalType": "uint224",
          "name": "",
          "type": "uint224"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523480156200001157600080fd5b5060405162001964380380620019648339810160408190526200003491620000e3565b818181620000428162000093565b506001600160601b0319606082901b166080526040516001600160a01b038216907ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e90600090a2505050506200013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000f757600080fd5b8251620001048162000122565b6020840151909250620001178162000122565b809150509250929050565b6001600160a01b03811681146200013857600080fd5b50565b60805160601c6117f56200016f6000396000818161012401528181610238015281816103ff01526108e301526117f56000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063d0ebdbe711610066578063d0ebdbe7146101ec578063e30c39781461020f578063f2fde38b14610220578063fc0c546a1461023357600080fd5b8063715018a6146101b85780638da5cb5b146101c0578063af6a9400146101d1578063c2c4c5c1146101e457600080fd5b80632d00ddda116100d35780632d00ddda14610161578063481c6a751461018c5780634e71e0c81461019d5780636099b487146101a557600080fd5b80631af082db146100fa578063205c28781461010f57806321df0da714610122575b600080fd5b61010d61010836600461144f565b61025a565b005b61010d61011d366004611423565b6102f6565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b600354610174906001600160e01b031681565b6040516001600160e01b039091168152602001610158565b6002546001600160a01b0316610144565b61010d61047d565b61010d6101b3366004611423565b61050b565b61010d610598565b6000546001600160a01b0316610144565b6101746101df3660046114ff565b61060d565b61010d6106db565b6101ff6101fa366004611406565b6106e3565b6040519015158152602001610158565b6001546001600160a01b0316610144565b61010d61022e366004611406565b610757565b6101447f000000000000000000000000000000000000000000000000000000000000000081565b60005b818110156102b25782828281811061027757610277611722565b90506040020160058262ffffff811061029257610292611722565b0161029d8282611738565b508190506102aa816116a9565b91505061025d565b5060048054630100000062ffffff9093169283027fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090911690921791909117905550565b336103096002546001600160a01b031690565b6001600160a01b0316148061033757503361032c6000546001600160a01b031690565b6001600160a01b0316145b6103ae5760405162461bcd60e51b815260206004820152602660248201527f4d616e61676561626c652f63616c6c65722d6e6f742d6d616e616765722d6f7260448201527f2d6f776e6572000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103b6610893565b600380548291906000906103d49084906001600160e01b03166115a5565b92506101000a8154816001600160e01b0302191690836001600160e01b0316021790555061043682827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b5a9092919063ffffffff16565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58260405161047191815260200190565b60405180910390a25050565b6001546001600160a01b031633146104d75760405162461bcd60e51b815260206004820152601f60248201527f4f776e61626c652f63616c6c65722d6e6f742d70656e64696e674f776e65720060448201526064016103a5565b6001546104ec906001600160a01b0316610bca565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055565b610513610893565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b038316906340c10f1990604401600060405180830381600087803b15801561057457600080fd5b505af1158015610588573d6000803e3d6000fd5b50505050610594610893565b5050565b336105ab6000546001600160a01b031690565b6001600160a01b0316146106015760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064016103a5565b61060b6000610bca565b565b60008163ffffffff168363ffffffff161061066a5760405162461bcd60e51b815260206004820152601b60248201527f526573657276652f73746172742d6c6573732d7468616e2d656e64000000000060448201526064016103a5565b60045462ffffff630100000082048116911660008061068883610c27565b9150915060008061069885610c9d565b9150915060006106ac848387868b8f610d10565b905060006106be858488878c8f610d10565b90506106ca828261163a565b985050505050505050505b92915050565b61060b610893565b6000336106f86000546001600160a01b031690565b6001600160a01b03161461074e5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064016103a5565b6106d582610db7565b3361076a6000546001600160a01b031690565b6001600160a01b0316146107c05760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064016103a5565b6001600160a01b03811661083c5760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c652f70656e64696e674f776e65722d6e6f742d7a65726f2d616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103a5565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f239a2ddded15777fa246aed5f7e1a9bc69a39d4eb4a397034d1d85766cca7d4c90600090a250565b600480546040517f70a08231000000000000000000000000000000000000000000000000000000008152309281019290925262ffffff630100000082048116929116906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561092557600080fd5b505afa158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d91906114e6565b6003549091506001600160e01b031660008061097885610c27565b9150915080600001516001600160e01b0316836001600160e01b03168561099f91906115ee565b1115610b52574260006109b285876115a5565b90508163ffffffff16836020015163ffffffff1614610aa7576040518060400160405280826001600160e01b031681526020018363ffffffff1681525060058862ffffff1662ffffff8110610a0957610a09611722565b825160209093015163ffffffff16600160e01b026001600160e01b0390931692909217910155610a3f62ffffff80891690610ea3565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff9283161790558881161015610aa257610a838860016115d0565b600460036101000a81548162ffffff021916908362ffffff1602179055505b610b0c565b6040518060400160405280826001600160e01b031681526020018363ffffffff1681525060058562ffffff1662ffffff8110610ae557610ae5611722565b825160209093015163ffffffff16600160e01b026001600160e01b03909316929092179101555b604080516001600160e01b038084168252871660208201527f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced910160405180910390a150505b505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610bc5908490610ec0565b505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820190915260008082526020820181905290610c4e62ffffff80851690610fa5565b915060058262ffffff1662ffffff8110610c6a57610c6a611722565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820152919391925050565b60408051808201909152600080825260208201528190600562ffffff808416908110610ccb57610ccb611722565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201819052909150610d0b5760009150600582610c6a565b915091565b60004262ffffff8416610d27576000915050610dad565b8263ffffffff16876020015163ffffffff161115610d49576000915050610dad565b8263ffffffff16886020015163ffffffff1611610d695750508551610dad565b600080610d7b60058989888a88610fcd565b915091508463ffffffff16816020015163ffffffff161415610da257519250610dad915050565b50519150610dad9050565b9695505050505050565b6002546000906001600160a01b03908116908316811415610e405760405162461bcd60e51b815260206004820152602360248201527f4d616e61676561626c652f6578697374696e672d6d616e616765722d6164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103a5565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385811691821790925560405190918316907f9cb45c728de594dab506a1f1a8554e24c8eeaf983618d5ec5dd7bc6f3c49feee90600090a350600192915050565b6000610eb9610eb38460016115ee565b8361119a565b9392505050565b6000610f15826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111a69092919063ffffffff16565b805190915015610bc55780806020019051810190610f3391906114c4565b610bc55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103a5565b600081610fb4575060006106d5565b610eb96001610fc384866115ee565b610eb39190611662565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260008662ffffff1690506000818962ffffff1610611018578862ffffff16611033565b600161102962ffffff8816846115ee565b6110339190611662565b905060005b600261104483856115ee565b61104e9190611626565b90508a611060828962ffffff1661119a565b62ffffff1662ffffff811061107757611077611722565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201819052909550806110bf576110b78260016115ee565b935050611038565b8b6110cf838a62ffffff16610ea3565b62ffffff1662ffffff81106110e6576110e6611722565b604080518082019091529101546001600160e01b038116825263ffffffff600160e01b9091048116602083015290955060009061112b90838116908c908b906111bd16565b905080801561115457506111548660200151898c63ffffffff166111bd9092919063ffffffff16565b1561116057505061118c565b8061117757611170600184611662565b9350611185565b6111828360016115ee565b94505b5050611038565b505050965096945050505050565b6000610eb982846116e2565b60606111b5848460008561128e565b949350505050565b60008163ffffffff168463ffffffff16111580156111e757508163ffffffff168363ffffffff1611155b15611203578263ffffffff168463ffffffff1611159050610eb9565b60008263ffffffff168563ffffffff16116112325761122d63ffffffff8616640100000000611606565b61123a565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116112725761126d63ffffffff8616640100000000611606565b61127a565b8463ffffffff165b64ffffffffff169091111595945050505050565b6060824710156113065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103a5565b843b6113545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103a5565b600080866001600160a01b031685876040516113709190611538565b60006040518083038185875af1925050503d80600081146113ad576040519150601f19603f3d011682016040523d82523d6000602084013e6113b2565b606091505b50915091506113c28282866113cd565b979650505050505050565b606083156113dc575081610eb9565b8251156113ec5782518084602001fd5b8160405162461bcd60e51b81526004016103a59190611554565b60006020828403121561141857600080fd5b8135610eb981611795565b6000806040838503121561143657600080fd5b823561144181611795565b946020939093013593505050565b6000806020838503121561146257600080fd5b823567ffffffffffffffff8082111561147a57600080fd5b818501915085601f83011261148e57600080fd5b81358181111561149d57600080fd5b8660208260061b85010111156114b257600080fd5b60209290920196919550909350505050565b6000602082840312156114d657600080fd5b81518015158114610eb957600080fd5b6000602082840312156114f857600080fd5b5051919050565b6000806040838503121561151257600080fd5b823561151d816117ad565b9150602083013561152d816117ad565b809150509250929050565b6000825161154a818460208701611679565b9190910192915050565b6020815260008251806020840152611573816040850160208701611679565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006001600160e01b038083168185168083038211156115c7576115c76116f6565b01949350505050565b600062ffffff8083168185168083038211156115c7576115c76116f6565b60008219821115611601576116016116f6565b500190565b600064ffffffffff8083168185168083038211156115c7576115c76116f6565b6000826116355761163561170c565b500490565b60006001600160e01b038381169083168181101561165a5761165a6116f6565b039392505050565b600082821015611674576116746116f6565b500390565b60005b8381101561169457818101518382015260200161167c565b838111156116a3576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116db576116db6116f6565b5060010190565b6000826116f1576116f161170c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81356001600160e01b03811680821461175057600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000915080828454161783556020840135611789816117ad565b60e01b90911617905550565b6001600160a01b03811681146117aa57600080fd5b50565b63ffffffff811681146117aa57600080fdfea26469706673582212201887ffb5cb01869425d1d2b5dcaf496fb5ebf37d2905b9eaf25a3d882f98fa9b64736f6c63430008060033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063d0ebdbe711610066578063d0ebdbe7146101ec578063e30c39781461020f578063f2fde38b14610220578063fc0c546a1461023357600080fd5b8063715018a6146101b85780638da5cb5b146101c0578063af6a9400146101d1578063c2c4c5c1146101e457600080fd5b80632d00ddda116100d35780632d00ddda14610161578063481c6a751461018c5780634e71e0c81461019d5780636099b487146101a557600080fd5b80631af082db146100fa578063205c28781461010f57806321df0da714610122575b600080fd5b61010d61010836600461144f565b61025a565b005b61010d61011d366004611423565b6102f6565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020015b60405180910390f35b600354610174906001600160e01b031681565b6040516001600160e01b039091168152602001610158565b6002546001600160a01b0316610144565b61010d61047d565b61010d6101b3366004611423565b61050b565b61010d610598565b6000546001600160a01b0316610144565b6101746101df3660046114ff565b61060d565b61010d6106db565b6101ff6101fa366004611406565b6106e3565b6040519015158152602001610158565b6001546001600160a01b0316610144565b61010d61022e366004611406565b610757565b6101447f000000000000000000000000000000000000000000000000000000000000000081565b60005b818110156102b25782828281811061027757610277611722565b90506040020160058262ffffff811061029257610292611722565b0161029d8282611738565b508190506102aa816116a9565b91505061025d565b5060048054630100000062ffffff9093169283027fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000090911690921791909117905550565b336103096002546001600160a01b031690565b6001600160a01b0316148061033757503361032c6000546001600160a01b031690565b6001600160a01b0316145b6103ae5760405162461bcd60e51b815260206004820152602660248201527f4d616e61676561626c652f63616c6c65722d6e6f742d6d616e616765722d6f7260448201527f2d6f776e6572000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103b6610893565b600380548291906000906103d49084906001600160e01b03166115a5565b92506101000a8154816001600160e01b0302191690836001600160e01b0316021790555061043682827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b5a9092919063ffffffff16565b816001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d58260405161047191815260200190565b60405180910390a25050565b6001546001600160a01b031633146104d75760405162461bcd60e51b815260206004820152601f60248201527f4f776e61626c652f63616c6c65722d6e6f742d70656e64696e674f776e65720060448201526064016103a5565b6001546104ec906001600160a01b0316610bca565b6001805473ffffffffffffffffffffffffffffffffffffffff19169055565b610513610893565b6040517f40c10f19000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b038316906340c10f1990604401600060405180830381600087803b15801561057457600080fd5b505af1158015610588573d6000803e3d6000fd5b50505050610594610893565b5050565b336105ab6000546001600160a01b031690565b6001600160a01b0316146106015760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064016103a5565b61060b6000610bca565b565b60008163ffffffff168363ffffffff161061066a5760405162461bcd60e51b815260206004820152601b60248201527f526573657276652f73746172742d6c6573732d7468616e2d656e64000000000060448201526064016103a5565b60045462ffffff630100000082048116911660008061068883610c27565b9150915060008061069885610c9d565b9150915060006106ac848387868b8f610d10565b905060006106be858488878c8f610d10565b90506106ca828261163a565b985050505050505050505b92915050565b61060b610893565b6000336106f86000546001600160a01b031690565b6001600160a01b03161461074e5760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064016103a5565b6106d582610db7565b3361076a6000546001600160a01b031690565b6001600160a01b0316146107c05760405162461bcd60e51b815260206004820152601860248201527f4f776e61626c652f63616c6c65722d6e6f742d6f776e6572000000000000000060448201526064016103a5565b6001600160a01b03811661083c5760405162461bcd60e51b815260206004820152602560248201527f4f776e61626c652f70656e64696e674f776e65722d6e6f742d7a65726f2d616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016103a5565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517f239a2ddded15777fa246aed5f7e1a9bc69a39d4eb4a397034d1d85766cca7d4c90600090a250565b600480546040517f70a08231000000000000000000000000000000000000000000000000000000008152309281019290925262ffffff630100000082048116929116906000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561092557600080fd5b505afa158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d91906114e6565b6003549091506001600160e01b031660008061097885610c27565b9150915080600001516001600160e01b0316836001600160e01b03168561099f91906115ee565b1115610b52574260006109b285876115a5565b90508163ffffffff16836020015163ffffffff1614610aa7576040518060400160405280826001600160e01b031681526020018363ffffffff1681525060058862ffffff1662ffffff8110610a0957610a09611722565b825160209093015163ffffffff16600160e01b026001600160e01b0390931692909217910155610a3f62ffffff80891690610ea3565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000001662ffffff9283161790558881161015610aa257610a838860016115d0565b600460036101000a81548162ffffff021916908362ffffff1602179055505b610b0c565b6040518060400160405280826001600160e01b031681526020018363ffffffff1681525060058562ffffff1662ffffff8110610ae557610ae5611722565b825160209093015163ffffffff16600160e01b026001600160e01b03909316929092179101555b604080516001600160e01b038084168252871660208201527f21d81d5d656869e8ce3ba8d65526a2f0dbbcd3d36f5f9999eb7c84360e45eced910160405180910390a150505b505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b03167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610bc5908490610ec0565b505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805180820190915260008082526020820181905290610c4e62ffffff80851690610fa5565b915060058262ffffff1662ffffff8110610c6a57610c6a611722565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff166020820152919391925050565b60408051808201909152600080825260208201528190600562ffffff808416908110610ccb57610ccb611722565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201819052909150610d0b5760009150600582610c6a565b915091565b60004262ffffff8416610d27576000915050610dad565b8263ffffffff16876020015163ffffffff161115610d49576000915050610dad565b8263ffffffff16886020015163ffffffff1611610d695750508551610dad565b600080610d7b60058989888a88610fcd565b915091508463ffffffff16816020015163ffffffff161415610da257519250610dad915050565b50519150610dad9050565b9695505050505050565b6002546000906001600160a01b03908116908316811415610e405760405162461bcd60e51b815260206004820152602360248201527f4d616e61676561626c652f6578697374696e672d6d616e616765722d6164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016103a5565b6002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0385811691821790925560405190918316907f9cb45c728de594dab506a1f1a8554e24c8eeaf983618d5ec5dd7bc6f3c49feee90600090a350600192915050565b6000610eb9610eb38460016115ee565b8361119a565b9392505050565b6000610f15826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166111a69092919063ffffffff16565b805190915015610bc55780806020019051810190610f3391906114c4565b610bc55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103a5565b600081610fb4575060006106d5565b610eb96001610fc384866115ee565b610eb39190611662565b6040805180820190915260008082526020820152604080518082019091526000808252602082015260008662ffffff1690506000818962ffffff1610611018578862ffffff16611033565b600161102962ffffff8816846115ee565b6110339190611662565b905060005b600261104483856115ee565b61104e9190611626565b90508a611060828962ffffff1661119a565b62ffffff1662ffffff811061107757611077611722565b604080518082019091529101546001600160e01b0381168252600160e01b900463ffffffff1660208201819052909550806110bf576110b78260016115ee565b935050611038565b8b6110cf838a62ffffff16610ea3565b62ffffff1662ffffff81106110e6576110e6611722565b604080518082019091529101546001600160e01b038116825263ffffffff600160e01b9091048116602083015290955060009061112b90838116908c908b906111bd16565b905080801561115457506111548660200151898c63ffffffff166111bd9092919063ffffffff16565b1561116057505061118c565b8061117757611170600184611662565b9350611185565b6111828360016115ee565b94505b5050611038565b505050965096945050505050565b6000610eb982846116e2565b60606111b5848460008561128e565b949350505050565b60008163ffffffff168463ffffffff16111580156111e757508163ffffffff168363ffffffff1611155b15611203578263ffffffff168463ffffffff1611159050610eb9565b60008263ffffffff168563ffffffff16116112325761122d63ffffffff8616640100000000611606565b61123a565b8463ffffffff165b64ffffffffff16905060008363ffffffff168563ffffffff16116112725761126d63ffffffff8616640100000000611606565b61127a565b8463ffffffff165b64ffffffffff169091111595945050505050565b6060824710156113065760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016103a5565b843b6113545760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103a5565b600080866001600160a01b031685876040516113709190611538565b60006040518083038185875af1925050503d80600081146113ad576040519150601f19603f3d011682016040523d82523d6000602084013e6113b2565b606091505b50915091506113c28282866113cd565b979650505050505050565b606083156113dc575081610eb9565b8251156113ec5782518084602001fd5b8160405162461bcd60e51b81526004016103a59190611554565b60006020828403121561141857600080fd5b8135610eb981611795565b6000806040838503121561143657600080fd5b823561144181611795565b946020939093013593505050565b6000806020838503121561146257600080fd5b823567ffffffffffffffff8082111561147a57600080fd5b818501915085601f83011261148e57600080fd5b81358181111561149d57600080fd5b8660208260061b85010111156114b257600080fd5b60209290920196919550909350505050565b6000602082840312156114d657600080fd5b81518015158114610eb957600080fd5b6000602082840312156114f857600080fd5b5051919050565b6000806040838503121561151257600080fd5b823561151d816117ad565b9150602083013561152d816117ad565b809150509250929050565b6000825161154a818460208701611679565b9190910192915050565b6020815260008251806020840152611573816040850160208701611679565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006001600160e01b038083168185168083038211156115c7576115c76116f6565b01949350505050565b600062ffffff8083168185168083038211156115c7576115c76116f6565b60008219821115611601576116016116f6565b500190565b600064ffffffffff8083168185168083038211156115c7576115c76116f6565b6000826116355761163561170c565b500490565b60006001600160e01b038381169083168181101561165a5761165a6116f6565b039392505050565b600082821015611674576116746116f6565b500390565b60005b8381101561169457818101518382015260200161167c565b838111156116a3576000848401525b50505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156116db576116db6116f6565b5060010190565b6000826116f1576116f161170c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b81356001600160e01b03811680821461175057600080fd5b7fffffffff00000000000000000000000000000000000000000000000000000000915080828454161783556020840135611789816117ad565b60e01b90911617905550565b6001600160a01b03811681146117aa57600080fd5b50565b63ffffffff811681146117aa57600080fdfea26469706673582212201887ffb5cb01869425d1d2b5dcaf496fb5ebf37d2905b9eaf25a3d882f98fa9b64736f6c63430008060033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
