UNPKG

@justin-gee/uniswap-tokamak-hardhat-v3-deploy

Version:
1,231 lines 125 kB
{ "_format": "hh-sol-artifact-1", "contractName": "NonfungiblePositionManager", "sourceName": "contracts/NonfungiblePositionManager.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_factory", "type": "address" }, { "internalType": "address", "name": "_WETH9", "type": "address" }, { "internalType": "address", "name": "_tokenDescriptor_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "T", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Collect", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "DecreaseLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "IncreaseLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WETH9", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint128", "name": "amount0Max", "type": "uint128" }, { "internalType": "uint128", "name": "amount1Max", "type": "uint128" } ], "internalType": "struct INonfungiblePositionManager.CollectParams", "name": "params", "type": "tuple" } ], "name": "collect", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" } ], "name": "createAndInitializePoolIfNecessary", "outputs": [ { "internalType": "address", "name": "pool", "type": "address" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.DecreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "decreaseLiquidity", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.IncreaseLiquidityParams", "name": "params", "type": "tuple" } ], "name": "increaseLiquidity", "outputs": [ { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct INonfungiblePositionManager.MintParams", "name": "params", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "positions", "outputs": [ { "internalType": "uint96", "name": "nonce", "type": "uint96" }, { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "address", "name": "token0", "type": "address" }, { "internalType": "address", "name": "token1", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "feeGrowthInside0LastX128", "type": "uint256" }, { "internalType": "uint256", "name": "feeGrowthInside1LastX128", "type": "uint256" }, { "internalType": "uint128", "name": "tokensOwed0", "type": "uint128" }, { "internalType": "uint128", "name": "tokensOwed1", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowed", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "nonce", "type": "uint256" }, { "internalType": "uint256", "name": "expiry", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitAllowedIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "selfPermitIfNecessary", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Owed", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Owed", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "uniswapV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountMinimum", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapWETH9", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x610120604052760100000000000000000000000000000000000000000001600d553480156200002d57600080fd5b50604051620061b7380380620061b783398101604081905262000050916200013f565b82826040518060400160405280601b81526020017f556e697377617020563320506f736974696f6e73204e46542d563100000000008152506040518060400160405280600a815260200169554e492d56332d504f5360b01b815250604051806040016040528060018152602001603160f81b81525082828160009081620000d891906200022e565b506001620000e782826200022e565b5050835160209485012060805250805192019190912060a052506001600160a01b0391821660c052811660e052166101005250620002fa9050565b80516001600160a01b03811681146200013a57600080fd5b919050565b6000806000606084860312156200015557600080fd5b620001608462000122565b9250620001706020850162000122565b9150620001806040850162000122565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001b457607f821691505b602082108103620001d557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200022957600081815260208120601f850160051c81016020861015620002045750805b601f850160051c820191505b81811015620002255782815560010162000210565b5050505b505050565b81516001600160401b038111156200024a576200024a62000189565b62000262816200025b84546200019f565b84620001db565b602080601f8311600181146200029a5760008415620002815750858301515b600019600386901b1c1916600185901b17855562000225565b600085815260208120601f198616915b82811015620002cb57888601518255948401946001909101908401620002aa565b5085821015620002ea5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161010051615e16620003a16000396000612e11015260008181610299015281816105f001528181611a6701528181611b6101528181614479015281816144bf015261456d0152600081816107b901528181610ce7015281816110f5015281816111bb01528181612e9d015281816131a90152613af40152600081816105250152611e330152600081816105040152611e120152615e166000f3fe6080604052600436106102895760003560e01c80636352211e11610153578063ac9650d8116100cb578063d34879971161007f578063e985e9c511610064578063e985e9c51461082e578063f3995c6714610877578063fc6f78651461088a57600080fd5b8063d3487997146107fb578063df2ab5bb1461081b57600080fd5b8063c2e3140a116100b0578063c2e3140a14610794578063c45a0155146107a7578063c87b56dd146107db57600080fd5b8063ac9650d814610754578063b88d4fde1461077457600080fd5b8063883164561161012257806399fbab881161010757806399fbab88146106e9578063a22cb46514610721578063a4a78f0c1461074157600080fd5b8063883164561461069957806395d89b41146106d457600080fd5b80636352211e146106325780636c0360eb1461065257806370a08231146106665780637ac2ff7b1461068657600080fd5b806323b872dd1161020157806342966c68116101b557806349404b7c1161019a57806349404b7c146105cb5780634aa4a4fc146105de5780634f6ccce71461061257600080fd5b806342966c68146105a55780634659a494146105b857600080fd5b806330adf81f116101e657806330adf81f1461049b5780633644e515146104cf57806342842e0e1461058557600080fd5b806323b872dd1461045b5780632f745c591461047b57600080fd5b80630c49ccbe1161025857806313ead5621161023d57806313ead562146103f157806318160ddd14610404578063219f5d171461042357600080fd5b80630c49ccbe146103c157806312210e8a146103e957600080fd5b806301ffc9a71461031257806306fdde0314610347578063081812fc14610369578063095ea7b3146103a157600080fd5b3661030d57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461030b5760405162461bcd60e51b815260206004820152600960248201527f4e6f74205745544839000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561031e57600080fd5b5061033261032d366004615150565b61089d565b60405190151581526020015b60405180910390f35b34801561035357600080fd5b5061035c6108e1565b60405161033e91906151c5565b34801561037557600080fd5b506103896103843660046151d8565b610973565b6040516001600160a01b03909116815260200161033e565b3480156103ad57600080fd5b5061030b6103bc366004615206565b610a29565b6103d46103cf366004615232565b610b5a565b6040805192835260208301919091520161033e565b61030b611078565b6103896103ff36600461525d565b61108a565b34801561041057600080fd5b506008545b60405190815260200161033e565b6104366104313660046152b7565b6113a1565b604080516001600160801b03909416845260208401929092529082015260600161033e565b34801561046757600080fd5b5061030b6104763660046152c9565b61170f565b34801561048757600080fd5b50610415610496366004615206565b611796565b3480156104a757600080fd5b506104157f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b3480156104db57600080fd5b5061041560007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b34801561059157600080fd5b5061030b6105a03660046152c9565b61183e565b61030b6105b33660046151d8565b611859565b61030b6105c6366004615319565b611988565b61030b6105d9366004615375565b611a36565b3480156105ea57600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b34801561061e57600080fd5b5061041561062d3660046151d8565b611bcf565b34801561063e57600080fd5b5061038961064d3660046151d8565b611c73565b34801561065e57600080fd5b50606061035c565b34801561067257600080fd5b506104156106813660046153a5565b611cfe565b61030b610694366004615319565b611d98565b6106ac6106a73660046153c2565b61227f565b604080519485526001600160801b03909316602085015291830152606082015260800161033e565b3480156106e057600080fd5b5061035c612817565b3480156106f557600080fd5b506107096107043660046151d8565b612826565b60405161033e9c9b9a999897969594939291906153d5565b34801561072d57600080fd5b5061030b61073c366004615489565b612a7f565b61030b61074f366004615319565b612a8e565b6107676107623660046154b7565b612b35565b60405161033e919061552c565b34801561078057600080fd5b5061030b61078f36600461561b565b612c8d565b61030b6107a2366004615319565b612d1b565b3480156107b357600080fd5b506103897f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e757600080fd5b5061035c6107f63660046151d8565b612db8565b34801561080757600080fd5b5061030b6108163660046156ca565b612e88565b61030b61082936600461574a565b612f06565b34801561083a57600080fd5b5061033261084936600461578c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61030b610885366004615319565b612fed565b6103d46108983660046157ba565b61305d565b60006001600160e01b031982167f780e9d630000000000000000000000000000000000000000000000000000000014806108db57506108db826135bd565b92915050565b6060600080546108f0906157cc565b80601f016020809104026020016040519081016040528092919081815260200182805461091c906157cc565b80156109695780601f1061093e57610100808354040283529160200191610969565b820191906000526020600020905b81548152906001019060200180831161094c57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b03166109fd5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610302565b506000908152600c60205260409020546c0100000000000000000000000090046001600160a01b031690565b6000610a3482611c73565b9050806001600160a01b0316836001600160a01b031603610abd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610302565b336001600160a01b0382161480610ad95750610ad98133610849565b610b4b5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610302565b610b558383613658565b505050565b6000808235610b6933826136dc565b610bb55760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b608084013580421115610c0a5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b6000610c1c6040870160208801615815565b6001600160801b031611610c2f57600080fd5b84356000908152600c602090815260409182902060018101549092600160801b9091046001600160801b031691610c6a918901908901615815565b6001600160801b0316816001600160801b03161015610c8857600080fd5b60018281015469ffffffffffffffffffff166000908152600b60209081526040808320815160608101835281546001600160a01b039081168252919095015490811692850192909252600160a01b90910462ffffff1690830152610d0c7f0000000000000000000000000000000000000000000000000000000000000000836137e3565b60018501549091506001600160a01b0382169063a34123a7906a01000000000000000000008104600290810b91600160681b9004900b610d5260408e0160208f01615815565b6040516001600160e01b031960e086901b168152600293840b60048201529190920b60248201526001600160801b03909116604482015260640160408051808303816000875af1158015610daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dce9190615832565b909850965060408901358810801590610deb575088606001358710155b610e375760405162461bcd60e51b815260206004820152601460248201527f507269636520736c69707061676520636865636b0000000000000000000000006044820152606401610302565b6001840154600090610e679030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b8152600401610e9a91815260200190565b60a060405180830381865afa158015610eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610edb9190615856565b50509250925050610f09876002015483610ef591906158ce565b876001600160801b0316600160801b613938565b610f13908c6158e5565b600488018054600090610f309084906001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550610f67876003015482610ef591906158ce565b610f71908b6158e5565b600488018054601090610f95908490600160801b90046001600160801b03166158e5565b82546001600160801b039182166101009390930a9283029190920219909116179055506002870182905560038701819055610fd660408d0160208e01615815565b610fe09087615910565b8760010160106101000a8154816001600160801b0302191690836001600160801b031602179055508b600001357f26f6a048ee9138f2c0ce266f322cb99228e8d619ae2bff30c67f8dcf9d2377b48d60200160208101906110419190615815565b604080516001600160801b039092168252602082018f905281018d90526060015b60405180910390a2505050505050505050915091565b47156110885761108833476139ea565b565b6000836001600160a01b0316856001600160a01b0316106110aa57600080fd5b6040517f1698ee820000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290606401602060405180830381865afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111609190615938565b90506001600160a01b0381166112a5576040517fa16712950000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152858116602483015262ffffff851660448301527f0000000000000000000000000000000000000000000000000000000000000000169063a1671295906064016020604051808303816000875af1158015611204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112289190615938565b6040517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529192509082169063f637731d90602401600060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b50505050611399565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190615976565b5050505050509050806001600160a01b0316600003611397576040517ff637731d0000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015283169063f637731d90602401600060405180830381600087803b15801561137e57600080fd5b505af1158015611392573d6000803e3d6000fd5b505050505b505b949350505050565b6000808060a0840135804211156113fa5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b84356000908152600c6020908152604080832060018082015469ffffffffffffffffffff81168652600b855283862084516060808201875282546001600160a01b039081168352929094015480831682890190815262ffffff600160a01b9092048216838901908152885161014081018a528451861681529151909416818a01529251168287015230828501526a01000000000000000000008304600290810b608080850191909152600160681b909404900b60a0830152958c013560c0820152938b013560e0850152908a013561010084015289013561012083015292906114e290613aa7565b6001870154939a509198509650915060009061151c9030906a01000000000000000000008104600290810b91600160681b9004900b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b815260040161154f91815260200190565b60a060405180830381865afa15801561156c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115909190615856565b505092509250506115c78660020154836115aa91906158ce565b60018801546001600160801b03600160801b918290041690613938565b6004870180546000906115e49084906001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b0316021790555061161b8660030154826115aa91906158ce565b60048701805460109061163f908490600160801b90046001600160801b03166158e5565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550818660020181905550808660030181905550898660010160108282829054906101000a90046001600160801b031661169b91906158e5565b82546101009290920a6001600160801b0381810219909316918316021790915560408051918d168252602082018c905281018a90528c3591507f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f9060600160405180910390a2505050505050509193909250565b61171933826136dc565b61178b5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610302565b610b55838383613d2f565b60006117a183611cfe565b82106118155760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b610b5583838360405180602001604052806000815250612c8d565b8061186433826136dc565b6118b05760405162461bcd60e51b815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610302565b6000828152600c602052604090206001810154600160801b90046001600160801b03161580156118eb575060048101546001600160801b0316155b801561190957506004810154600160801b90046001600160801b0316155b6119555760405162461bcd60e51b815260206004820152600b60248201527f4e6f7420636c65617265640000000000000000000000000000000000000000006044820152606401610302565b6000838152600c6020526040812081815560018101829055600281018290556003810182905560040155610b5583613f14565b6040517f8fcbaf0c00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101869052606481018590526001608482015260ff841660a482015260c4810183905260e481018290526001600160a01b03871690638fcbaf0c90610104015b600060405180830381600087803b158015611a1657600080fd5b505af1158015611a2a573d6000803e3d6000fd5b50505050505050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ada9190615a08565b905082811015611b2c5760405162461bcd60e51b815260206004820152601260248201527f496e73756666696369656e7420574554483900000000000000000000000000006044820152606401610302565b8015610b55576040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015611bad57600080fd5b505af1158015611bc1573d6000803e3d6000fd5b50505050610b5582826139ea565b6000611bda60085490565b8210611c4e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610302565b60088281548110611c6157611c61615a21565b90600052602060002001549050919050565b6000818152600260205260408120546001600160a01b0316806108db5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610302565b60006001600160a01b038216611d7c5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610302565b506001600160a01b031660009081526003602052604090205490565b83421115611de85760405162461bcd60e51b815260206004820152600e60248201527f5065726d697420657870697265640000000000000000000000000000000000006044820152606401610302565b6000611e9360007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000046604080516020810195909552840192909252606083015260808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad8888611ebf81613fc8565b6040805160208101959095526001600160a01b03909316928401929092526060830152608082015260a0810187905260c00160405160208183030381529060405280519060200120604051602001611f499291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090506000611f6c87611c73565b9050806001600160a01b0316886001600160a01b031603611ff55760405162461bcd60e51b815260206004820152602760248201527f4552433732315065726d69743a20617070726f76616c20746f2063757272656e60448201527f74206f776e6572000000000000000000000000000000000000000000000000006064820152608401610302565b6001600160a01b0381163b1561215157604080516020810186905280820185905260f887901b7fff000000000000000000000000000000000000000000000000000000000000001660608201528151604181830301815260618201928390527f1626ba7e000000000000000000000000000000000000000000000000000000009092526001600160a01b03831691631626ba7e91612097918691606501615a37565b602060405180830381865afa1580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d89190615a50565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916631626ba7e60e01b1461214c5760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b61226b565b6040805160008082526020820180845285905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156121a5573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166122085760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964207369676e61747572650000000000000000000000000000006044820152606401610302565b816001600160a01b0316816001600160a01b0316146122695760405162461bcd60e51b815260206004820152600c60248201527f556e617574686f72697a656400000000000000000000000000000000000000006044820152606401610302565b505b6122758888613658565b5050505050505050565b6000808080610140850135804211156122da5760405162461bcd60e51b815260206004820152601360248201527f5472616e73616374696f6e20746f6f206f6c64000000000000000000000000006044820152606401610302565b6040805161014081019091526000906123a690806122fb60208b018b6153a5565b6001600160a01b0316815260200189602001602081019061231c91906153a5565b6001600160a01b0316815260200161233a60608b0160408c01615a6d565b62ffffff16815230602082015260400161235a60808b0160608c01615a88565b60020b815260200161237260a08b0160808c01615a88565b60020b81526020018960a0013581526020018960c0013581526020018960e001358152602001896101000135815250613aa7565b9297509095509350905061244f6123c561014089016101208a016153a5565b600d805475ffffffffffffffffffffffffffffffffffffffffffff169060006123ed83615aa5565b91906101000a81548175ffffffffffffffffffffffffffffffffffffffffffff021916908375ffffffffffffffffffffffffffffffffffffffffffff16021790555075ffffffffffffffffffffffffffffffffffffffffffff16975087614034565b600061247a3061246560808b0160608c01615a88565b61247560a08c0160808d01615a88565b6138e4565b9050600080836001600160a01b031663514ea4bf846040518263ffffffff1660e01b81526004016124ad91815260200190565b60a060405180830381865afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee9190615856565b5050925092505060006125678560405180606001604052808e600001602081019061251991906153a5565b6001600160a01b031681526020018e602001602081019061253a91906153a5565b6001600160a01b031681526020018e604001602081019061255b9190615a6d565b62ffffff16905261418f565b905060405180610140016040528060006bffffffffffffffffffffffff16815260200160006001600160a01b031681526020018269ffffffffffffffffffff1681526020018c60600160208101906125bf9190615a88565b60020b81526020016125d760a08e0160808f01615a88565b60020b81526020018a6001600160801b0316815260200184815260200183815260200160006001600160801b0316815260200160006001600160801b0316815250600c60008c815260200190815260200160002060008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010160006101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff160217905550606082015181600101600a6101000a81548162ffffff021916908360020b62ffffff160217905550608082015181600101600d6101000a81548162ffffff021916908360020b62ffffff16021790555060a08201518160010160106101000a8154816001600160801b0302191690836001600160801b0316021790555060c0820151816002015560e082015181600301556101008201518160040160006101000a8154816001600160801b0302191690836001600160801b031602179055506101208201518160040160106101000a8154816001600160801b0302191690836001600160801b03160217905550905050897f3067048beee31b25b2f1681f88dac838c8bba36af25bfb2b7cf7473a5847e35f8a8a8a604051612802939291906001600160801b039390931683526020830191909152604082015260600190565b60405180910390a25050505050509193509193565b6060600180546108f0906157cc565b6000818152600c6020908152604080832081516101408101835281546bffffffffffffffffffffffff811682526001600160a01b036c010000000000000000000000009091041693810193909352600181015469ffffffffffffffffffff81169284018390526a01000000000000000000008104600290810b6060860152600160681b8204810b60808601526001600160801b03600160801b92839004811660a08701529083015460c0860152600383015460e08601526004909201548083166101008601520416610120830152829182918291829182918291829182918291829182919082036129595760405162461bcd60e51b815260206004820152601060248201527f496e76616c696420746f6b656e20494400000000000000000000000000000