[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InsufficientInputAmount", "type": "error" }, { "inputs": [ { "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "InsufficientLiquidity", "type": "error" }, { "inputs": [], "name": "InsufficientOutputAmount", "type": "error" }, { "inputs": [], "name": "InvalidToToken", "type": "error" }, { "inputs": [], "name": "KConstantError", "type": "error" }, { "inputs": [], "name": "Uint112Overflow", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Burn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "sellToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "unsoldAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "buyToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "purchasedAmount", "type": "uint256" } ], "name": "CancelLongTermOrder", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "numberOfTimeIntervals", "type": "uint256" } ], "name": "LongTermSwap0To1", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "numberOfTimeIntervals", "type": "uint256" } ], "name": "LongTermSwap1To0", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "fee", "type": "uint256" } ], "name": "LpFeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Mint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "Swap", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint112", "name": "reserve0", "type": "uint112" }, { "indexed": false, "internalType": "uint112", "name": "reserve1", "type": "uint112" } ], "name": "Sync", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "addr", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "proceedToken", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "proceeds", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "orderExpired", "type": "bool" } ], "name": "WithdrawProceedsFromLongTermOrder", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINIMUM_LIQUIDITY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "TWAPObservationHistory", "outputs": [ { "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "internalType": "uint256", "name": "price0CumulativeLast", "type": "uint256" }, { "internalType": "uint256", "name": "price1CumulativeLast", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "burn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "name": "cancelLongTermSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "blockTimestamp", "type": "uint256" } ], "name": "executeVirtualOrders", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountOut", "type": "uint256" }, { "internalType": "address", "name": "tokenOut", "type": "address" } ], "name": "getAmountIn", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amountIn", "type": "uint256" }, { "internalType": "address", "name": "tokenIn", "type": "address" } ], "name": "getAmountOut", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" }, { "internalType": "uint256", "name": "limit", "type": "uint256" } ], "name": "getDetailedOrdersForUser", "outputs": [ { "components": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "creationTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "expirationTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "saleRate", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "sellTokenAddr", "type": "address" }, { "internalType": "address", "name": "buyTokenAddr", "type": "address" }, { "internalType": "bool", "name": "isComplete", "type": "bool" } ], "internalType": "struct LongTermOrdersLib.Order[]", "name": "detailed_orders", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getNextOrderID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getOrderIDsForUser", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getOrderIDsForUserLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "blockTimestamp", "type": "uint256" } ], "name": "getReserveAfterTwamm", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint256", "name": "lastVirtualOrderTimestamp", "type": "uint256" }, { "internalType": "uint112", "name": "_twammReserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_twammReserve1", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTWAPHistoryLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "name": "getTwammOrder", "outputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "creationTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "expirationTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "saleRate", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "sellTokenAddr", "type": "address" }, { "internalType": "address", "name": "buyTokenAddr", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "name": "getTwammOrderProceeds", "outputs": [ { "internalType": "bool", "name": "orderExpired", "type": "bool" }, { "internalType": "uint256", "name": "totalReward", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "internalType": "uint256", "name": "blockTimestamp", "type": "uint256" } ], "name": "getTwammOrderProceedsView", "outputs": [ { "internalType": "bool", "name": "orderExpired", "type": "bool" }, { "internalType": "uint256", "name": "totalReward", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTwammReserves", "outputs": [ { "internalType": "uint112", "name": "_reserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_reserve1", "type": "uint112" }, { "internalType": "uint32", "name": "_blockTimestampLast", "type": "uint32" }, { "internalType": "uint112", "name": "_twammReserve0", "type": "uint112" }, { "internalType": "uint112", "name": "_twammReserve1", "type": "uint112" }, { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockTimestamp", "type": "uint256" } ], "name": "getTwammRewardFactor", "outputs": [ { "internalType": "uint256", "name": "rewardFactorPool0AtTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "rewardFactorPool1AtTimestamp", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_blockTimestamp", "type": "uint256" } ], "name": "getTwammSalesRateEnding", "outputs": [ { "internalType": "uint256", "name": "orderPool0SalesRateEnding", "type": "uint256" }, { "internalType": "uint256", "name": "orderPool1SalesRateEnding", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTwammState", "outputs": [ { "internalType": "uint256", "name": "token0Rate", "type": "uint256" }, { "internalType": "uint256", "name": "token1Rate", "type": "uint256" }, { "internalType": "uint256", "name": "lastVirtualOrderTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "orderTimeInterval_rtn", "type": "uint256" }, { "internalType": "uint256", "name": "rewardFactorPool0", "type": "uint256" }, { "internalType": "uint256", "name": "rewardFactorPool1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token0", "type": "address" }, { "internalType": "address", "name": "_token1", "type": "address" }, { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "kLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0In", "type": "uint256" }, { "internalType": "uint256", "name": "numberOfTimeIntervals", "type": "uint256" } ], "name": "longTermSwapFrom0To1", "outputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount1In", "type": "uint256" }, { "internalType": "uint256", "name": "numberOfTimeIntervals", "type": "uint256" } ], "name": "longTermSwapFrom1To0", "outputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "liquidity", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "newSwapsPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "orderIDsForUser", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "orderTimeInterval", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "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": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "price0CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price1CumulativeLast", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "setFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "skim", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Out", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Out", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "sync", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "togglePauseNewSwaps", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "twammReserve0", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "twammReserve1", "outputs": [ { "internalType": "uint112", "name": "", "type": "uint112" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "twammUpToDate", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" } ], "name": "withdrawProceedsFromLongTermSwap", "outputs": [ { "internalType": "bool", "name": "is_expired", "type": "bool" }, { "internalType": "address", "name": "rewardTkn", "type": "address" }, { "internalType": "uint256", "name": "totalReward", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
6080604052600160205534801561001557600080fd5b50604080518082018252600b81526a233930bc39bbb0b8102b1960a91b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f736229277fc30c9d8d02e6316edaeb1ea2708ef3d3c39aa1877ab5a97793cc30818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012060035560198054610100600160a81b031916336101000217905561562a806200010f6000396000f3fe608060405234801561001057600080fd5b50600436106103835760003560e01c80637464fc3d116101de57806396f291271161010f578063c9738a0d116100ad578063ddca3f431161007c578063ddca3f4314610a40578063e852bc2e14610a49578063f140a35a14610a88578063fff6cae914610a9b57600080fd5b8063c9738a0d146109cf578063d21220a7146109e2578063d505accf14610a02578063dd62ed3e14610a1557600080fd5b8063ba9a7a56116100e9578063ba9a7a561461093e578063bc25cf7714610947578063bcaa64ea1461095a578063c45a0155146109aa57600080fd5b806396f2912714610919578063a1462c1914610921578063a9059cbb1461092b57600080fd5b806381ca79981161017c57806387353fed1161015657806387353fed1461088a57806389afcb44146108aa57806395d89b41146108bd5780639610c5f1146108f957600080fd5b806381ca79981461081f57806381fd0a4614610832578063852a8dbe1461087757600080fd5b806378dd0298116101b857806378dd0298146107c35780637d316e28146107cb5780637ecebe00146107f75780637fa2ee6e1461081757600080fd5b80637464fc3d1461077b578063748fc63b14610784578063753bfd4b1461078d57600080fd5b80632c8488da116102b85780634894c53c116102565780635a3d5493116102305780635a3d54931461072d57806369fe0e2d146107355780636a6278421461074857806370a082311461075b57600080fd5b80634894c53c146106ae5780634adc77c2146106c15780635909c0d51461072557600080fd5b8063313ce56711610292578063313ce567146106505780633644e5151461066a578063422fff051461067357806343c990811461069b57600080fd5b80632c8488da146105ec5780632e0ae3751461061657806330adf81f1461062957600080fd5b80631125f13f116103255780631f4f5b42116102ff5780631f4f5b421461058b5780631fc2fa7f1461059e57806323b872dd146105ab57806327e73836146105be57600080fd5b80631125f13f1461054e5780631794bb3c1461056f57806318160ddd1461058257600080fd5b8063094cf14911610361578063094cf14914610455578063095ea7b3146104ad5780630dfe1681146104d05780630ece72361461051557600080fd5b8063022c0d9f1461038857806306fdde031461039d5780630902f1ac146103ef575b600080fd5b61039b610396366004614ee1565b610aa3565b005b6103d96040518060400160405280600b81526020017f467261787377617020563200000000000000000000000000000000000000000081525081565b6040516103e69190614f9b565b60405180910390f35b601c54604080516dffffffffffffffffffffffffffff80841682526e01000000000000000000000000000084041660208201527c010000000000000000000000000000000000000000000000000000000090920463ffffffff16908201526060016103e6565b61045d6110e4565b604080516dffffffffffffffffffffffffffff9788168152958716602087015263ffffffff90941693850193909352908416606084015292909216608082015260a081019190915260c0016103e6565b6104c06104bb366004614fec565b611174565b60405190151581526020016103e6565b601a546104f09073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103e6565b60175461052f906dffffffffffffffffffffffffffff1681565b6040516dffffffffffffffffffffffffffff90911681526020016103e6565b61056161055c366004615018565b61118b565b6040519081526020016103e6565b61039b61057d366004615048565b6112cb565b61056160005481565b61039b610599366004615089565b6113ef565b6019546104c09060ff1681565b6104c06105b9366004615048565b6115e9565b6105d16105cc366004615089565b6116c3565b604080519384526020840192909252908201526060016103e6565b6105ff6105fa3660046150a2565b6116f6565b6040805192151583526020830191909152016103e6565b61039b610624366004615089565b611757565b6105617f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610658601281565b60405160ff90911681526020016103e6565b61056160035481565b610686610681366004615089565b611792565b604080519283526020830191909152016103e6565b6106866106a9366004615089565b6117d2565b6105ff6106bc366004615089565b611812565b6106d46106cf366004615089565b611831565b60408051978852602088019690965294860193909352606085019190915273ffffffffffffffffffffffffffffffffffffffff908116608085015290811660a08401521660c082015260e0016103e6565b6105616118ae565b6105616118f5565b61039b610743366004615089565b61193c565b6105616107563660046150c4565b611a84565b6105616107693660046150c4565b60016020526000908152604090205481565b610561601d5481565b610561610e1081565b61056161079b3660046150c4565b73ffffffffffffffffffffffffffffffffffffffff166000908152601e602052604090205490565b601554610561565b60175461052f906e01000000000000000000000000000090046dffffffffffffffffffffffffffff1681565b6105616108053660046150c4565b60046020526000908152604090205481565b601f54610561565b61056161082d3660046150a2565b611e11565b610845610840366004615089565b611f96565b60408051931515845273ffffffffffffffffffffffffffffffffffffffff9092166020840152908201526060016103e6565b610561610885366004614fec565b612177565b61089d6108983660046150e1565b6121a8565b6040516103e69190615116565b6106866108b83660046150c4565b6123e9565b6103d96040518060400160405280600581526020017f46532d563200000000000000000000000000000000000000000000000000000081525081565b61090c6109073660046150c4565b61289c565b6040516103e691906151c5565b61039b612915565b60055442146104c0565b6104c0610939366004614fec565b6129ea565b6105616103e881565b61039b6109553660046150c4565b6129f7565b61096d610968366004615089565b612bc5565b604080516dffffffffffffffffffffffffffff9687168152948616602086015284019290925283166060830152909116608082015260a0016103e6565b6019546104f090610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6105616109dd3660046150a2565b612cff565b601b546104f09073ffffffffffffffffffffffffffffffffffffffff1681565b61039b610a10366004615209565b612e59565b610561610a23366004615280565b600260209081526000928352604080842090915290825290205481565b61056160185481565b600754600e54600554600854600f5460408051958652602086019490945292840191909152610e106060840152608083015260a082015260c0016103e6565b610561610a96366004615018565b61308a565b61039b6131c4565b602054600114610ab257600080fd5b6000602055610ac04261338e565b6000851180610acf5750600084115b610b05576040517f42301c2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610b61601c546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b5091509150816dffffffffffffffffffffffffffff1687108015610b945750806dffffffffffffffffffffffffffff1686105b610be8576040517f6243da720000000000000000000000000000000000000000000000000000000081526dffffffffffffffffffffffffffff80841660048301528216602482015260440160405180910390fd5b601a54601b54600091829173ffffffffffffffffffffffffffffffffffffffff918216919081169089168214801590610c4d57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610c83576040517f591c75ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8a15610c9457610c94828a8d61357e565b8915610ca557610ca5818a8c61357e565b8615610d38576040517f10d1e85c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16906310d1e85c90610d059033908f908f908e908e906004016152ae565b600060405180830381600087803b158015610d1f57600080fd5b505af1158015610d33573d6000803e3d6000fd5b505050505b6017546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526dffffffffffffffffffffffffffff9091169073ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc9190615326565b610de6919061536e565b6017546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529195506e01000000000000000000000000000090046dffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610e79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9d9190615326565b610ea7919061536e565b92505050600089856dffffffffffffffffffffffffffff16610ec9919061536e565b8311610ed6576000610efa565b610ef08a6dffffffffffffffffffffffffffff871661536e565b610efa908461536e565b90506000610f188a6dffffffffffffffffffffffffffff871661536e565b8311610f25576000610f49565b610f3f8a6dffffffffffffffffffffffffffff871661536e565b610f49908461536e565b90506000821180610f5a5750600081115b610f90576040517f098fb56100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000601854612710610fa2919061536e565b90506000610fb08285615381565b610fbc87612710615381565b610fc6919061536e565b90506000610fd48385615381565b610fe087612710615381565b610fea919061536e565b90506110096dffffffffffffffffffffffffffff808a16908b16615381565b611017906305f5e100615381565b6110218284615381565b1015611059576040517f19886c4000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050506110708484888861106b6136ba565b6136fd565b60408051838152602081018390529081018c9052606081018b905273ffffffffffffffffffffffffffffffffffffffff8a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001602055505050505050505050565b601c54601754601854600092839283928392839283926dffffffffffffffffffffffffffff808416936e0100000000000000000000000000008082048316947c010000000000000000000000000000000000000000000000000000000090920463ffffffff1693838316939190920416906111619061271061536e565b949b939a50919850965094509092509050565b60006111813384846139c8565b5060015b92915050565b601a546000908190819073ffffffffffffffffffffffffffffffffffffffff8581169116146111e257601c546dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041661120b565b601c546dffffffffffffffffffffffffffff6e0100000000000000000000000000008204811691165b9150915060008511801561122f57506000826dffffffffffffffffffffffffffff16115b801561124b57506000816dffffffffffffffffffffffffffff16115b61125457600080fd5b6000611270866dffffffffffffffffffffffffffff8516615381565b61127c90612710615381565b9050600060185487846dffffffffffffffffffffffffffff1661129f919061536e565b6112a99190615381565b90506112b581836153c7565b6112c09060016153db565b979650505050505050565b806000811180156112dc5750606581105b6112e557600080fd5b601954610100900473ffffffffffffffffffffffffffffffffffffffff16331461130e57600080fd5b601a805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255601b80549286169290911691909117905561136f8261271061536e565b601855600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616179055426005556040518281527f2ade3fe6cec488ed9b13e36f5179edfbca9998fecc5926cf57335558671d5f959060200160405180910390a150505050565b6020546001146113fe57600080fd5b600060205561140c4261338e565b600080808061141c600586613a37565b601a549397509195509350915073ffffffffffffffffffffffffffffffffffffffff8084169116148061144f5783611451565b815b601780546000906114739084906dffffffffffffffffffffffffffff166153ee565b92506101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550806114b057816114b2565b835b60178054600e906114e69084906e01000000000000000000000000000090046dffffffffffffffffffffffffffff166153ee565b82546dffffffffffffffffffffffffffff9182166101009390930a928302919092021990911617905550600086815260166020526040902060060180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905561156983338461357e565b61157485338661357e565b6040805187815273ffffffffffffffffffffffffffffffffffffffff878116602083015291810186905290841660608201526080810183905233907f3c5d5e0947e8b8050cf53e91c7496de2499da1b7613ec86b8fda8705789663909060a00160405180910390a25050600160205550505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146116ae5773ffffffffffffffffffffffffffffffffffffffff8416600090815260026020908152604080832033845290915290205461167c90839061536e565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b6116b9848484613ad8565b5060019392505050565b601f81815481106116d357600080fd5b600091825260209091206003909102018054600182015460029092015490925083565b600080600560100154841061170a57600080fd5b600084815260166020526040812060059081015461173e919073ffffffffffffffffffffffffffffffffffffffff16613ba7565b905061174b818686613be3565b90969095509350505050565b60205460011461176657600080fd5b60006020556005548111801561177c5750428111155b1561178a5761178a8161338e565b506001602055565b600080806117a2610e108561541c565b6117ac908561536e565b600090815260096020908152604080832054601090925290912054909590945092505050565b600080806117e2610e108561541c565b6117ec908561536e565b6000908152600d6020908152604080832054601490925290912054909590945092505050565b60008061181e42611757565b61182883426116f6565b91509150915091565b6000806000806000806000600560100154881061184d57600080fd5b505050600094855250506016602052505060409020805460018201546002830154600384015460048501546005860154600690960154949693959294919373ffffffffffffffffffffffffffffffffffffffff918216938216929190911690565b601f546000906118be5750600090565b601f80546118ce9060019061536e565b815481106118de576118de615430565b906000526020600020906003020160010154905090565b601f546000906119055750600090565b601f80546119159060019061536e565b8154811061192557611925615430565b906000526020600020906003020160020154905090565b6119454261338e565b806000811180156119565750606581105b61195f57600080fd5b601954610100900473ffffffffffffffffffffffffffffffffffffffff16331480611a355750601954604080517f094b741500000000000000000000000000000000000000000000000000000000815290513392610100900473ffffffffffffffffffffffffffffffffffffffff169163094b74159160048083019260209291908290030181865afa1580156119f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1d919061545f565b73ffffffffffffffffffffffffffffffffffffffff16145b611a3e57600080fd5b611a4a8261271061536e565b6018556040518281527f2ade3fe6cec488ed9b13e36f5179edfbca9998fecc5926cf57335558671d5f959060200160405180910390a15050565b6000602054600114611a9557600080fd5b6000602055611aa34261338e565b600080611aff601c546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50601754601a546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529395509193506000926dffffffffffffffffffffffffffff9091169173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015611b8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611baf9190615326565b611bb9919061536e565b601754601b546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529293506000926e0100000000000000000000000000009092046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c789190615326565b611c82919061536e565b90506000611ca06dffffffffffffffffffffffffffff86168461536e565b90506000611cbe6dffffffffffffffffffffffffffff86168461536e565b90506000611ccc8787613cb9565b60008054919250819003611d0d576103e8611cef611cea8587615381565b613e26565b611cf9919061536e565b9850611d0860006103e8613e96565b611d62565b611d5f6dffffffffffffffffffffffffffff8916611d2b8387615381565b611d3591906153c7565b6dffffffffffffffffffffffffffff8916611d508487615381565b611d5a91906153c7565b613f41565b98505b60008911611d6f57600080fd5b611d798a8a613e96565b611d8886868a8a61106b6136ba565b8115611dc357601c54611dbf906dffffffffffffffffffffffffffff6e010000000000000000000000000000820481169116615381565b601d555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a25050600160205550949695505050505050565b6000602054600114611e2257600080fd5b600060205560195460ff1615611e3757600080fd5b611e404261338e565b601b54600090611e669073ffffffffffffffffffffffffffffffffffffffff1685613f57565b9050806017600e8282829054906101000a90046dffffffffffffffffffffffffffff16611e93919061547c565b82546101009290920a6dffffffffffffffffffffffffffff818102199093169183160217909155601754601c54919250611ee7916e01000000000000000000000000000091829004841691900483166153db565b1115611ef257600080fd5b601b54601a54611f209160059173ffffffffffffffffffffffffffffffffffffffff918216911684876141a0565b336000818152601e602090815260408083208054600181018255908452928290209092018490558151848152908101859052908101869052919350907fe1ce07267c05b1609d3bd4046ca369b74e64cd2b45ee8321ccc79783252c60b4906060015b60405180910390a250600160205592915050565b6000806000602054600114611faa57600080fd5b6000602055611fb84261338e565b60008080611fc7600588614416565b601a54929550909350915073ffffffffffffffffffffffffffffffffffffffff9081169084160361204e57601780548391906000906120179084906dffffffffffffffffffffffffffff166153ee565b92506101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055506120ac565b816017600e8282829054906101000a90046dffffffffffffffffffffffffffff1661207991906153ee565b92506101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff1602179055505b801561210157600087815260166020526040902060060180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790555b61210c83338461357e565b604080518881526020810184905282151581830152905173ffffffffffffffffffffffffffffffffffffffff85169133917f43168622ddb54ed84ccad30626ace7077235dc531c67aaf639752c45195354489181900360600190a36001602055969195509350915050565b601e602052816000526040600020818154811061219357600080fd5b90600052602060002001600091509150505481565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601e6020908152604080832080548251818502810185019093528083526060949383018282801561221457602002820191906000526020600020905b815481526020019060010190808311612200575b50505050509050600061222e84868451611d5a919061536e565b90508067ffffffffffffffff811115612249576122496154a3565b6040519080825280602002602001820160405280156122d657816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816122675790505b50925060005b818110156123df5760166000846122f3848a6153db565b8151811061230357612303615430565b60209081029190910181015182528181019290925260409081016000208151610100810183528154815260018201549381019390935260028101549183019190915260038101546060830152600481015473ffffffffffffffffffffffffffffffffffffffff90811660808401526005820154811660a084015260069091015490811660c083015274010000000000000000000000000000000000000000900460ff16151560e082015284518590839081106123c1576123c1615430565b602002602001018190525080806123d7906154d2565b9150506122dc565b5050509392505050565b6000806020546001146123fb57600080fd5b60006020556124094261338e565b600080612465601c546dffffffffffffffffffffffffffff808216926e01000000000000000000000000000083049091169163ffffffff7c01000000000000000000000000000000000000000000000000000000009091041690565b50601a54601b546017546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015294965092945073ffffffffffffffffffffffffffffffffffffffff918216939116916000916dffffffffffffffffffffffffffff9091169084906370a0823190602401602060405180830381865afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190615326565b612529919061536e565b6017546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529192506000916e0100000000000000000000000000009091046dffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e49190615326565b6125ee919061536e565b3060009081526001602052604081205491925061260b8888613cb9565b6000549091508061261c8685615381565b61262691906153c7565b9a50806126338585615381565b61263d91906153c7565b995060008b11801561264f575060008a115b61265857600080fd5b61266230846144ad565b61266d878d8d61357e565b612678868d8c61357e565b6017546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526dffffffffffffffffffffffffffff9091169073ffffffffffffffffffffffffffffffffffffffff8916906370a0823190602401602060405180830381865afa1580156126f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271c9190615326565b612726919061536e565b6017546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529196506e01000000000000000000000000000090046dffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd9190615326565b6127e7919061536e565b93506127f885858b8b61106b6136ba565b811561283357601c5461282f906dffffffffffffffffffffffffffff6e010000000000000000000000000000820481169116615381565b601d555b604080518c8152602081018c905273ffffffffffffffffffffffffffffffffffffffff8e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001602081905550915091565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601e602090815260409182902080548351818402810184019094528084526060939283018282801561290957602002820191906000526020600020905b8154815260200190600101908083116128f5575b50505050509050919050565b60195460ff161580156129b45750601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f12d54d86040518163ffffffff1660e01b8152600401602060405180830381865afa158015612990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b4919061550a565b6129bd57600080fd5b601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000611181338484613ad8565b602054600114612a0657600080fd5b6000602055612a144261338e565b601a54601b54601754601c5473ffffffffffffffffffffffffffffffffffffffff9384169390921691612b149184918691612a62916dffffffffffffffffffffffffffff918216911661547c565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526dffffffffffffffffffffffffffff919091169073ffffffffffffffffffffffffffffffffffffffff8716906370a08231906024015b602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b059190615326565b612b0f919061536e565b61357e565b601754601c54612bbb9183918691612b55916dffffffffffffffffffffffffffff6e010000000000000000000000000000928390048116929091041661547c565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526dffffffffffffffffffffffffffff919091169073ffffffffffffffffffffffffffffffffffffffff8616906370a0823190602401612ac4565b5050600160205550565b600554601754601c5460009283929091839182918291612bf8916dffffffffffffffffffffffffffff918216911661547c565b601754601c54919250600091612c38916dffffffffffffffffffffffffffff6e01000000000000000000000000000091829004811692919091041661547c565b6040805160a081018252601c546dffffffffffffffffffffffffffff80821683526e010000000000000000000000000000918290048116602084015260175480821694840194909452920490911660608201526018546080820152909150612ca260058a83614560565b6040810151612cc1906dffffffffffffffffffffffffffff851661536e565b97508060600151826dffffffffffffffffffffffffffff16612ce3919061536e565b9650806040015194508060600151935050505091939590929450565b6000602054600114612d1057600080fd5b600060205560195460ff1615612d2557600080fd5b612d2e4261338e565b601a54600090612d549073ffffffffffffffffffffffffffffffffffffffff1685613f57565b601780549192508291600090612d7b9084906dffffffffffffffffffffffffffff1661547c565b82546101009290920a6dffffffffffffffffffffffffffff818102199093169183160217909155601754601c54919250612dba919083169083166153db565b1115612dc557600080fd5b601a54601b54612df39160059173ffffffffffffffffffffffffffffffffffffffff918216911684876141a0565b336000818152601e602090815260408083208054600181018255908452928290209092018490558151848152908101859052908101869052919350907f9971294258b76b481032b9c1f7f5594619d7cf40e29e224de9e71481bd0a4f8590606001611f82565b42841015612e6657600080fd5b60035473ffffffffffffffffffffffffffffffffffffffff8816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b919087612ec6836154d2565b9091555060408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810187905260e00160405160208183030381529060405280519060200120604051602001612f679291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015612ff0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81161580159061306b57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b61307457600080fd5b61307f8989896139c8565b505050505050505050565b601a546000908190819073ffffffffffffffffffffffffffffffffffffffff8581169116146130e057601c546dffffffffffffffffffffffffffff6e01000000000000000000000000000082048116911661310a565b601c546dffffffffffffffffffffffffffff808216916e0100000000000000000000000000009004165b9150915060008511801561312e57506000826dffffffffffffffffffffffffffff16115b801561314a57506000816dffffffffffffffffffffffffffff16115b61315357600080fd5b6000601854866131639190615381565b905060006131816dffffffffffffffffffffffffffff841683615381565b90506000826131928661271061552c565b6dffffffffffffffffffffffffffff166131ac91906153db565b90506131b881836153c7565b98975050505050505050565b6020546001146131d357600080fd5b60006020556131e14261338e565b601754601a546040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152613387926dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015613265573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132899190615326565b613293919061536e565b601754601b546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526e0100000000000000000000000000009092046dffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190615326565b613356919061536e565b601c546dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041661106b6136ba565b6001602055565b60195460ff161561339c5750565b60055442036133a85750565b6040805160a081018252601c546dffffffffffffffffffffffffffff80821683526e01000000000000000000000000000091829004811660208401526017548082169484019490945292049091166060820152601854608082015261340f600583836146e0565b60408101516017805460608401516dffffffffffffffffffffffffffff9081166e010000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009092169316929092179190911790558051602082015160006134816136ba565b905060008163ffffffff161180156134df5750601c546dffffffffffffffffffffffffffff84811691161415806134df5750601c546dffffffffffffffffffffffffffff8381166e0100000000000000000000000000009092041614155b1561352457601c5461351f906dffffffffffffffffffffffffffff8086169185821691818116916e010000000000000000000000000000900416856136fd565b613577565b601c80546dffffffffffffffffffffffffffff8481166e010000000000000000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909216908616171790555b5050505050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e743235362900000000000000602091820152815173ffffffffffffffffffffffffffffffffffffffff85811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052915160009283928716916136459190615556565b6000604051808303816000865af19150503d8060008114613682576040519150601f19603f3d011682016040523d82523d6000602084013e613687565b606091505b50915091508180156136b15750805115806136b15750808060200190518101906136b1919061550a565b61357757600080fd5b6000806136cc6401000000004261541c565b601c547c0100000000000000000000000000000000000000000000000000000000900463ffffffff16900392915050565b6017546dffffffffffffffffffffffffffff9061371c908216876153db565b1115801561375957506017546dffffffffffffffffffffffffffff90613756906e01000000000000000000000000000090048216866153db565b11155b61378f576040517f350caebb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137a06401000000004261541c565b905060008263ffffffff161180156137c757506dffffffffffffffffffffffffffff841615155b80156137e257506dffffffffffffffffffffffffffff831615155b156138d857601f60405180606001604052808363ffffffff1681526020018463ffffffff1661383888613814896149d9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690614a04565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160261385f6118ae565b0181526020018463ffffffff16613879876138148a6149d9565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16026138a06118f5565b019052815460018181018455600093845260209384902083516003909302019182559282015192810192909255604001516002909101555b601c805463ffffffff83167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff8981166e0100000000000000000000000000009081027fffffffff000000000000000000000000000000000000000000000000000000009095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600081815260118301602052604081206006810154600582015473ffffffffffffffffffffffffffffffffffffffff9081169392911690829081613a7b8887613ba7565b9050613a8c81888a60000154614a20565b6004840154919650935073ffffffffffffffffffffffffffffffffffffffff1633148015613ac457506000851180613ac45750600083115b613acd57600080fd5b505092959194509250565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054613b0990829061536e565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054613b469082906153db565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613a2a9085815260200190565b600182015460009073ffffffffffffffffffffffffffffffffffffffff838116911614613bd75782600901613bdc565b826002015b9392505050565b6000828152600484016020526040812054819080613c0057600080fd5b600085815260038701602090815260408083205460058a0190925290912054818610613c5e5760008281526006890160205260409020546e010000000000000000000000000000620f42408383038602040494506001955050613cae565b6e010000000000000000000000000000620f42406dffffffffffffffffffffffffffff1684838b60010154030281613c9857613c98615398565b0481613ca657613ca6615398565b049350600094505b505050935093915050565b600080601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d4d919061545f565b601d5473ffffffffffffffffffffffffffffffffffffffff8216158015945091925090613e12578015613e0d576000613d9c611cea6dffffffffffffffffffffffffffff808816908916615381565b90506000613da983613e26565b905080821115613e0a576000613dbf828461536e565b600054613dcc9190615381565b9050600082613ddc856005615381565b613de691906153db565b90506000613df482846153c7565b90508015613e0657613e068782613e96565b5050505b50505b613e1e565b8015613e1e576000601d555b505092915050565b60006003821115613e875750806000613e406002836153c7565b613e4b9060016153db565b90505b81811015613e8157905080600281613e6681866153c7565b613e7091906153db565b613e7a91906153c7565b9050613e4e565b50919050565b8115613e91575060015b919050565b80600054613ea491906153db565b600090815573ffffffffffffffffffffffffffffffffffffffff8316815260016020526040902054613ed79082906153db565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613f359085815260200190565b60405180910390a35050565b6000818310613f505781613bdc565b5090919050565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152600090819073ffffffffffffffffffffffffffffffffffffffff8516906370a0823190602401602060405180830381865afa158015613fc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fea9190615326565b60408051336024820152306044820152606480820187905282518083039091018152608490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd000000000000000000000000000000000000000000000000000000001790529051919250600091829173ffffffffffffffffffffffffffffffffffffffff8816916140879190615556565b6000604051808303816000865af19150503d80600081146140c4576040519150601f19603f3d011682016040523d82523d6000602084013e6140c9565b606091505b50915091508180156140f35750805115806140f35750808060200190518101906140f3919061550a565b6140fc57600080fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152839073ffffffffffffffffffffffffffffffffffffffff8816906370a0823190602401602060405180830381865afa158015614168573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418c9190615326565b614196919061536e565b9695505050505050565b600042816141b0610e108361541c565b6141ba908361536e565b90506000816141ca8660016153db565b6141d690610e10615381565b6141e091906153db565b905060006141ee848361536e565b6141fb88620f4240615381565b61420591906153c7565b90506000811161421457600080fd5b60006142208b8b613ba7565b9050614232818c601001548486614b12565b6040518061010001604052808c6010015481526020018681526020018481526020018381526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff168152602001600015158152508b60110160008d6010015481526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c08201518160060160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060e08201518160060160146101000a81548160ff0219169083151502179055509050508a6010016000815480929190614403906154d2565b909155509b9a5050505050505050505050565b600081815260118301602052604081206006810154600582015473ffffffffffffffffffffffffffffffffffffffff918216939283929091839161445c91899116613ba7565b905061446d81878960000154614b86565b6004840154919550935073ffffffffffffffffffffffffffffffffffffffff163314801561449b5750600084115b6144a457600080fd5b50509250925092565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546144de90829061536e565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600160205260408120919091555461451390829061536e565b600090815560405182815273ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001613f35565b82546000610e10614571818461541c565b61457b908461536e565b61458591906153db565b60028601805460098801805493945091925b8785116146785760008581526002850160205260409020541515806145cb5750600085815260028401602052604090205415155b156146655760006145dc878761536e565b90506000620f42406145ee8386615381565b6145f891906153c7565b90506000620f424061460a8486615381565b61461491906153c7565b90506146218a8383614bd3565b5050600088815260028801602052604090205461463e908661536e565b600089815260028801602052604090205490955061465c908561536e565b93508798505050505b614671610e10866153db565b9450614597565b87861461307f57600061468b878a61536e565b90506000620f424061469d8386615381565b6146a791906153c7565b90506000620f42406146b98486615381565b6146c391906153c7565b90506146d08a8383614bd3565b5050505050505050505050505050565b82546000610e106146f1818461541c565b6146fb908461536e565b61470591906153db565b905060028501600986015b85831161489d5760008381526002830160205260409020541515806147445750600083815260028201602052604090205415155b1561488a576000614755858561536e565b8354909150600090620f42409061476d908490615381565b61477791906153c7565b8354909150600090620f42409061478f908590615381565b61479991906153c7565b90506000806147a98a8585614bd3565b915091506147b78782614cfa565b6147c18683614cfa565b6147cb8789614d38565b6147d58689614d38565b7f793ee8b0d8020fc042a920607e3cbd37f5132c011786c8dd10a685f4414ed38188868c600001518d602001518e604001518f6060015188888c8c6040516148799a99989796959493929190998a5260208a01989098526dffffffffffffffffffffffffffff96871660408a0152949095166060880152608087019290925260a086015260c085015260e08401919091526101008301526101208201526101400190565b60405180910390a187985050505050505b614896610e10846153db565b9250614710565b8584146149ce5760006148b0858861536e565b8354909150600090620f4240906148c8908490615381565b6148d291906153c7565b8354909150600090620f4240906148ea908590615381565b6148f491906153c7565b90506000806149048a8585614bd3565b915091507f793ee8b0d8020fc042a920607e3cbd37f5132c011786c8dd10a685f4414ed3818b868c600001518d602001518e604001518f6060015188888c8c6040516149ac9a99989796959493929190998a5260208a01989098526dffffffffffffffffffffffffffff96871660408a0152949095166060880152608087019290925260a086015260c085015260e08401919091526101008301526101208201526101400190565b60405180910390a16149be8782614cfa565b6149c88683614cfa565b50505050505b505050919092555050565b60006111856e0100000000000000000000000000006dffffffffffffffffffffffffffff8416615572565b6000613bdc6dffffffffffffffffffffffffffff8316846155b9565b60008281526003840160205260408120548190838111614a3f57600080fd5b6000858152600487016020526040902054620f424081614a5f878561536e565b614a699190615381565b614a7391906153c7565b600087815260058901602052604090205460018901549195506e01000000000000000000000000000091620f424091900383020404925080876000016000828254614abe919061536e565b90915550506000868152600488016020908152604080832083905560038a01825280832083905584835260028a0190915281208054839290614b0190849061536e565b925050819055505050935093915050565b81846000016000828254614b2691906153db565b9091555050600184015460008481526005860160209081526040808320939093556003870181528282208490556004870181528282208590558382526002870190529081208054849290614b7b9084906153db565b909155505050505050565b600080614b94858585613be3565b925090508015614bb4576000848152600486016020526040812055614bcb565b600185015460008581526005870160205260409020555b935093915050565b6000806000856040015186600001516dffffffffffffffffffffffffffff16614bfc91906153db565b90506000866060015187602001516dffffffffffffffffffffffffffff16614c2491906153db565b9050614c5f87600001516dffffffffffffffffffffffffffff1688602001516dffffffffffffffffffffffffffff1688888b60800151614d78565b604089015191955093508690614c769086906153db565b614c80919061536e565b604088015260608701518590614c979085906153db565b614ca1919061536e565b60608801526040870151614cb5908361536e565b6dffffffffffffffffffffffffffff1687526060870151614cd6908261536e565b6dffffffffffffffffffffffffffff16602090970196909652509094909350915050565b815415614d34578154700f42400000000000000000000000000000820281614d2457614d24615398565b6001840180549290910490910190555b5050565b6000818152600283016020526040812054835490918491614d5a90849061536e565b90915550506001820154600091825260069092016020526040902055565b600080600285108015614d8b5750600284105b614eb2576002851015614dd9576000614da48486615381565b905080614db388612710615381565b614dbd91906153db565b614dc7828a615381565b614dd191906153c7565b925050614eb2565b6002841015614e23576000614dee8487615381565b905080614dfd89612710615381565b614e0791906153db565b614e118289615381565b614e1b91906153c7565b915050614eb2565b6000612710614e328588615381565b614e3c91906153c7565b614e4690896153db565b90506000612710614e578688615381565b614e6191906153c7565b614e6b90896153db565b905080614e78838a615381565b614e8291906153c7565b614e8c908361536e565b935081614e99828b615381565b614ea391906153c7565b614ead908261536e565b925050505b9550959350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114614ede57600080fd5b50565b600080600080600060808688031215614ef957600080fd5b85359450602086013593506040860135614f1281614ebc565b9250606086013567ffffffffffffffff80821115614f2f57600080fd5b818801915088601f830112614f4357600080fd5b813581811115614f5257600080fd5b896020828501011115614f6457600080fd5b9699959850939650602001949392505050565b60005b83811015614f92578181015183820152602001614f7a565b50506000910152565b6020815260008251806020840152614fba816040850160208701614f77565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060408385031215614fff57600080fd5b823561500a81614ebc565b946020939093013593505050565b6000806040838503121561502b57600080fd5b82359150602083013561503d81614ebc565b809150509250929050565b60008060006060848603121561505d57600080fd5b833561506881614ebc565b9250602084013561507881614ebc565b929592945050506040919091013590565b60006020828403121561509b57600080fd5b5035919050565b600080604083850312156150b557600080fd5b50508035926020909101359150565b6000602082840312156150d657600080fd5b8135613bdc81614ebc565b6000806000606084860312156150f657600080fd5b833561510181614ebc565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b828110156151b857815180518552868101518786015285810151868601526060808201519086015260808082015173ffffffffffffffffffffffffffffffffffffffff9081169187019190915260a08083015182169087015260c0808301519091169086015260e0908101511515908501526101009093019290850190600101615133565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156151fd578351835292840192918401916001016151e1565b50909695505050505050565b600080600080600080600060e0888a03121561522457600080fd5b873561522f81614ebc565b9650602088013561523f81614ebc565b95506040880135945060608801359350608088013560ff8116811461526357600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561529357600080fd5b823561529e81614ebc565b9150602083013561503d81614ebc565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101949350505050565b60006020828403121561533857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156111855761118561533f565b80820281158282048414176111855761118561533f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826153d6576153d6615398565b500490565b808201808211156111855761118561533f565b6dffffffffffffffffffffffffffff8281168282160390808211156154155761541561533f565b5092915050565b60008261542b5761542b615398565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561547157600080fd5b8151613bdc81614ebc565b6dffffffffffffffffffffffffffff8181168382160190808211156154155761541561533f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036155035761550361533f565b5060010190565b60006020828403121561551c57600080fd5b81518015158114613bdc57600080fd5b6dffffffffffffffffffffffffffff818116838216028082169190828114613e1e57613e1e61533f565b60008251615568818460208701614f77565b9190910192915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8281168282168181028316929181158285048214176155b0576155b061533f565b50505092915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff808416806155e8576155e8615398565b9216919091049291505056fea2646970667358221220b57e89dcd0f84942bd0b432470b29acb2650ff32b39f6c7d408459811d1d843d64736f6c63430008110033
Loading