0 txs
1 call
constructor
constructor(address _factory, address _WETH9)
functions
factory
viewfunction factory() view returns (address)
getAmountIn
viewfunction getAmountIn(address tokenIn, address tokenOut, uint256 amountOut) view returns (uint256 amountIn)
getAmountOut
viewfunction getAmountOut(address tokenIn, address tokenOut, uint256 amountIn) view returns (uint256 amountOut)
getAmountsIn
viewfunction getAmountsIn(address[] path, uint256 amountOut) view returns (uint256[] amountsIn)
getAmountsOut
viewfunction getAmountsOut(address[] path, uint256 amountIn) view returns (uint256[] amountsOut)
getMaxVirtualTradeAmountRtoN
viewfunction getMaxVirtualTradeAmountRtoN(address jkPair, address ikPair) view returns (uint256 maxAmountIn)
getVirtualAmountIn
viewfunction getVirtualAmountIn(address jkPair, address ikPair, uint256 amountOut) view returns (uint256 amountIn)
getVirtualAmountOut
viewfunction getVirtualAmountOut(address jkPair, address ikPair, uint256 amountIn) view returns (uint256 amountOut)
getVirtualPool
viewfunction getVirtualPool(address jkPair, address ikPair) view returns (tuple vPool)
getVirtualPools
viewfunction getVirtualPools(address token0, address token1) view returns (tuple[] vPools)
quote
viewfunction quote(address inputToken, address outputToken, uint256 amountIn) view returns (uint256 amountOut)
WETH9
viewfunction WETH9() view returns (address)
addLiquidity
nonpayablefunction addLiquidity(address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB, address pairAddress, uint256 liquidity)
changeFactory
nonpayablefunction changeFactory(address _factory)
multiSwapETHForExactTokens
payablefunction multiSwapETHForExactTokens(uint256 deadline, uint256[] routeData, address[] transitTokens, address tokenOut, address to, uint256 maxAmountIn) payable
multiSwapExactETHForTokens
payablefunction multiSwapExactETHForTokens(uint256 deadline, uint256[] routeData, address[] transitTokens, address tokenOut, address to, uint256 minAmountOut) payable
multiSwapExactTokensForETH
nonpayablefunction multiSwapExactTokensForETH(uint256 deadline, uint256[] routeData, address[] transitTokens, address tokenIn, address to, uint256 minAmountOut)
multiSwapExactTokensForTokens
nonpayablefunction multiSwapExactTokensForTokens(uint256 deadline, uint256[] routeData, address[] transitTokens, address tokenIn, address tokenOut, address to, uint256 minAmountOut)
multiSwapTokensForExactETH
nonpayablefunction multiSwapTokensForExactETH(uint256 deadline, uint256[] routeData, address[] transitTokens, address tokenIn, address to, uint256 maxAmountIn)
multiSwapTokensForExactTokens
nonpayablefunction multiSwapTokensForExactTokens(uint256 deadline, uint256[] routeData, address[] transitTokens, address tokenIn, address tokenOut, address to, uint256 maxAmountIn)
removeLiquidity
nonpayablefunction removeLiquidity(address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) returns (uint256 amountA, uint256 amountB)
vFlashSwapCallback
nonpayablefunction vFlashSwapCallback(address tokenIn, address tokenOut, uint256 requiredAmountIn, bytes data)
events
RouterFactoryChanged
event RouterFactoryChanged(address newFactoryAddress)
errors
No errors.
creation bytecode
0x60a060405234801561001057600080fd5b50604051615ea7380380615ea783398101604081905261002f91610076565b6001600160a01b03908116608052600080546001600160a01b031916929091169190911790556100a9565b80516001600160a01b038116811461007157600080fd5b919050565b6000806040838503121561008957600080fd5b6100928361005a565b91506100a06020840161005a565b90509250929050565b608051615dc06100e7600039600081816101960152818161036501528181610a2301528181610f3f015281816113d1015261205c0152615dc06000f3fe6080604052600436106101795760003560e01c806399aff898116100cb578063bfe151a61161007f578063e8e3370011610059578063e8e33700146104ee578063fddf069b1461054a578063ffab81c51461056a57600080fd5b8063bfe151a614610481578063c45a0155146104a1578063cc1fd731146104ce57600080fd5b8063b0007639116100b0578063b00076391461040c578063b64663841461042c578063baa2abde1461044c57600080fd5b806399aff898146103cc578063a8c6edc9146103df57600080fd5b806327222cc71161012d5780634aa06652116101075780634aa06652146103335780634aa4a4fc1461035357806353b609b5146103ac57600080fd5b806327222cc7146102d25780632a8ed2bd146102e55780633d38ef341461031357600080fd5b8063122c8a4a1161015e578063122c8a4a1461026557806318236fbd146102855780632617cd0e146102a557600080fd5b806311897c9a1461020f57806311c6e7411461024557600080fd5b3661020a573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146102085760405162461bcd60e51b815260206004820152600960248201527f4e6f74205745544839000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b005b600080fd5b34801561021b57600080fd5b5061022f61022a3660046152c4565b61058a565b60405161023c9190615370565b60405180910390f35b34801561025157600080fd5b506102086102603660046153b3565b610688565b34801561027157600080fd5b5061022f6102803660046152c4565b610896565b34801561029157600080fd5b506102086102a0366004615415565b6109ce565b3480156102b157600080fd5b506102c56102c03660046154c3565b610d8e565b60405161023c91906155d0565b6102086102e0366004615415565b610ee5565b3480156102f157600080fd5b50610305610300366004615614565b6112e8565b60405190815260200161023c565b34801561031f57600080fd5b5061030561032e366004615614565b61131d565b34801561033f57600080fd5b5061030561034e366004615614565b611349565b34801561035f57600080fd5b506103877f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161023c565b3480156103b857600080fd5b506103056103c7366004615614565b611367565b6102086103da366004615415565b61137d565b3480156103eb57600080fd5b506103ff6103fa3660046154c3565b611753565b60405161023c9190615655565b34801561041857600080fd5b50610208610427366004615664565b6118be565b34801561043857600080fd5b50610305610447366004615614565b611b0e565b34801561045857600080fd5b5061046c610467366004615725565b611c46565b6040805192835260208301919091520161023c565b34801561048d57600080fd5b5061030561049c3660046154c3565b611df8565b3480156104ad57600080fd5b506000546103879073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104da57600080fd5b506102086104e9366004615798565b611e10565b3480156104fa57600080fd5b5061050e610509366004615839565b611ee0565b60405161023c9493929190938452602084019290925273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b34801561055657600080fd5b50610208610565366004615415565b612008565b34801561057657600080fd5b50610208610585366004615664565b6122a5565b6060825167ffffffffffffffff8111156105a6576105a66151d3565b6040519080825280602002602001820160405280156105cf578160200160208202803683370190505b50905081816000815181106105e6576105e66158b5565b602090810291909101015260015b815181101561068157600060018203905061065b85828151811061061a5761061a6158b5565b6020026020010151868481518110610634576106346158b5565b602002602001015185848151811061064e5761064e6158b5565b6020026020010151611349565b83838151811061066d5761066d6158b5565b6020908102919091010152506001016105f4565b5092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071791906158f4565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107915760405162461bcd60e51b815260206004820152601060248201527f56535741503a4f4e4c595f41444d494e0000000000000000000000000000000060448201526064016101ff565b73ffffffffffffffffffffffffffffffffffffffff8116158015906107d1575060005473ffffffffffffffffffffffffffffffffffffffff828116911614155b61081d5760405162461bcd60e51b815260206004820152601560248201527f56535741503a494e56414c49445f464143544f5259000000000000000000000060448201526064016101ff565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f6167d43c236d17aaa711f8498961fc09fb37c0f1de8cc3f39f1168ddf9a699319060200160405180910390a150565b6060825167ffffffffffffffff8111156108b2576108b26151d3565b6040519080825280602002602001820160405280156108db578160200160208202803683370190505b50905081816001835103815181106108f5576108f56158b5565b602090810291909101015282517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b8015610681576000600182039050610989858281518110610948576109486158b5565b6020026020010151868481518110610962576109626158b5565b602002602001015185858151811061097c5761097c6158b5565b6020026020010151611367565b83828151811061099b5761099b6158b5565b6020908102919091010152507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01610925565b42881015610a1e5760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b6000807f0000000000000000000000000000000000000000000000000000000000000000815b89811015610bff576000806000610a988e8e86818110610a6657610a666158b5565b9050602002013560c081901c91608082901c67ffffffffffffffff16916fffffffffffffffffffffffffffffffff1690565b978801979194509250905067ffffffffffffffff821015610bb25781600003610b98576000610ac78b876124cf565b90506000610ad68c83856124fa565b9050610ae48c338484612669565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff83169063e9dcafaa90610b499086908b9030906024810161597f565b6020604051808303816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906159da565b50979097019650610bf1565b610ba98a868e8e333089898961274b565b87019650610bf1565b60008c8c85818110610bc657610bc66158b5565b9050602002016020810190610bdb91906153b3565b9050610beb8b8783333087612bca565b88019750505b505050806001019050610a44565b506040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b158015610c6857600080fd5b505af1158015610c7c573d6000803e3d6000fd5b5050505060008573ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610cda576040519150601f19603f3d011682016040523d82523d6000602084013e610cdf565b606091505b5050905080610d305760405162461bcd60e51b815260206004820152601660248201527f56535741503a205452414e53464552204641494c45440000000000000000000060448201526064016101ff565b50505081811115610d835760405162461bcd60e51b815260206004820152601e60248201527f56535741503a2052455155495245445f414d4f554e545f45584345454453000060448201526064016101ff565b505050505050505050565b600054604080517f37e0376b000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff16916337e0376b9160048083019260209291908290030181865afa158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2291906158f4565b6040517f2617cd0e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015284811660248301529190911690632617cd0e90604401600060405180830381865afa158015610e98573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610ede9190810190615a94565b9392505050565b42881015610f355760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b60008047905060007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610fa857600080fd5b505af1158015610fbc573d6000803e3d6000fd5b505050505060005b8981101561114e576000806000610fe68e8e86818110610a6657610a666158b5565b9194509250905067ffffffffffffffff82101561110157816000036110e7576000611011868c6124cf565b905060006110208783856124fa565b905061102d87838361304a565b73ffffffffffffffffffffffffffffffffffffffff821663e9dcafaa848e8e60006040519080825280601f01601f191660200182016040528015611078576020820181803683370190505b506040518563ffffffff1660e01b8152600401611098949392919061597f565b6020604051808303816000875af11580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db91906159da565b50979097019650611140565b6110f8858b8e8e308e89898961274b565b87019650611140565b60008c8c85818110611115576111156158b5565b905060200201602081019061112a91906153b3565b905061113a868c83308e87612bca565b88019750505b505050806001019050610fc4565b5082820391831461128b576040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b5050505060008573ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114611233576040519150601f19603f3d011682016040523d82523d6000602084013e611238565b606091505b50509050806112895760405162461bcd60e51b815260206004820152601660248201527f56535741503a205452414e53464552204641494c45440000000000000000000060448201526064016101ff565b505b50828211156112dc5760405162461bcd60e51b815260206004820152601e60248201527f56535741503a2052455155495245445f414d4f554e545f45584345454453000060448201526064016101ff565b50505050505050505050565b6000806112f58585611753565b90506113148382606001518360800151846000015162ffffff166130a5565b95945050505050565b60008061132a8585611753565b90506113148382606001518360800151846000015162ffffff166130f3565b600061135f8461135986866124cf565b8461313d565b949350505050565b600061135f8461137786866124cf565b846124fa565b428810156113cd5760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b60007f000000000000000000000000000000000000000000000000000000000000000081805b89811015611435578a8a8281811061140d5761140d6158b5565b905060200201356fffffffffffffffffffffffffffffffff16820191508060010190506113f3565b508173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561147e57600080fd5b505af1158015611492573d6000803e3d6000fd5b50505050505060005b8881101561161f5760008060006114bd8d8d86818110610a6657610a666158b5565b9194509250905067ffffffffffffffff8210156115d257816000036115b85760006114e8868b6124cf565b905060006114f787838561313d565b905061150487838561304a565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff83169063e9dcafaa906115699084908f908f906024810161597f565b6020604051808303816000875af1158015611588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ac91906159da565b50969096019550611611565b6115c9858a8d8d308d8989896132ac565b86019550611611565b60008b8b858181106115e6576115e66158b5565b90506020020160208101906115fb91906153b3565b905061160b868b83308d876135c2565b87019650505b50505080600101905061149b565b5047905080156116dc5760008473ffffffffffffffffffffffffffffffffffffffff16826040515b60006040518083038185875af1925050503d8060008114611684576040519150601f19603f3d011682016040523d82523d6000602084013e611689565b606091505b50509050806116da5760405162461bcd60e51b815260206004820152601660248201527f56535741503a205452414e53464552204641494c45440000000000000000000060448201526064016101ff565b505b5081811015610d835760405162461bcd60e51b815260206004820152602160248201527f56535741503a20494e53554646494349454e545f4f55545055545f414d4f554e60448201527f540000000000000000000000000000000000000000000000000000000000000060648201526084016101ff565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915260008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337e0376b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061182391906158f4565b6040517fa8c6edc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301528481166024830152919091169063a8c6edc99060440161010060405180830381865afa15801561189a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ede9190615b2b565b4289101561190e5760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b6000805b88811015611a975760008060006119348d8d86818110610a6657610a666158b5565b9194509250905067ffffffffffffffff821015611a4a5781600003611a3057600061195f8a8a6124cf565b9050600061196e8b838561313d565b905061197c8b338486612669565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff83169063e9dcafaa906119e19084908e908e906024810161597f565b6020604051808303816000875af1158015611a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2491906159da565b50959095019450611a89565b611a4189898d8d338c8989896132ac565b85019450611a89565b60008b8b85818110611a5e57611a5e6158b5565b9050602002016020810190611a7391906153b3565b9050611a838a8a83338c876135c2565b86019550505b505050806001019050611912565b50818110156112dc5760405162461bcd60e51b815260206004820152602160248201527f56535741503a20494e53554646494349454e545f4f55545055545f414d4f554e60448201527f540000000000000000000000000000000000000000000000000000000000000060648201526084016101ff565b600080611b1b85856124cf565b90506000808273ffffffffffffffffffffffffffffffffffffffff1662113e086040518163ffffffff1660e01b81526004016040805180830381865afa158015611b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8d9190615b66565b6dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150611c2b878473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2491906158f4565b84846139aa565b9092509050611c3b8583836139f7565b979650505050505050565b6000808242811015611c9a5760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b6000611ca68b8b6124cf565b9050611cb48133838c612669565b6040517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff87811660048301528216906389afcb449060240160408051808303816000875af1158015611d21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d459190615b99565b909450925087841015611d9a5760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f415f414d4f554e540000000060448201526064016101ff565b86831015611dea5760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f425f414d4f554e540000000060448201526064016101ff565b505097509795505050505050565b600080611e058484611753565b905061135f81613ab9565b6000611e1e82840184615bbd565b90506000611e308260200151876124cf565b90503373ffffffffffffffffffffffffffffffffffffffff821614611e975760405162461bcd60e51b815260206004820152601560248201527f56535741503a20494e56414c49445f43414c4c4552000000000000000000000060448201526064016101ff565b81513073ffffffffffffffffffffffffffffffffffffffff90911603611ec757611ec287828761304a565b611ed7565b611ed78783600001518388612669565b50505050505050565b6000806000808442811015611f375760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b611f458d8d8d8d8d8d6148d2565b91965094509250611f588d338588612669565b611f648c338587612669565b6040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8881166004830152841690636a627842906024016020604051808303816000875af1158015611fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff691906159da565b91505098509850985098945050505050565b428810156120585760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b60007f0000000000000000000000000000000000000000000000000000000000000000815b8881101561220257600080600061209f8d8d86818110610a6657610a666158b5565b9194509250905067ffffffffffffffff8210156121b5578160000361219b5760006120ca8a876124cf565b905060006120d98b838561313d565b90506120e78b338486612669565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff83169063e9dcafaa9061214c9084908b9030906024810161597f565b6020604051808303816000875af115801561216b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218f91906159da565b509690960195506121f4565b6121ac89868d8d33308989896132ac565b860195506121f4565b60008b8b858181106121c9576121c96158b5565b90506020020160208101906121de91906153b3565b90506121ee8a87833330876135c2565b87019650505b50505080600101905061207d565b506040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810183905273ffffffffffffffffffffffffffffffffffffffff821690632e1a7d4d90602401600060405180830381600087803b15801561226b57600080fd5b505af115801561227f573d6000803e3d6000fd5b5050505060008473ffffffffffffffffffffffffffffffffffffffff1683604051611647565b428910156122f55760405162461bcd60e51b815260206004820152600d60248201527f56535741503a455850495245440000000000000000000000000000000000000060448201526064016101ff565b6000805b8881101561247e57600080600061231b8d8d86818110610a6657610a666158b5565b9194509250905067ffffffffffffffff82101561243157816000036124175760006123468a8a6124cf565b905060006123558b83856124fa565b90506123638b338484612669565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff83169063e9dcafaa906123c89086908e908e906024810161597f565b6020604051808303816000875af11580156123e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240b91906159da565b50959095019450612470565b61242889898d8d338c89898961274b565b85019450612470565b60008b8b85818110612445576124456158b5565b905060200201602081019061245a91906153b3565b905061246a8a8a83338c87612bca565b86019550505b5050508060010190506122f9565b50818111156112dc5760405162461bcd60e51b815260206004820152601e60248201527f56535741503a2052455155495245445f414d4f554e545f45584345454453000060448201526064016101ff565b60008054610ede9073ffffffffffffffffffffffffffffffffffffffff168484614c55565b92915050565b6000808390506000808273ffffffffffffffffffffffffffffffffffffffff1662113e086040518163ffffffff1660e01b81526004016040805180830381865afa15801561254c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125709190615b66565b6dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff1691506125e3878473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b8092508193505050611c3b8583838673ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561263c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126609190615c1e565b61ffff166130f3565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526127459085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152614d29565b50505050565b600080612759846002615c71565b67ffffffffffffffff811115612771576127716151d3565b60405190808252806020026020018201604052801561279a578160200160208202803683370190505b5090508a816000815181106127b1576127b16158b5565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060005b8481101561286f5789896128028389615c71565b818110612811576128116158b5565b905060200201602081019061282691906153b3565b82612832836001615c71565b81518110612842576128426158b5565b73ffffffffffffffffffffffffffffffffffffffff909216602092830291909101909101526001016127ee565b50898161287d866001615c71565b8151811061288d5761288d6158b5565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060006128d38285610896565b9050806000815181106128e8576128e86158b5565b6020026020010151925060006129188d8460018151811061290b5761290b6158b5565b60200260200101516124cf565b90503073ffffffffffffffffffffffffffffffffffffffff8a1603612947576129428d828661304a565b612953565b6129538d8a8387612669565b60005b86811015612ab057600061296b826001615c71565b905060006129aa868381518110612984576129846158b5565b60200260200101518785600261299a9190615c71565b8151811061290b5761290b6158b5565b90508373ffffffffffffffffffffffffffffffffffffffff1663e9dcafaa8684815181106129da576129da6158b5565b60200260200101518885815181106129f4576129f46158b5565b602002602001015184600067ffffffffffffffff811115612a1757612a176151d3565b6040519080825280601f01601f191660200182016040528015612a41576020820181803683370190505b506040518563ffffffff1660e01b8152600401612a61949392919061597f565b6020604051808303816000875af1158015612a80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa491906159da565b50925050600101612956565b506000612abe876001615c71565b90508173ffffffffffffffffffffffffffffffffffffffff1663e9dcafaa848381518110612aee57612aee6158b5565b6020026020010151868481518110612b0857612b086158b5565b60200260200101518c600067ffffffffffffffff811115612b2b57612b2b6151d3565b6040519080825280601f01601f191660200182016040528015612b55576020820181803683370190505b506040518563ffffffff1660e01b8152600401612b75949392919061597f565b6020604051808303816000875af1158015612b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb891906159da565b50505050509998505050505050505050565b600080612bd788876124cf565b90506000612be587896124cf565b905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337e0376b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7691906158f4565b6040517fa8c6edc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528481166024830152919091169063a8c6edc99060440161010060405180830381865afa925050508015612d27575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612d2491810190615b2b565b60015b612d345760009250612e86565b612d518582606001518360800151846000015162ffffff166130f3565b93508173ffffffffffffffffffffffffffffffffffffffff1663300c947a86858960405180604001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff16815250604051602001612dee9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602092830151169181019190915260400190565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401612e1c949392919061597f565b6020604051808303816000875af1925050508015612e75575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252612e72918101906159da565b60015b612e825760009350612e84565b505b505b8260000361303e576000612e9b8883876124fa565b9050612ea88a84836124fa565b93503073ffffffffffffffffffffffffffffffffffffffff881603612ed757612ed28a848661304a565b612ee3565b612ee38a888587612669565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff84169063e9dcafaa90612f489084908c9087906024810161597f565b6020604051808303816000875af1158015612f67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8b91906159da565b5073ffffffffffffffffffffffffffffffffffffffff821663e9dcafaa868b8960005b6040519080825280601f01601f191660200182016040528015612fd8576020820181803683370190505b506040518563ffffffff1660e01b8152600401612ff8949392919061597f565b6020604051808303816000875af1158015613017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303b91906159da565b50505b50509695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526130a09084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016126c3565b505050565b6000806130b28387615c84565b905060006130c08583615c84565b90506000826130d16103e889615c84565b6130db9190615c71565b90506130e78183615cca565b98975050505050505050565b6000806103e86131038787615c84565b61310d9190615c84565b905060008361311c8887615d05565b6131269190615c84565b90506131328183615cca565b611c3b906001615c71565b6000808390506000808273ffffffffffffffffffffffffffffffffffffffff1662113e086040518163ffffffff1660e01b81526004016040805180830381865afa15801561318f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131b39190615b66565b6dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150613226878473ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c00573d6000803e3d6000fd5b8092508193505050611c3b8583838673ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa15801561327f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a39190615c1e565b61ffff166130a5565b6000808888868181106132c1576132c16158b5565b90506020020160208101906132d691906153b3565b905060006132e48c836124cf565b90506132f18c828661313d565b92503073ffffffffffffffffffffffffffffffffffffffff8916036133205761331b8c828661304a565b61332c565b61332c8c898387612669565b60015b8581101561343d5760008b8b613345848b615c71565b818110613354576133546158b5565b905060200201602081019061336991906153b3565b9050600061337785836124cf565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff85169063e9dcafaa906133df908990899086906024810161597f565b6020604051808303816000875af11580156133fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061342291906159da565b5061342e85828861313d565b9550909350915060010161332f565b50600061344a838d6124cf565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915290915073ffffffffffffffffffffffffffffffffffffffff83169063e9dcafaa906134b2908790879086906024810161597f565b6020604051808303816000875af11580156134d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f591906159da565b5061350183828661313d565b935073ffffffffffffffffffffffffffffffffffffffff811663e9dcafaa858e8b60006040519080825280601f01601f19166020018201604052801561354e576020820181803683370190505b506040518563ffffffff1660e01b815260040161356e949392919061597f565b6020604051808303816000875af115801561358d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b191906159da565b505050509998505050505050505050565b6000806135cf88876124cf565b905060006135dd87896124cf565b905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166337e0376b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561364a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366e91906158f4565b6040517fa8c6edc900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301528481166024830152919091169063a8c6edc99060440161010060405180830381865afa92505050801561371f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261371c91810190615b2b565b60015b61372c576000925061387e565b6137498582606001518360800151846000015162ffffff166130a5565b93508173ffffffffffffffffffffffffffffffffffffffff1663300c947a85858960405180604001604052808d73ffffffffffffffffffffffffffffffffffffffff1681526020018e73ffffffffffffffffffffffffffffffffffffffff168152506040516020016137e69190815173ffffffffffffffffffffffffffffffffffffffff9081168252602092830151169181019190915260400190565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401613814949392919061597f565b6020604051808303816000875af192505050801561386d575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261386a918101906159da565b60015b61387a576000935061387c565b505b505b8260000361303e5760006138938a848761313d565b90503073ffffffffffffffffffffffffffffffffffffffff8816036138c2576138bd8a848761304a565b6138ce565b6138ce8a888588612669565b604080516000815260208101918290527fe9dcafaa0000000000000000000000000000000000000000000000000000000090915273ffffffffffffffffffffffffffffffffffffffff84169063e9dcafaa906139339084908c9087906024810161597f565b6020604051808303816000875af1158015613952573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397691906159da565b5061398288838361313d565b935073ffffffffffffffffffffffffffffffffffffffff821663e9dcafaa858b896000612fae565b6000808573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146139e75782846139ea565b83835b9097909650945050505050565b6000808411613a485760405162461bcd60e51b815260206004820152601a60248201527f56535741503a20494e53554646494349454e545f414d4f554e5400000000000060448201526064016101ff565b600083118015613a585750600082115b613aa45760405162461bcd60e51b815260206004820152601d60248201527f56535741503a20494e53554646494349454e545f4c495155494449545900000060448201526064016101ff565b82613aaf8386615c84565b61135f9190615cca565b6000613b11604051806101400160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826000015162ffffff168160000181815250508260c0015173ffffffffffffffffffffffffffffffffffffffff1663da33b3df6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b979190615d18565b6dffffffffffffffffffffffffffff168160200181815250508260c0015173ffffffffffffffffffffffffffffffffffffffff166364be513f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c239190615d18565b6dffffffffffffffffffffffffffff16816040018181525050826060015181606001818152505082608001518160800181815250508260c0015173ffffffffffffffffffffffffffffffffffffffff1663d5d7b44b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccb91906159da565b8160a00181815250506103e862ffffff168160c00181815250508260c0015173ffffffffffffffffffffffffffffffffffffffff1663268c74e46040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5891906159da565b60e082015260c083015160208401516040517fd66bd52400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169063d66bd52490602401602060405180830381865afa158015613dd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df791906159da565b61010082015260c083015160208401516040517f77c6a71500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529116906377c6a71590602401602060405180830381865afa158015613e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e9791906159da565b8360c0015173ffffffffffffffffffffffffffffffffffffffff16639860691c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f0a91906159da565b613f149190615d05565b610120820152602081015115801590613f3f57506d04ee2d6d415b85acef8100000000816020015111155b613f8b5760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642062616c616e6365300000000000000000000000000000000060448201526064016101ff565b60008160400151118015613fb157506d04ee2d6d415b85acef8100000000816040015111155b613ffd5760405162461bcd60e51b815260206004820152601060248201527f696e76616c69642062616c616e6365310000000000000000000000000000000060448201526064016101ff565b6000816060015111801561402357506d04ee2d6d415b85acef8100000000816060015111155b61406f5760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207642616c616e63653000000000000000000000000000000060448201526064016101ff565b6000816080015111801561409557506d04ee2d6d415b85acef8100000000816080015111155b6140e15760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207642616c616e63653100000000000000000000000000000060448201526064016101ff565b8060c001516103e8146141365760405162461bcd60e51b815260206004820152601660248201527f696e76616c6964207072696365466565466163746f720000000000000000000060448201526064016101ff565b8060a00151620186a01461418c5760405162461bcd60e51b815260206004820152601a60248201527f696e76616c69642072657365727665526174696f466163746f7200000000000060448201526064016101ff565b8051158015906141a1575060c0810151815111155b6141ed5760405162461bcd60e51b815260206004820152600b60248201527f696e76616c69642066656500000000000000000000000000000000000000000060448201526064016101ff565b60008160e0015111801561420957508060a001518160e0015111155b6142555760405162461bcd60e51b815260206004820152601760248201527f696e76616c6964206d617852657365727665526174696f00000000000000000060448201526064016101ff565b60e0810151602082015161426a906002615c84565b6142749190615c84565b81610120015111156142895750600092915050565b6000836040015173ffffffffffffffffffffffffffffffffffffffff168460c0015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061431991906158f4565b73ffffffffffffffffffffffffffffffffffffffff16036148155781602001518260800151111561438c5760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207642616c616e63653100000000000000000000000000000060448201526064016101ff565b60a08201516080830151610100840151610120850151855160c087015184860295600095948102909402939283029202816143c9576143c9615c9b565b048660e0015160020201866080015102018560e001518660200151027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02018560600151020190506000846000015185606001518660c00151028161443057614430615c9b565b0490506000856060015186610120015102866080015187610100015102018660a001510286606001518760e00151886020015102026002020390506000806000831261447e57600183614485565b6000836000035b60608a01519850909250905085870260020285016000808083126144ab576000836144b2565b6001836000035b91509150846144e4576144ce6144c9888684614e1b565b614ee8565b6144de6144c98b8d8e0285614e1b565b03614504565b6144f26144c9888684614e1b565b6145026144c98b8d8e0285614e1b565b015b99508115614513578960000399505b878a8a600202020192506000831261452d57600083614534565b6001836000035b9092509050846145625761454c6144c9888684614e1b565b61455c6144c98b8d8e0285614e1b565b03614582565b6145706144c9888684614e1b565b6145806144c98b8d8e0285614e1b565b015b99508115614591578960000399505b878a8a60020202019250600083126145ab576000836145b2565b6001836000035b9092509050846145e0576145ca6144c9888684614e1b565b6145da6144c98b8d8e0285614e1b565b03614600565b6145ee6144c9888684614e1b565b6145fe6144c98b8d8e0285614e1b565b015b9950811561460f578960000399505b878a8a600202020192506000831261462957600083614630565b6001836000035b90925090508461465e576146486144c9888684614e1b565b6146586144c98b8d8e0285614e1b565b0361467e565b61466c6144c9888684614e1b565b61467c6144c98b8d8e0285614e1b565b015b9950811561468d578960000399505b878a8a60020202019250600083126146a7576000836146ae565b6001836000035b9092509050846146dc576146c66144c9888684614e1b565b6146d66144c98b8d8e0285614e1b565b036146fc565b6146ea6144c9888684614e1b565b6146fa6144c98b8d8e0285614e1b565b015b9950811561470b578960000399505b878a8a60020202019250600083126147255760008361472c565b6001836000035b90925090508461475a576147446144c9888684614e1b565b6147546144c98b8d8e0285614e1b565b0361477a565b6147686144c9888684614e1b565b6147786144c98b8d8e0285614e1b565b015b99508115614789578960000399505b878a8a60020202019250600083126147a3576000836147aa565b6001836000035b9092509050846147d8576147c26144c9888684614e1b565b6147d26144c98b8d8e0285614e1b565b036147f8565b6147e66144c9888684614e1b565b6147f66144c98b8d8e0285614e1b565b015b99508115614807578960000399505b5050505050505050506148c1565b81604001518260800151111561486d5760405162461bcd60e51b815260206004820152601160248201527f696e76616c6964207642616c616e63653100000000000000000000000000000060448201526064016101ff565b61487b826101000151614ee8565b6148bd6144c984606001518560400151028561012001518660a00151028660e001518760200151600202020386608001518760a0015188602001510202614e1b565b0390505b6000811215610ede57610ede615d33565b600080546040517f69454b8600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff89811660048301528881166024830152839283929116906369454b8690604401602060405180830381865afa15801561494e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061497291906158f4565b905073ffffffffffffffffffffffffffffffffffffffff8116614a30576000546040517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8b811660048301528a811660248301529091169063c9c65396906044016020604051808303816000875af1158015614a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a2d91906158f4565b90505b6000808273ffffffffffffffffffffffffffffffffffffffff1662113e086040518163ffffffff1660e01b81526004016040805180830381865afa158015614a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614aa09190615b66565b6dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150614b3e8373ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015614b12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b3691906158f4565b8c84846139aa565b909250905081158015614b4f575080155b15614b5f57889450879350614c47565b6000614b6c8a84846139f7565b9050888111614bd05786811015614bc55760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f425f414d4f554e540000000060448201526064016101ff565b899550935083614c45565b6000614bdd8a84866139f7565b90508a811115614bef57614bef615d33565b88811015614c3f5760405162461bcd60e51b815260206004820152601c60248201527f56535741503a20494e53554646494349454e545f415f414d4f554e540000000060448201526064016101ff565b95508894505b505b505096509650969350505050565b600080614c628484614f84565b6040517fff0000000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b166021820152603581018290527f759724dfe39927d24bcfec0e232ca16e126330842301d9947db2223f5ddca4266055820152909150607501604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160209091012095945050505050565b6000614d8b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16614fde9092919063ffffffff16565b8051909150156130a05780806020019051810190614da99190615d62565b6130a05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101ff565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870985870292508281108382030391505080600003614e7357838281614e6957614e69615c9b565b0492505050610ede565b808411614e7f57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115614f805760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e7432353600000000000000000000000000000000000000000000000060648201526084016101ff565b5090565b6000806000614f938585614fed565b6040805173ffffffffffffffffffffffffffffffffffffffff938416602080830191909152929093168382015280518084038201815260609093019052815191012095945050505050565b606061135f8484600085615039565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061502a57828461502d565b83835b915091505b9250929050565b6060824710156150b15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101ff565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516150da9190615d84565b60006040518083038185875af1925050503d8060008114615117576040519150601f19603f3d011682016040523d82523d6000602084013e61511c565b606091505b5091509150611c3b87838387606083156151a457825160000361519d5773ffffffffffffffffffffffffffffffffffffffff85163b61519d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ff565b508161135f565b61135f83838151156151b95781518083602001fd5b8060405162461bcd60e51b81526004016101ff9190615da0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610100810167ffffffffffffffff81118282101715615226576152266151d3565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615273576152736151d3565b604052919050565b600067ffffffffffffffff821115615295576152956151d3565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146152c157600080fd5b50565b600080604083850312156152d757600080fd5b823567ffffffffffffffff8111156152ee57600080fd5b8301601f810185136152ff57600080fd5b803561531261530d8261527b565b61522c565b8082825260208201915060208360051b85010192508783111561533457600080fd5b6020840193505b8284101561535f57833561534e8161529f565b82526020938401939091019061533b565b976020969096013596505050505050565b602080825282518282018190526000918401906040840190835b818110156153a857835183526020938401939092019160010161538a565b509095945050505050565b6000602082840312156153c557600080fd5b8135610ede8161529f565b60008083601f8401126153e257600080fd5b50813567ffffffffffffffff8111156153fa57600080fd5b6020830191508360208260051b850101111561503257600080fd5b60008060008060008060008060c0898b03121561543157600080fd5b88359750602089013567ffffffffffffffff81111561544f57600080fd5b61545b8b828c016153d0565b909850965050604089013567ffffffffffffffff81111561547b57600080fd5b6154878b828c016153d0565b909650945050606089013561549b8161529f565b925060808901356154ab8161529f565b979a969950949793969295919450919260a001359150565b600080604083850312156154d657600080fd5b82356154e18161529f565b915060208301356154f18161529f565b809150509250929050565b62ffffff815116825273ffffffffffffffffffffffffffffffffffffffff602082015116602083015273ffffffffffffffffffffffffffffffffffffffff6040820151166040830152606081015160608301526080810151608083015260a081015161558060a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c08101516155a860c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060e08101516130a060e084018273ffffffffffffffffffffffffffffffffffffffff169052565b602080825282518282018190526000918401906040840190835b818110156153a8576155fd8385516154fc565b6020939093019261010092909201916001016155ea565b60008060006060848603121561562957600080fd5b83356156348161529f565b925060208401356156448161529f565b929592945050506040919091013590565b61010081016124f482846154fc565b600080600080600080600080600060e08a8c03121561568257600080fd5b8935985060208a013567ffffffffffffffff8111156156a057600080fd5b6156ac8c828d016153d0565b90995097505060408a013567ffffffffffffffff8111156156cc57600080fd5b6156d88c828d016153d0565b90975095505060608a01356156ec8161529f565b935060808a01356156fc8161529f565b925060a08a013561570c8161529f565b989b979a50959894979396929550909360c00135919050565b600080600080600080600060e0888a03121561574057600080fd5b873561574b8161529f565b9650602088013561575b8161529f565b955060408801359450606088013593506080880135925060a08801356157808161529f565b96999598509396929591949193505060c09091013590565b6000806000806000608086880312156157b057600080fd5b85356157bb8161529f565b945060208601356157cb8161529f565b935060408601359250606086013567ffffffffffffffff8111156157ee57600080fd5b8601601f810188136157ff57600080fd5b803567ffffffffffffffff81111561581657600080fd5b88602082840101111561582857600080fd5b959894975092955050506020019190565b600080600080600080600080610100898b03121561585657600080fd5b88356158618161529f565b975060208901356158718161529f565b965060408901359550606089013594506080890135935060a0890135925060c089013561589d8161529f565b979a969950949793969295919450919260e001359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80516158ef8161529f565b919050565b60006020828403121561590657600080fd5b8151610ede8161529f565b60005b8381101561592c578181015183820152602001615914565b50506000910152565b6000815180845261594d816020860160208601615911565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b84815273ffffffffffffffffffffffffffffffffffffffff8416602082015273ffffffffffffffffffffffffffffffffffffffff831660408201526080606082015260006159d06080830184615935565b9695505050505050565b6000602082840312156159ec57600080fd5b5051919050565b60006101008284031215615a0657600080fd5b615a0e615202565b9050815162ffffff81168114615a2357600080fd5b8152615a31602083016158e4565b6020820152615a42604083016158e4565b60408201526060828101519082015260808083015190820152615a6760a083016158e4565b60a0820152615a7860c083016158e4565b60c0820152615a8960e083016158e4565b60e082015292915050565b600060208284031215615aa657600080fd5b815167ffffffffffffffff811115615abd57600080fd5b8201601f81018413615ace57600080fd5b8051615adc61530d8261527b565b8082825260208201915060208360081b850101925086831115615afe57600080fd5b6020840193505b828410156159d057615b1787856159f3565b825260208201915061010084019350615b05565b60006101008284031215615b3e57600080fd5b610ede83836159f3565b80516dffffffffffffffffffffffffffff811681146158ef57600080fd5b60008060408385031215615b7957600080fd5b615b8283615b48565b9150615b9060208401615b48565b90509250929050565b60008060408385031215615bac57600080fd5b505080516020909101519092909150565b60006040828403128015615bd057600080fd5b506040805190810167ffffffffffffffff81118282101715615bf457615bf46151d3565b6040528235615c028161529f565b81526020830135615c128161529f565b60208201529392505050565b600060208284031215615c3057600080fd5b815161ffff81168114610ede57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156124f4576124f4615c42565b80820281158282048414176124f4576124f4615c42565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615d00577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b818103818111156124f4576124f4615c42565b600060208284031215615d2a57600080fd5b610ede82615b48565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600060208284031215615d7457600080fd5b81518015158114610ede57600080fd5b60008251615d96818460208701615911565b9190910192915050565b602081526000610ede602083018461593556fea164736f6c634300081c000a000000000000000000000000e5cacc25a37704a39151e17ee5558e13d10fb1b0000000000000000000000000f5a74196cfa5fb26c70a1ec755a07635758dd9dd