0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6153bb80620000e66000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c806373ae54b51161017b578063c74b552e116100d8578063f3fef3a31161008c578063f64a6c9011610071578063f64a6c90146107e6578063fa4e00c0146107f9578063fe10b9fb1461080c57600080fd5b8063f3fef3a3146107c0578063f5e8d327146107d357600080fd5b8063e30c3978116100bd578063e30c397814610792578063e5d3d7141461079a578063f2fde38b146107ad57600080fd5b8063c74b552e1461076c578063dfb6c2d21461077f57600080fd5b806392673f551161012f578063b918e5f911610114578063b918e5f9146105f5578063bc06b96514610614578063bfcfa66b1461062757600080fd5b806392673f55146105cf578063a2b7e2dd146105e257600080fd5b80637b498fc1116101605780637b498fc1146105895780638da5cb5b1461059c5780638f4ffcb1146105bc57600080fd5b806373ae54b51461057157806379ba50971461058157600080fd5b80634b1d29b4116102295780635fc7f7c5116101dd5780636572c5dd116101c25780636572c5dd146104dd5780636889d5d01461050d578063715018a61461056957600080fd5b80635fc7f7c5146104b7578063639fcbc2146104ca57600080fd5b8063563170e31161020e578063563170e3146103c8578063584c970b146103e85780635d93a3fc146103fb57600080fd5b80634b1d29b414610388578063554e6e21146103b557600080fd5b806325e102a9116102805780632dfdf0b5116102655780632dfdf0b51461034b57806331645d4e146103625780633c2b87451461037557600080fd5b806325e102a9146103255780632c4b24ae1461033857600080fd5b8063012f180e146102b25780630908c7dc146102c757806319808171146102da5780631ae41f8414610312575b600080fd5b6102c56102c0366004614846565b61081f565b005b6102c56102d536600461489e565b610bf2565b6102fd6102e83660046148b6565b60046020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102c56103203660046148ed565b610e9b565b6102c56103333660046148b6565b6112e1565b6102c5610346366004614a03565b611375565b61035460015481565b604051908152602001610309565b6102c5610370366004614ae1565b61163b565b6102c56103833660046148b6565b61164d565b6003546103a090640100000000900463ffffffff1681565b60405163ffffffff9091168152602001610309565b6102c56103c3366004614b1b565b6116c9565b6103db6103d6366004614b45565b611810565b6040516103099190614bc4565b6102c56103f6366004614c46565b611942565b6104a5610409366004614b45565b60006020818152938152604080822085529281528281209093528252902080546001909101546bffffffffffffffffffffffff808316926c0100000000000000000000000080820463ffffffff16937001000000000000000000000000000000009092048316928216919081046affffffffffffffffffffff169077010000000000000000000000000000000000000000000000900460ff1686565b60405161030996959493929190614c7d565b6102c56104c5366004614cce565b611af1565b6102c56104d8366004614c46565b611ec9565b6105006104eb3660046148b6565b60026020526000908152604090205460ff1681565b6040516103099190614d11565b61054561051b3660046148b6565b60086020526000908152604090205460ff81169061010090046bffffffffffffffffffffffff1682565b6040805192151583526bffffffffffffffffffffffff909116602083015201610309565b6102c561204d565b6003546103a09063ffffffff1681565b6102c5612061565b6102c5610597366004614b1b565b6120c2565b6105a4612249565b6040516001600160a01b039091168152602001610309565b6102c56105ca366004614d1f565b61227e565b6102c56105dd366004614dba565b612331565b6007546105a4906001600160a01b031681565b6003546105a4906801000000000000000090046001600160a01b031681565b6102c56106223660046148b6565b61242c565b6107036106353660046148b6565b600560205260009081526040902080546001909101546bffffffffffffffffffffffff8083169263ffffffff6c01000000000000000000000000820416926affffffffffffffffffffff7001000000000000000000000000000000008304169260ff7b0100000000000000000000000000000000000000000000000000000084048116937c0100000000000000000000000000000000000000000000000000000000900416916001600160a01b03811691740100000000000000000000000000000000000000009091041687565b604080516bffffffffffffffffffffffff988916815263ffffffff90971660208801526affffffffffffffffffffff9095169486019490945260ff9283166060860152911660808401526001600160a01b031660a08301529190911660c082015260e001610309565b6102c561077a366004614dd5565b61252f565b6102c561078d366004614ea4565b612829565b6105a461283c565b6006546105a4906001600160a01b031681565b6102c56107bb3660046148b6565b612865565b6102c56107ce366004614b1b565b612902565b6102c56107e1366004614eed565b613043565b6102c56107f4366004614dba565b6131f2565b6102c5610807366004614cce565b6132d4565b6102c561081a366004614dd5565b613616565b61082761393e565b6001600160a01b038416600090815260026020819052604082205460ff169081111561085557610855614b81565b0361089c576040517f06439c6b0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526024015b60405180910390fd5b60648360ff1611156108df576040517f68704cc400000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610893565b60648260ff161115610922576040517fc51c004900000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610893565b6001600160a01b03811661096d576040517f6a2e6fbf0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610893565b6001600160a01b0380851660009081526005602052604090206001810154909116158015906109ac575060018101546001600160a01b03838116911614155b156109e3576040517fd3d9f5c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a479190614f20565b90508060ff16601214610a91576040517fcd5cf2c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610893565b610a9a86613989565b81546001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038681169182179092557fffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff9092167b0100000000000000000000000000000000000000000000000000000060ff8981169182027fffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff16929092177c0100000000000000000000000000000000000000000000000000000000928916928302177fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000004263ffffffff1602178655604080519182526020820192909252908101929092528716907fcc06fae89af7176b522e80e0f792b25901e66006b16c4ccac33cc75324a16dd39060600160405180910390a2505050505050565b610bfa61393e565b6000610c0960208301836148b6565b90506000610c1d6040840160208501614f3d565b90506001600160a01b038216610c6a576040517f6a2e6fbf0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610893565b6000816002811115610c7e57610c7e614b81565b03610cb757806040517fd6a8a3da0000000000000000000000000000000000000000000000000000000081526004016108939190614d11565b6001600160a01b038216600090815260026020819052604082205460ff1690811115610ce557610ce5614b81565b14610d3e576001600160a01b038216600090815260026020526040908190205490517f71265fe200000000000000000000000000000000000000000000000000000000815261089391849160ff90911690600401614f58565b816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610db6575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610db391810190614f20565b60015b610df7576040517fbcf463bf0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610893565b506001600160a01b0382166000908152600260208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116906001908490811115610e5057610e50614b81565b0217905550816001600160a01b03167f29dd5553eda23e846a442697aeea6662a9699d1a79bb82afba4ba8994898b92c82604051610e8e9190614d11565b60405180910390a2505050565b6001600160a01b03831660009081526002602052604081205460ff1690816002811115610eca57610eca614b81565b03610f0c576040517f06439c6b0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610893565b816bffffffffffffffffffffffff16600003610f64576040517f88967d2f0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152602401610893565b336000908152602081815260408083206001600160a01b038816845282528083208684529091528120805490916bffffffffffffffffffffffff9091169003610fd9576040517f411321ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80546bffffffffffffffffffffffff908116908416106110385780546040517f9dd2b6810000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9091166004820152602401610893565b600282600281111561104c5761104c614b81565b14801561106f575080546c01000000000000000000000000900463ffffffff1642105b156110c05780546040517fced227db0000000000000000000000000000000000000000000000000000000081526c0100000000000000000000000090910463ffffffff166004820152602401610893565b805470010000000000000000000000000000000090046bffffffffffffffffffffffff16156111415780546040517f226503810000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000009091046bffffffffffffffffffffffff166004820152602401610893565b60018101546bffffffffffffffffffffffff16156111a15760018101546040517f01e9e74a0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9091166004820152602401610893565b6000600182015477010000000000000000000000000000000000000000000000900460ff1660038111156111d7576111d7614b81565b1461120e576040517faf343ffd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516bffffffffffffffffffffffff8416815284906001600160a01b0387169033907f91fb9d98b786c57d74c099ccd2beca1739e9f6a81fb49001ca465c4b7591bbe29060200160405180910390a48054839082906000906112809084906bffffffffffffffffffffffff16614fa4565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506112da33846bffffffffffffffffffffffff16876001600160a01b0316613a8b9092919063ffffffff16565b5050505050565b6112e961393e565b6003546040516001600160a01b038084169268010000000000000000900416907f087168495b2024a05f1e51c26b5abadc7eaa5984c24a419d3563f092693ca1d590600090a3600380546001600160a01b0390921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156113c05750825b905060008267ffffffffffffffff1660011480156113dd5750303b155b9050811580156113eb575080155b15611422576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117855583156114835784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b61148c33613aff565b600380547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016670167e9800024ea00179055600060018190555b86518110156115d15760008782815181106114e3576114e3614fc9565b6020026020010151600001519050600088838151811061150557611505614fc9565b602002602001015160200151905060006001600160a01b0316826001600160a01b03160361156a576040517f6a2e6fbf0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610893565b6001600160a01b0382166000908152600260208190526040909120805483927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009091169060019084908111156115c2576115c2614b81565b021790555050506001016114c6565b5083156116335784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6116483333858585613b10565b505050565b61165561393e565b6007546040516001600160a01b038084169216907f2393a3a0213901ea187a0528e61d30bfd31577cb6efa698270cc0757e82cc28e90600090a3600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6003546801000000000000000090046001600160a01b0316331461171b576040517fd4bcb487000000000000000000000000000000000000000000000000000000008152336004820152602401610893565b80600003611758576040517f88967d2f00000000000000000000000000000000000000000000000000000000815260048101829052602401610893565b6001600160a01b03821660009081526004602052604090205460ff166117b5576040517f1cc7e5cf0000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610893565b816001600160a01b03167f9ab9b817afca6d91dd7d523c53a3d2af8939f0a0805d85d0f67b07585fed524b826040516117f091815260200190565b60405180910390a261180c6001600160a01b0383163383613a8b565b5050565b6118466040805160c08101825260008082526020820181905291810182905260608101829052608081018290529060a082015290565b6001600160a01b038481166000908152602081815260408083209387168352928152828220858352815290829020825160c08101845281546bffffffffffffffffffffffff80821683526c0100000000000000000000000080830463ffffffff1695840195909552700100000000000000000000000000000000909104811694820194909452600182015493841660608201529183046affffffffffffffffffffff166080830152909160a083019077010000000000000000000000000000000000000000000000900460ff16600381111561192457611924614b81565b600381111561193557611935614b81565b90525090505b9392505050565b61194a61393e565b6001600160a01b03821660009081526002602052604081205460ff169081600281111561197957611979614b81565b036119bb576040517f06439c6b0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610893565b60028160028111156119cf576119cf614b81565b14611a28576001600160a01b038316600090815260026020526040908190205490517ff8d3a93600000000000000000000000000000000000000000000000000000000815261089391859160ff90911690600401614f58565b6001600160a01b03831660009081526008602052604090205460ff1615611a7b576040517f0d232cb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f37757c6e0f561c1754a2bc68c5299e01bc49b31193e7928f6a6809920e6811e09101610e8e565b6001600160a01b0380841660009081526005602052604090206001810154909116611b48576040517fce16ea8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003611b85576040517f88967d2f00000000000000000000000000000000000000000000000000000000815260048101839052602401610893565b336000908152602081815260408083206001600160a01b038816845282528083208684529091528120805490916bffffffffffffffffffffffff9091169003611bfa576040517f411321ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c048186613ee1565b60018201548154600091611c319188916001600160a01b0316906bffffffffffffffffffffffff166140b6565b8354909150600090606490611c69907c0100000000000000000000000000000000000000000000000000000000900460ff1684614ff8565b611c739190615057565b600184015484549192506bffffffffffffffffffffffff8084169291811691611cb2917001000000000000000000000000000000009091041688615082565b611cbc9190615082565b1115611d3657825460018401546040517fffdacd140000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8085166004830152700100000000000000000000000000000000909304831660248201529116604482015260648101869052608401610893565b825485908490601090611d6c90849070010000000000000000000000000000000090046bffffffffffffffffffffffff16615095565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550848460000160008282829054906101000a90046bffffffffffffffffffffffff16611dc59190615095565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555085876001600160a01b0316336001600160a01b03167f862f9b789dcac5ebaaeece5aa03067d5588c6d3f84c140d527894495a028b17388604051611e3991815260200190565b60405180910390a460018401546040517f2389128a000000000000000000000000000000000000000000000000000000008152336004820152602481018790526001600160a01b0390911690632389128a90604401600060405180830381600087803b158015611ea857600080fd5b505af1158015611ebc573d6000803e3d6000fd5b5050505050505050505050565b611ed161393e565b6006546001600160a01b0316611f13576040517f8142dcf600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526002602052604081205460ff1690816002811115611f4257611f42614b81565b03611f84576040517f06439c6b0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610893565b6001600160a01b03831660009081526004602052604090205460ff1615611fd7576040517f0d232cb900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526008602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f58282641aa313d24bee632c3ec1cdcbc8b924460dbda396d88cfc2a579446ecf9101610e8e565b61205561393e565b61205f600061420c565b565b338061206b61283c565b6001600160a01b0316146120b6576040517f118cdaa70000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610893565b6120bf8161420c565b50565b336000908152602081815260408083206001600160a01b03861680855290835281842085855283528184209084526008909252909120805460ff16612133576040517fa487737000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600183015477010000000000000000000000000000000000000000000000900460ff16600381111561216957612169614b81565b146121c75760018201546040517f4f38d5990000000000000000000000000000000000000000000000000000000081526108939177010000000000000000000000000000000000000000000000900460ff16906000906004016150ba565b6001820180547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff167701000000000000000000000000000000000000000000000017905560405183906001600160a01b0386169033907f4713d6a3ccd421deeb6fb632d8c97878f2e4ae58ac48de1e520b362040b4abf990600090a450505050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b6001600160a01b03831633146122cb576040517f6a2e6fbf0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610893565b6bffffffffffffffffffffffff841115612314576040517f88967d2f00000000000000000000000000000000000000000000000000000000815260048101859052602401610893565b600061232282840184614dba565b90506116338687868885613b10565b61233961393e565b60006123448261425c565b90508063ffffffff168263ffffffff16141580612365575063ffffffff8116155b80612383575060035463ffffffff6401000000009091048116908316115b156123c2576040517f74af145000000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610893565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff84169081179091556040519081527f4c35d0e4acd88f9d47ba71b6a74a890a34499d0af9d7536e5b46c2b190ea18be9060200160405180910390a15050565b61243461393e565b6001600160a01b03811661247f576040517f6a2e6fbf0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610893565b6006546001600160a01b0316156124c2576040517f4bc00c4c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f3d8b27d0955baa4924ce9638e61ff44b8fca3c80475d3dfc8fd6582c5df016cf906020015b60405180910390a150565b6007546001600160a01b03163314612573576040517fc670608600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b825181101561272f57600083828151811061259457612594614fc9565b602002602001015160000151905060008483815181106125b6576125b6614fc9565b6020908102919091018101518101516001600160a01b0380851660009081528084526040808220928b1682529184528181208382529093529091209091506002600182015477010000000000000000000000000000000000000000000000900460ff16600381111561262a5761262a614b81565b146126885760018101546040517f4f38d5990000000000000000000000000000000000000000000000000000000081526108939177010000000000000000000000000000000000000000000000900460ff16906002906004016150ba565b80546126a2906bffffffffffffffffffffffff1686615095565b6001820180547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff167703000000000000000000000000000000000000000000000017905560405190955082906001600160a01b0389811691908616907f68d9ffd354ad98f5572d5a19eb60d1be4e8cb57a2d8337d10a3ecfca40b1ebe990600090a4505050600101612577565b506001600160a01b038316600090815260086020526040902080548290829060019061276f90849061010090046bffffffffffffffffffffffff16614fa4565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060006127bf85600660009054906101000a90046001600160a01b0316856140b6565b6040516bffffffffffffffffffffffff821681529091507f4c0f021c587c95b1c98d00bd52fef4dc732158bc51f121461f3dc4e41990c5639060200160405180910390a16006546112da906001600160a01b031633306bffffffffffffffffffffffff851661427e565b6128368433858585613b10565b50505050565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0061226e565b61286d61393e565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811782556128c9612249565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b6001600160a01b03821660009081526002602052604081205460ff169081600281111561293157612931614b81565b03612973576040517f06439c6b0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610893565b336000908152602081815260408083206001600160a01b03871684528252808320858452909152902060018082015477010000000000000000000000000000000000000000000000900460ff1660038111156129d1576129d1614b81565b1480612a1057506002600182015477010000000000000000000000000000000000000000000000900460ff166003811115612a0e57612a0e614b81565b145b15612a47576040517fe966904900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826002811115612a5b57612a5b614b81565b148015612a7e575080546c01000000000000000000000000900463ffffffff1642105b15612acf5780546040517fced227db0000000000000000000000000000000000000000000000000000000081526c0100000000000000000000000090910463ffffffff166004820152602401610893565b805470010000000000000000000000000000000090046bffffffffffffffffffffffff1615612b505780546040517f226503810000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000009091046bffffffffffffffffffffffff166004820152602401610893565b80546bffffffffffffffffffffffff166000819003612b9b576040517f411321ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003600183015477010000000000000000000000000000000000000000000000900460ff166003811115612bd157612bd1614b81565b03612e2a5760018201546000906bffffffffffffffffffffffff1615612c3a576001600160a01b038087166000908152600560205260409020600180820154600654918701549293612c36939181169216906bffffffffffffffffffffffff166140b6565b9150505b600654600090612c559088906001600160a01b0316856140b6565b90506000612c638383614fa4565b600654604080516001600160a01b0392831681526bffffffffffffffffffffffff841660208201529293508992918b169133917faabf355ccacfa8b7366b9f6a14af62036d7dd401797d7591faae42a5bbbc3db9910160405180910390a4600654604080516001600160a01b0392831681526bffffffffffffffffffffffff8616602082015289928b169133917f5f82682eb95ce785b4c40b5c57de2b7ae2ca818ac5f1e7ab89300e6142215d8f910160405180910390a46006546001600160a01b031660009081526005602052604090206001018054849190601490612d719084907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16615095565b82546101009290920a6bffffffffffffffffffffffff818102199093169183160217909155336000818152602081815260408083206001600160a01b038f811685529083528184208e855290925290912080547fffffffff0000000000000000000000000000000000000000000000000000000016815560010180547fffffffffffffffff000000000000000000000000000000000000000000000000169055600654612e22945016918416613a8b565b5050506112da565b60018201546000906bffffffffffffffffffffffff1615612e8a576001600160a01b038087166000908152600560205260409020600180820154908601549192612e869291169089906bffffffffffffffffffffffff166140b6565b9150505b6000612e968284614fa4565b6040516bffffffffffffffffffffffff8216815290915086906001600160a01b0389169033907f91fb9d98b786c57d74c099ccd2beca1739e9f6a81fb49001ca465c4b7591bbe29060200160405180910390a46040516bffffffffffffffffffffffff8316815286906001600160a01b0389169033907f205442d60b70af1203d43cab62352c3b69b94f091be32fe683198057282b5c929060200160405180910390a46001600160a01b03871660009081526005602052604090206001018054839190601490612f8d9084907401000000000000000000000000000000000000000090046bffffffffffffffffffffffff16615095565b82546101009290920a6bffffffffffffffffffffffff818102199093169183160217909155336000818152602081815260408083206001600160a01b038e168085529083528184208d855290925290912080547fffffffff0000000000000000000000000000000000000000000000000000000016815560010180547fffffffffffffffff00000000000000000000000000000000000000000000000016905561303a9350918416613a8b565b50505050505050565b336000908152602081815260408083206001600160a01b038716845282528083208584529091528120805490916bffffffffffffffffffffffff90911690036130b8576040517f411321ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526002602081905260409091205460ff16908160028111156130ea576130ea614b81565b146131255784816040517ff8d3a936000000000000000000000000000000000000000000000000000000008152600401610893929190614f58565b81546c01000000000000000000000000900463ffffffff16600061314b338888886142b7565b90508163ffffffff168163ffffffff16116131aa576040517f9e03653a00000000000000000000000000000000000000000000000000000000815263ffffffff8087166004830152808316602483015283166044820152606401610893565b835463ffffffff9091166c01000000000000000000000000027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff909116179092555050505050565b6131fa61393e565b6132038161425c565b63ffffffff168163ffffffff16141580613228575060035463ffffffff908116908216105b15613267576040517f74af145000000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610893565b600380547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1664010000000063ffffffff8416908102919091179091556040519081527fe02644567ab9266166c374f84f05396b070729fc139339e70d0237bb37e59dc590602001612524565b6001600160a01b038084166000908152600560205260409020600181015490911661332b576040517fce16ea8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600003613368576040517f88967d2f00000000000000000000000000000000000000000000000000000000815260048101839052602401610893565b336000908152602081815260408083206001600160a01b038816845282528083208684529091528120805490916bffffffffffffffffffffffff90911690036133dd576040517f411321ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805470010000000000000000000000000000000090046bffffffffffffffffffffffff168311156134675780546040517f5f6faf860000000000000000000000000000000000000000000000000000000081527001000000000000000000000000000000009091046bffffffffffffffffffffffff16600482015260248101849052604401610893565b6134718186613ee1565b8054839082906010906134a790849070010000000000000000000000000000000090046bffffffffffffffffffffffff16614fa4565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550828260000160008282829054906101000a90046bffffffffffffffffffffffff166135009190614fa4565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555083856001600160a01b0316336001600160a01b03167f6043289a72dfdddcba5a5eebd82a24572023a2344a1292dfcf3b56c1a142f6068660405161357491815260200190565b60405180910390a46001820154613596906001600160a01b031633308661427e565b60018201546040517f942c5875000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b039091169063942c587590602401600060405180830381600087803b1580156135f757600080fd5b505af115801561360b573d6000803e3d6000fd5b505050505050505050565b6007546001600160a01b0316331461365a576040517fc670608600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b825181101561385357600083828151811061367b5761367b614fc9565b6020026020010151600001519050600084838151811061369d5761369d614fc9565b6020908102919091018101518101516001600160a01b0380851660009081528084526040808220928b16825291845281812083825290935282208054919350916bffffffffffffffffffffffff9091169003613725576040517f411321ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018082015477010000000000000000000000000000000000000000000000900460ff16600381111561375a5761375a614b81565b146137a7578060010160179054906101000a900460ff1660016040517f4f38d5990000000000000000000000000000000000000000000000000000000081526004016108939291906150ba565b6001810180547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770200000000000000000000000000000000000000000000001790558054613805906bffffffffffffffffffffffff1686615095565b945081876001600160a01b0316846001600160a01b03167f41f6c6b107a872f7e7a62127f1104669af1b4b25a8eba2a4207a8266bd2b2c6460405160405180910390a450505060010161365e565b506001600160a01b038316600090815260086020526040902080548290829060019061389390849061010090046bffffffffffffffffffffffff16615095565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550836001600160a01b03167fd9953834583f8ccc107d531dd2133b07f00bf5c8cebe8f594486930986996c988360405161390e91906bffffffffffffffffffffffff91909116815260200190565b60405180910390a2600754612836906001600160a01b0386811691166bffffffffffffffffffffffff8516613a8b565b33613947612249565b6001600160a01b03161461205f576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610893565b6001600160a01b0381166000908152600560205260408120906139ab836143d0565b82549091506000906139d3906c01000000000000000000000000900463ffffffff16426150d5565b905060006139e78363ffffffff8416614ff8565b845490915081908590601090613a1f90849070010000000000000000000000000000000090046affffffffffffffffffffff166150f2565b82546101009290920a6affffffffffffffffffffff818102199093169190921691909102179055505082547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c010000000000000000000000004263ffffffff160217909255505050565b6040516001600160a01b0383811660248301526044820183905261164891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144f1565b613b0761456d565b6120bf816145d4565b6001600160a01b03831660009081526002602052604081205460ff1690816002811115613b3f57613b3f614b81565b03613b81576040517f06439c6b0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610893565b60008263ffffffff16118015613ba857506001816002811115613ba657613ba6614b81565b145b15613be35783816040517ff8d3a936000000000000000000000000000000000000000000000000000000008152600401610893929190614f58565b6001600160a01b038616613c2e576040517f9c64f6a10000000000000000000000000000000000000000000000000000000081526001600160a01b0387166004820152602401610893565b826bffffffffffffffffffffffff16600003613c86576040517f88967d2f0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff84166004820152602401610893565b60018054906000613c9683615116565b90915550506001546040516bffffffffffffffffffffffff8516815281906001600160a01b0380881691908a16907ff5681f9d0db1b911ac18ee83d515a1cf1051853a9eae418316a2fdf7dea427c59060200160405180910390a46040518060c00160405280856bffffffffffffffffffffffff168152602001613d1c898885886142b7565b63ffffffff16815260006020820181905260408201819052606082018190526080909101526001600160a01b03808916600090815260208181526040808320938a1683529281528282208583528152908290208351815492850151938501516bffffffffffffffffffffffff908116700100000000000000000000000000000000027fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff63ffffffff9096166c010000000000000000000000009081027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909616938316939093179490941794909416929092178155606084015160018201805460808701516affffffffffffffffffffff169094027fffffffffffffffffff000000000000000000000000000000000000000000000090941691909416179190911780835560a08401519192907fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000836003811115613eb657613eb6614b81565b021790555061303a9150506001600160a01b03861687306bffffffffffffffffffffffff881661427e565b613eea81613989565b6001600160a01b03818116600090815260056020908152604091829020825160e08101845281546bffffffffffffffffffffffff80821683526c0100000000000000000000000080830463ffffffff169584019590955270010000000000000000000000000000000082046affffffffffffffffffffff9081169684018790527b01000000000000000000000000000000000000000000000000000000830460ff90811660608601527c0100000000000000000000000000000000000000000000000000000000909304909216608084015260019384015496871660a08401527401000000000000000000000000000000000000000090960490951660c082015290860154909361402c9361400393909204169061514e565b845470010000000000000000000000000000000090046bffffffffffffffffffffffff1661461f565b60018401805460009061404e9084906bffffffffffffffffffffffff16615095565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550806040015183600101600c6101000a8154816affffffffffffffffffffff02191690836affffffffffffffffffffff160217905550505050565b600080846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156140f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411b9190614f20565b90506000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561415d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141819190614f20565b90508060ff168260ff1610156141c75761419b8282615172565b6141a690600a6152ab565b6141be906bffffffffffffffffffffffff86166152ba565b9250505061193b565b8060ff168260ff161115614202576141df8183615172565b6141ea90600a6152ab565b6141be906bffffffffffffffffffffffff86166152d1565b5091949350505050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815561180c82614659565b600061426b62093a80836152e5565b6142789062093a806152fc565b92915050565b6040516001600160a01b0384811660248301528381166044830152606482018390526128369186918216906323b872dd90608401613ab8565b60008163ffffffff166000036142ce5750426143c8565b60006142d98361425c565b905063ffffffff811615806142f9575060035463ffffffff908116908216105b80614317575060035463ffffffff6401000000009091048116908216115b15614356576040517f8dbf963f00000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610893565b6000614362824261531c565b905084866001600160a01b0316886001600160a01b03167f8b65b80ac62fde507cb8196bad6c93c114c2babc6ac846aae39ed6943ad36c4984866040516143bc92919063ffffffff92831681529116602082015260400190565b60405180910390a49150505b949350505050565b6001600160a01b038082166000908152600560209081526040808320815160e08101835281546bffffffffffffffffffffffff808216835263ffffffff6c01000000000000000000000000830416958301959095526affffffffffffffffffffff7001000000000000000000000000000000008204169382019390935260ff7b0100000000000000000000000000000000000000000000000000000084048116606083018190527c010000000000000000000000000000000000000000000000000000000090940416608082015260019091015494851660a08201527401000000000000000000000000000000000000000090940490911660c08401529091906301e13380906144e790662386f26fc10000614ff8565b61193b9190615057565b60006145066001600160a01b038416836146e2565b9050805160001415801561452b5750808060200190518101906145299190615339565b155b15611648576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610893565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661205f576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6145dc61456d565b6001600160a01b0381166120b6576040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152602401610893565b6000670de0b6b3a764000061464f6bffffffffffffffffffffffff84166affffffffffffffffffffff86166152ba565b61193b91906152d1565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b606061193b8383600084600080856001600160a01b031684866040516147089190615356565b60006040518083038185875af1925050503d8060008114614745576040519150601f19603f3d011682016040523d82523d6000602084013e61474a565b606091505b509150915061475a868383614764565b9695505050505050565b60608261477957614774826147d9565b61193b565b815115801561479057506001600160a01b0384163b155b156147d2576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610893565b508061193b565b8051156147e95780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80356001600160a01b038116811461483257600080fd5b919050565b60ff811681146120bf57600080fd5b6000806000806080858703121561485c57600080fd5b6148658561481b565b9350602085013561487581614837565b9250604085013561488581614837565b91506148936060860161481b565b905092959194509250565b6000604082840312156148b057600080fd5b50919050565b6000602082840312156148c857600080fd5b61193b8261481b565b80356bffffffffffffffffffffffff8116811461483257600080fd5b60008060006060848603121561490257600080fd5b61490b8461481b565b925060208401359150614920604085016148d1565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561497b5761497b614929565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156149c8576149c8614929565b604052919050565b600067ffffffffffffffff8211156149ea576149ea614929565b5060051b60200190565b80356003811061483257600080fd5b60006020808385031215614a1657600080fd5b823567ffffffffffffffff811115614a2d57600080fd5b8301601f81018513614a3e57600080fd5b8035614a51614a4c826149d0565b614981565b81815260069190911b82018301908381019087831115614a7057600080fd5b928401925b82841015614ac25760408489031215614a8e5760008081fd5b614a96614958565b614a9f8561481b565b8152614aac8686016149f4565b8187015282526040939093019290840190614a75565b979650505050505050565b803563ffffffff8116811461483257600080fd5b600080600060608486031215614af657600080fd5b614aff8461481b565b9250614b0d602085016148d1565b915061492060408501614acd565b60008060408385031215614b2e57600080fd5b614b378361481b565b946020939093013593505050565b600080600060608486031215614b5a57600080fd5b614b638461481b565b9250614b716020850161481b565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110614bc057614bc0614b81565b9052565b600060c0820190506bffffffffffffffffffffffff80845116835263ffffffff6020850151166020840152806040850151166040840152806060850151166060840152506affffffffffffffffffffff608084015116608083015260a0830151614c3160a0840182614bb0565b5092915050565b80151581146120bf57600080fd5b60008060408385031215614c5957600080fd5b614c628361481b565b91506020830135614c7281614c38565b809150509250929050565b6bffffffffffffffffffffffff878116825263ffffffff871660208301528581166040830152841660608201526affffffffffffffffffffff8316608082015260c08101614ac260a0830184614bb0565b600080600060608486031215614ce357600080fd5b614cec8461481b565b95602085013595506040909401359392505050565b60038110614bc057614bc0614b81565b602081016142788284614d01565b600080600080600060808688031215614d3757600080fd5b614d408661481b565b945060208601359350614d556040870161481b565b9250606086013567ffffffffffffffff80821115614d7257600080fd5b818801915088601f830112614d8657600080fd5b813581811115614d9557600080fd5b896020828501011115614da757600080fd5b9699959850939650602001949392505050565b600060208284031215614dcc57600080fd5b61193b82614acd565b6000806040808486031215614de957600080fd5b614df28461481b565b925060208085013567ffffffffffffffff811115614e0f57600080fd5b8501601f81018713614e2057600080fd5b8035614e2e614a4c826149d0565b81815260069190911b82018301908381019089831115614e4d57600080fd5b928401925b82841015614e945785848b031215614e6a5760008081fd5b614e72614958565b614e7b8561481b565b8152848601358682015282529285019290840190614e52565b8096505050505050509250929050565b60008060008060808587031215614eba57600080fd5b614ec38561481b565b9350614ed16020860161481b565b9250614edf604086016148d1565b915061489360608601614acd565b600080600060608486031215614f0257600080fd5b614f0b8461481b565b92506020840135915061492060408501614acd565b600060208284031215614f3257600080fd5b815161193b81614837565b600060208284031215614f4f57600080fd5b61193b826149f4565b6001600160a01b03831681526040810161193b6020830184614d01565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6bffffffffffffffffffffffff828116828216039080821115614c3157614c31614f75565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6bffffffffffffffffffffffff81811683821602808216919082811461502057615020614f75565b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006bffffffffffffffffffffffff8084168061507657615076615028565b92169190910492915050565b8082018082111561427857614278614f75565b6bffffffffffffffffffffffff818116838216019080821115614c3157614c31614f75565b604081016150c88285614bb0565b61193b6020830184614bb0565b63ffffffff828116828216039080821115614c3157614c31614f75565b6affffffffffffffffffffff818116838216019080821115614c3157614c31614f75565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361514757615147614f75565b5060010190565b6affffffffffffffffffffff828116828216039080821115614c3157614c31614f75565b60ff828116828216039081111561427857614278614f75565b600181815b808511156151e457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156151ca576151ca614f75565b808516156151d757918102915b93841c9390800290615190565b509250929050565b6000826151fb57506001614278565b8161520857506000614278565b816001811461521e576002811461522857615244565b6001915050614278565b60ff84111561523957615239614f75565b50506001821b614278565b5060208310610133831016604e8410600b8410161715615267575081810a614278565b615271838361518b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156152a3576152a3614f75565b029392505050565b600061193b60ff8416836151ec565b808202811582820484141761427857614278614f75565b6000826152e0576152e0615028565b500490565b600063ffffffff8084168061507657615076615028565b63ffffffff81811683821602808216919082811461502057615020614f75565b63ffffffff818116838216019080821115614c3157614c31614f75565b60006020828403121561534b57600080fd5b815161193b81614c38565b6000825160005b81811015615377576020818601810151858301520161535d565b50600092019182525091905056fea2646970667358221220f54f10c9b16155c81ec20f36a33354adf9f88ae7afd3177c073f46626e8f53b764736f6c63430008180033