0x00000000000000000000000000000000000000000000000000000000000000026080604052348015600f57600080fd5b506125d88061001f6000396000f3fe60806040526004361061010d5760003560e01c8063a088061311610095578063ce4cb87611610064578063ce4cb87614610300578063d77c8f1414610338578063e9eee73b1461043e578063f2fde38b1461047e578063f7bd99b71461049e57600080fd5b8063a088061314610296578063b36f9705146102ab578063be4e694e146102cb578063c4d66de8146102e057600080fd5b806384b0196e116100dc57806384b0196e146101cd578063863e76db146101f55780638af28600146102215780638da5cb5b146102415780638e0581d71461028857600080fd5b806322be59ef146101455780633f9ccf59146101655780634a1ce59914610198578063715018a6146101b857600080fd5b366101405761013e73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee34610139620151806003611b68565b6104be565b005b600080fd5b34801561015157600080fd5b5061013e610160366004611bb3565b61071a565b34801561017157600080fd5b50610185610180366004611eb1565b610800565b6040519081526020015b60405180910390f35b3480156101a457600080fd5b5061013e6101b3366004611bb3565b61094a565b3480156101c457600080fd5b5061013e610a5d565b3480156101d957600080fd5b506101e2610a71565b60405161018f9796959493929190611f3d565b34801561020157600080fd5b5061020c6201518081565b60405163ffffffff909116815260200161018f565b34801561022d57600080fd5b5061018561023c366004611fd5565b610b22565b34801561024d57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161018f565b61013e610139366004611ff1565b3480156102a257600080fd5b5061020c610b9a565b3480156102b757600080fd5b5061013e6102c6366004612036565b610bab565b3480156102d757600080fd5b5061020c610cde565b3480156102ec57600080fd5b5061013e6102fb366004611bb3565b610cec565b34801561030c57600080fd5b5061032061031b366004612036565b610e41565b6040516001600160801b03909116815260200161018f565b34801561034457600080fd5b506103f2610353366004612036565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03918216600090815260208181526040808320939094168252918252829020825160808101845290546001600160801b0381168252600160801b810463ffffffff1692820192909252600160a01b820465ffffffffffff1692810192909252600160d01b900460ff161515606082015290565b60405161018f919081516001600160801b0316815260208083015163ffffffff169082015260408083015165ffffffffffff169082015260609182015115159181019190915260800190565b34801561044a57600080fd5b5061046e61045936600461206f565b60016020526000908152604090205460ff1681565b604051901515815260200161018f565b34801561048a57600080fd5b5061013e610499366004611bb3565b610e75565b3480156104aa57600080fd5b5061013e6104b9366004612114565b610eb0565b6104c661120a565b336000908152602081815260408083206001600160a01b0387168452909152902063ffffffff821615806105125750610503620151806005611b68565b63ffffffff168263ffffffff16115b156105305760405163508f69d960e11b815260040160405180910390fd5b8054600160801b900463ffffffff161580159061055e5750805463ffffffff838116600160801b9092041614155b1561057c5760405163508f69d960e11b815260040160405180910390fd5b80546000906105959085906001600160801b03166121f7565b9050806001600160801b03166000036105c157604051631cc3b37b60e01b815260040160405180910390fd5b8154849083906000906105de9084906001600160801b03166121f7565b82546101009290920a6001600160801b03818102199093169190921691909102179055508154600160d01b6aff000000000000ffffffff60801b19909116600160801b63ffffffff86160260ff60d01b1916171765ffffffffffff60a01b191682556001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed190161069357836001600160801b0316341461068e5760405163356680b760e01b815260040160405180910390fd5b6106a8565b6106a8853330876001600160801b0316611242565b604080516001600160801b038616815263ffffffff851660208201526001600160a01b0387169133917f1d80c2b0b59d2f1543a8b483e392137e35f1d5ebfffcb3ad3a85c07a75636313910160405180910390a35050610715600160008051602061258383398151915255565b505050565b61072261120a565b336000908152602081815260408083206001600160a01b038516845290915290208054600160d01b900460ff161561076d57604051635b8e50a560e11b815260040160405180910390fd5b80546001600160801b031660000361079857604051631cc3b37b60e01b815260040160405180910390fd5b805466ffffffffffffff60a01b1916600160d01b1781556040516001600160a01b0383169033907f1b07d2fc1c2e5f6ac71981862facbacee46b02fa5e88a5b39516ed67724a665790600090a3506107fd600160008051602061258383398151915255565b50565b6000808260200151516001600160401b0381111561082057610820611bd0565b604051908082528060200260200182016040528015610849578160200160208202803683370190505b50905060005b8360200151518110156108a7576108828460200151828151811061087557610875612216565b6020026020010151610b22565b82828151811061089457610894612216565b602090810291909101015260010161084f565b506109437fac2c72d5f68ed9877e5f5ee4f1d5bf270db04de89aeeea5dc6be08feb4444f718460000151836040516020016108e2919061222c565b604051602081830303815290604052805190602001208660400151876060015188608001518960a001518a60c00151604051602001610928989796959493929190612262565b604051602081830303815290604052805190602001206112a0565b9392505050565b61095261120a565b336000908152602081815260408083206001600160a01b038516845290915290208054600160a01b900465ffffffffffff1615158061099a57508054600160d01b900460ff16155b156109b85760405163426dc62960e01b815260040160405180910390fd5b80546000906109d490600160801b900463ffffffff16426122d5565b825466ffffffffffffff60a01b1916600160a01b65ffffffffffff831690810260ff60d01b19169190911784556040519081529091506001600160a01b0384169033907f9ffc6168de1eb7f1d16200f614753cd7edce5a2186aab1c612199dd7316cd7c49060200160405180910390a350506107fd600160008051602061258383398151915255565b610a656112cd565b610a6f6000611328565b565b600060608082808083816000805160206125638339815191528054909150158015610a9e57506001810154155b610ae75760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610aef611399565b610af761145c565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b805160208083015160409384015184517fec74f9c94eeba6a25cac8f1cc55e2670a7984e1f757c2c47d2b754f32ab72a86818501526001600160a01b03909416848601526001600160801b039182166060850152166080808401919091528351808403909101815260a0909201909252805191012090565b610ba8620151806005611b68565b81565b610bb361120a565b336000908152602081815260408083206001600160a01b038616845290915290208054600160d01b900460ff1680610bf957508054600160a01b900465ffffffffffff16155b80610c145750805442600160a01b90910465ffffffffffff16115b15610c325760405163856807e360e01b815260040160405180910390fd5b80546001600160801b03166000819003610c5f57604051631cc3b37b60e01b815260040160405180910390fd5b81546001600160d81b0319168255610c7884848361149b565b6040516001600160801b03821681526001600160a01b0385169033907fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda39060200160405180910390a35050610cda600160008051602061258383398151915255565b5050565b610ba8620151806003611b68565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610d315750825b90506000826001600160401b03166001148015610d4d5750303b155b905081158015610d5b575080155b15610d795760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610da357845460ff60401b1916600160401b1785555b610dac866114e7565b610df36040518060400160405280600c81526020016b50696d6c69636f204c6f636b60a01b815250604051806040016040528060018152602001603160f81b8152506114f8565b8315610e3957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6001600160a01b03808316600090815260208181526040808320938516835292905220546001600160801b03165b92915050565b610e7d6112cd565b6001600160a01b038116610ea757604051631e4fbdf760e01b815260006004820152602401610ade565b6107fd81611328565b610eb86112cd565b610ec061120a565b838214610ee0576040516302653deb60e41b815260040160405180910390fd5b6000610eee6101808a6122f3565b60008181526001602052604090205490915060ff1615610f21576040516307b8c82160e41b815260040160405180910390fd5b610f3160608a0160408b016122ff565b65ffffffffffff1615801590610f5d5750610f5260608a0160408b016122ff565b65ffffffffffff1642115b15610f7b57604051636481c3c360e01b815260040160405180910390fd5b610f8b60808a0160608b016122ff565b65ffffffffffff1615801590610fb75750610fac60808a0160608b016122ff565b65ffffffffffff1642105b15610fd857604051600162d7ab6360e01b0319815260040160405180910390fd5b6000611055610fea60208c018c611bb3565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c859052603c90208b8b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150a92505050565b905080611075576040516337e8456b60e01b815260040160405180910390fd5b60005b868110156111d35787878281811061109257611092612216565b90506020020160208101906110a7919061231a565b60ff166110b760208d018d61233d565b9050116110d7576040516315756ef560e01b815260040160405180910390fd5b60008686838181106110eb576110eb612216565b90506020020160208101906111009190612385565b9050600089898481811061111657611116612216565b905060200201602081019061112b919061231a565b9050600061113c60208f018f61233d565b8360ff1681811061114f5761114f612216565b9050606002018036038101906111659190611fd5565b9050611185818f600001602081019061117e9190611bb3565b858a61156c565b6040516001600160801b038416815260ff83169087907ffc5e923b448af0e2a8a9307e648dfc64195e6062d8a822ff145796fc40ceeb969060200160405180910390a3505050600101611078565b50506000908152600160208190526040909120805460ff191682179055600080516020612583833981519152555050505050505050565b60008051602061258383398151915280546001190161123c57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60405181606052826040528360601b602c526323b872dd60601b600c52602060006064601c6000895af1806001600051141661129157803d873b15171061129157637939f4246000526004601cfd5b50600060605260405250505050565b6000610e6f6112ad611619565b8360405161190160f01b8152600281019290925260228201526042902090565b336112ff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610a6f5760405163118cdaa760e01b8152336004820152602401610ade565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020612563833981519152916113d8906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054611404906123a0565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020612563833981519152916113d8906123a0565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038416016114d35761071582826001600160801b0316611628565b6107158383836001600160801b031661166b565b6114ef6116bb565b6107fd81611704565b6115006116bb565b610cda828261170c565b6000806000611519858561176d565b5090925090506000816003811115611533576115336123da565b1480156115515750856001600160a01b0316826001600160a01b0316145b8061156257506115628686866117ba565b9695505050505050565b4684604001516001600160801b0316146115995760405163678a4b5560e11b815260040160405180910390fd5b83602001516001600160801b0316826001600160801b031611156115d05760405163fd7850ad60e01b815260040160405180910390fd5b816001600160801b03166000036115fa57604051631fbaba3560e01b815260040160405180910390fd5b8351611607848285611895565b61161281838561149b565b5050505050565b6000611623611961565b905090565b8047101561163e5763b12d13eb6000526004601cfd5b6000386000388486620186a0f1610cda57816000526073600b5360ff6020536016600b82f0610cda573838fd5b816014528060345263a9059cbb60601b60005260206000604460106000875af180600160005114166116b057803d853b1517106116b0576390b8ec186000526004601cfd5b506000603452505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610a6f57604051631afcd79f60e31b815260040160405180910390fd5b610e7d6116bb565b6117146116bb565b6000805160206125638339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10261174e8482612437565b506003810161175d8382612437565b5060008082556001909101555050565b600080600083516041036117a75760208401516040850151606086015160001a611799888285856119d5565b9550955095505050506117b3565b50508151600091506002905b9250925092565b6000806000856001600160a01b031685856040516024016117dc9291906124f5565b60408051601f198184030181529181526020820180516001600160e01b0316630b135d3f60e11b17905251611811919061250e565b600060405180830381855afa9150503d806000811461184c576040519150601f19603f3d011682016040523d82523d6000602084013e611851565b606091505b509150915081801561186557506020815110155b801561156257508051630b135d3f60e11b9061188a908301602090810190840161252a565b149695505050505050565b6001600160a01b0380841660009081526020818152604080832093861683529290522080546001600160801b039081169083168110156118e857604051631cc3b37b60e01b815260040160405180910390fd5b6118f28382612543565b82546fffffffffffffffffffffffffffffffff19166001600160801b0391821617835560405190841681526001600160a01b0385811691908716907f8766f9fdb3d7ff5c4fe7ccf145668fbc991a789c4d655f9535b0e08c4964a04d9060200160405180910390a35050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61198c611aa4565b611994611b0e565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611a105750600091506003905082611a9a565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611a64573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611a9057506000925060019150829050611a9a565b9250600091508190505b9450945094915050565b600060008051602061256383398151915281611abe611399565b805190915015611ad657805160209091012092915050565b81548015611ae5579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b600060008051602061256383398151915281611b2861145c565b805190915015611b4057805160209091012092915050565b60018201548015611ae5579392505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff8181168382160290811690818114611b8757611b87611b52565b5092915050565b6001600160a01b03811681146107fd57600080fd5b8035611bae81611b8e565b919050565b600060208284031215611bc557600080fd5b813561094381611b8e565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715611c0857611c08611bd0565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611c3657611c36611bd0565b604052919050565b80356001600160801b0381168114611bae57600080fd5b600060608284031215611c6757600080fd5b604051606081016001600160401b0381118282101715611c8957611c89611bd0565b6040529050808235611c9a81611b8e565b8152611ca860208401611c3e565b6020820152611cb960408401611c3e565b60408201525092915050565b600082601f830112611cd657600080fd5b81356001600160401b03811115611cef57611cef611bd0565b611cfe60208260051b01611c0e565b80828252602082019150602060608402860101925085831115611d2057600080fd5b602085015b83811015611d4757611d378782611c55565b8352602090920191606001611d25565b5095945050505050565b803565ffffffffffff81168114611bae57600080fd5b803563ffffffff81168114611bae57600080fd5b600082601f830112611d8c57600080fd5b81356001600160401b03811115611da557611da5611bd0565b611db8601f8201601f1916602001611c0e565b818152846020838601011115611dcd57600080fd5b816020850160208301376000918101602001919091529392505050565b600060e08284031215611dfc57600080fd5b611e04611be6565b9050611e0f82611ba3565b815260208201356001600160401b03811115611e2a57600080fd5b611e3684828501611cc5565b602083015250611e4860408301611d51565b6040820152611e5960608301611d51565b6060820152611e6a60808301611d51565b6080820152611e7b60a08301611d67565b60a082015260c08201356001600160401b03811115611e9957600080fd5b611ea584828501611d7b565b60c08301525092915050565b600060208284031215611ec357600080fd5b81356001600160401b03811115611ed957600080fd5b611ee584828501611dea565b949350505050565b60005b83811015611f08578181015183820152602001611ef0565b50506000910152565b60008151808452611f29816020860160208601611eed565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000611f5c60e0830189611f11565b8281036040840152611f6e8189611f11565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611fc4578351835260209384019390920191600101611fa6565b50909b9a5050505050505050505050565b600060608284031215611fe757600080fd5b6109438383611c55565b60008060006060848603121561200657600080fd5b833561201181611b8e565b925061201f60208501611c3e565b915061202d60408501611d67565b90509250925092565b6000806040838503121561204957600080fd5b823561205481611b8e565b9150602083013561206481611b8e565b809150509250929050565b60006020828403121561208157600080fd5b5035919050565b60008083601f84011261209a57600080fd5b5081356001600160401b038111156120b157600080fd5b6020830191508360208285010111156120c957600080fd5b9250929050565b60008083601f8401126120e257600080fd5b5081356001600160401b038111156120f957600080fd5b6020830191508360208260051b85010111156120c957600080fd5b60008060008060008060008060a0898b03121561213057600080fd5b88356001600160401b0381111561214657600080fd5b890160e0818c03121561215857600080fd5b975060208901356001600160401b0381111561217357600080fd5b61217f8b828c01612088565b90985096505060408901356001600160401b0381111561219e57600080fd5b6121aa8b828c016120d0565b90965094505060608901356001600160401b038111156121c957600080fd5b6121d58b828c016120d0565b90945092506121e8905060808a01611ba3565b90509295985092959890939650565b6001600160801b038181168382160190811115610e6f57610e6f611b52565b634e487b7160e01b600052603260045260246000fd5b8151600090829060208501835b82811015612257578151845260209384019390910190600101612239565b509195945050505050565b88815260018060a01b038816602082015286604082015265ffffffffffff8616606082015265ffffffffffff8516608082015265ffffffffffff841660a082015263ffffffff831660c082015261010060e082015260006122c7610100830184611f11565b9a9950505050505050505050565b65ffffffffffff8181168382160190811115610e6f57610e6f611b52565b6000610e6f3683611dea565b60006020828403121561231157600080fd5b61094382611d51565b60006020828403121561232c57600080fd5b813560ff8116811461094357600080fd5b6000808335601e1984360301811261235457600080fd5b8301803591506001600160401b0382111561236e57600080fd5b60200191506060810236038213156120c957600080fd5b60006020828403121561239757600080fd5b61094382611c3e565b600181811c908216806123b457607f821691505b6020821081036123d457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052602160045260246000fd5b601f82111561071557806000526020600020601f840160051c810160208510156124175750805b601f840160051c820191505b818110156116125760008155600101612423565b81516001600160401b0381111561245057612450611bd0565b6124648161245e84546123a0565b846123f0565b6020601f82116001811461249857600083156124805750848201515b600019600385901b1c1916600184901b178455611612565b600084815260208120601f198516915b828110156124c857878501518255602094850194600190920191016124a8565b50848210156124e65786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b828152604060208201526000611ee56040830184611f11565b60008251612520818460208701611eed565b9190910192915050565b60006020828403121561253c57600080fd5b5051919050565b6001600160801b038281168282160390811115610e6f57610e6f611b5256fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a26469706673582212202575083795051159efe0961b4a3fa32e08a60e136d27994559b2a39d2da70ebd64736f6c634300081c0033