60806040523480156200001157600080fd5b50600054610100900460ff166200002f5760005460ff161562000039565b62000039620000de565b620000a15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b600054610100900460ff16158015620000c4576000805461ffff19166101011790555b8015620000d7576000805461ff00191690555b5062000102565b6000620000f630620000fc60201b62002a811760201c565b15905090565b3b151590565b614d0480620001126000396000f3fe6080604052600436106102d15760003560e01c806379847b9911610179578063b88d4fde116100d6578063ce7c2ac21161008a578063f053dc5c11610064578063f053dc5c14610827578063f0553be71461084e578063f2fde38b1461086e57600080fd5b8063ce7c2ac214610780578063d7b97ef6146107b1578063e985e9c5146107d157600080fd5b8063c87b56dd116100bb578063c87b56dd1461072b578063cd29c71a1461074b578063ce513b6f1461076057600080fd5b8063b88d4fde146106d8578063bfd2385e146106f857600080fd5b8063949d225d1161012d5780639b8581d0116101125780639b8581d014610682578063a035b1fe146106a2578063a22cb465146106b857600080fd5b8063949d225d1461063357806395d89b411461066d57600080fd5b8063850710c31161015e578063850710c3146105e95780638da5cb5b146105fe57806391b7f5ed1461061357600080fd5b806379847b9914610599578063825f98d4146105d457600080fd5b80633ccfd60b11610232578063646c2e33116101e657806370a08231116101c057806370a0823114610540578063715018a6146105605780637754305c1461057557600080fd5b8063646c2e331461050257806364edfbf0146105185780636f243a9c1461052057600080fd5b806342966c681161021757806342966c68146104ad5780634bf365df146104cd5780636352211e146104e257600080fd5b80633ccfd60b1461047857806342842e0e1461048d57600080fd5b806318160ddd1161028957806323b872dd1161026e57806323b872dd146103ec5780632a55205a1461040c5780632add8f5b1461045857600080fd5b806318160ddd146103b757806318f0043f146103cc57600080fd5b8063081812fc116102ba578063081812fc1461032d578063095ea7b3146103725780631249c58b1461039457600080fd5b806301ffc9a7146102d657806306fdde031461030b575b600080fd5b3480156102e257600080fd5b506102f66102f136600461426f565b61088e565b60405190151581526020015b60405180910390f35b34801561031757600080fd5b506103206108ea565b60405161030291906142f7565b34801561033957600080fd5b5061034d61034836600461430a565b61097c565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610302565b34801561037e57600080fd5b5061039261038d366004614355565b610a5b565b005b3480156103a057600080fd5b506103a9610be8565b604051908152602001610302565b3480156103c357600080fd5b506103a9610d2c565b3480156103d857600080fd5b506103926103e73660046145e2565b610d48565b3480156103f857600080fd5b50610392610407366004614738565b61126d565b34801561041857600080fd5b5061042c610427366004614779565b61130f565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610302565b34801561046457600080fd5b5061039261047336600461479b565b611389565b34801561048457600080fd5b506103926114cc565b34801561049957600080fd5b506103926104a8366004614738565b6114d7565b3480156104b957600080fd5b506103926104c836600461430a565b6114f2565b3480156104d957600080fd5b506103a961156d565b3480156104ee57600080fd5b5061034d6104fd36600461430a565b6115c5565b34801561050e57600080fd5b506103a960cb5481565b6103a9611677565b34801561052c57600080fd5b506103a961053b366004614779565b6117ef565b34801561054c57600080fd5b506103a961055b36600461479b565b611cb3565b34801561056c57600080fd5b50610392611d81565b34801561058157600080fd5b5061058a611e85565b604051610302939291906147b8565b3480156105a557600080fd5b5060cd5461034d906a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105e057600080fd5b50610392611fb5565b3480156105f557600080fd5b50610320612011565b34801561060a57600080fd5b5061034d61209f565b34801561061f57600080fd5b5061039261062e36600461430a565b6120c0565b34801561063f57600080fd5b5060cd546106549067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610302565b34801561067957600080fd5b50610320612181565b34801561068e57600080fd5b5061039261069d3660046147fd565b612190565b3480156106ae57600080fd5b506103a960cf5481565b3480156106c457600080fd5b506103926106d3366004614818565b612282565b3480156106e457600080fd5b506103926106f336600461484d565b612291565b34801561070457600080fd5b5061071861071336600461479b565b612339565b60405161ffff9091168152602001610302565b34801561073757600080fd5b5061032061074636600461430a565b61245c565b34801561075757600080fd5b5061032061257c565b34801561076c57600080fd5b506103a961077b36600461479b565b612589565b34801561078c57600080fd5b5061071861079b36600461479b565b60d16020526000908152604090205461ffff1681565b3480156107bd57600080fd5b506103a96107cc3660046148cd565b6125fd565b3480156107dd57600080fd5b506102f66107ec366004614967565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b34801561083357600080fd5b5060cd546107189068010000000000000000900461ffff1681565b34801561085a57600080fd5b506103926108693660046149a0565b6126e0565b34801561087a57600080fd5b5061039261088936600461479b565b612863565b60007f2a55205a000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108e457506108e482612a87565b92915050565b6060606580546108f990614a04565b80601f016020809104026020016040519081016040528092919081815260200182805461092590614a04565b80156109725780601f1061094757610100808354040283529160200191610972565b820191906000526020600020905b81548152906001019060200180831161095557829003601f168201915b5050505050905090565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16610a32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610a66826115c5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610a29565b3373ffffffffffffffffffffffffffffffffffffffff82161480610b4d5750610b4d81336107ec565b610bd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a29565b610be38383612b6a565b505050565b6000610bf46001612c0a565b610c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d696e74696e67206e6f7420616c6c6f776564000000000000000000000000006044820152606401610a29565b604080516001808252818301909252600091602080830190803683370190505090503381600081518110610c9057610c90614a58565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015233610cbe61209f565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d0e57506000805260ce6020527fd3f5862f6f80175da7514904f3a889cc3cc8c4f3af5129e28cdeaee2baa6efc45461ffff16155b15610d1d57610d1d6001612d47565b610d2681612d87565b91505090565b60006001610d3960c95490565b610d439190614ab6565b905090565b600054610100900460ff16610d635760005460ff1615610d67565b303b155b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a29565b600054610100900460ff16158015610e3257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000166101011790555b610e4487600001518860200151612e60565b610e4c612f11565b610e5588612863565b600087604001515111610ec4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f456d70747920636f6e74656e742055524c0000000000000000000000000000006044820152606401610a29565b60408701518051610edd9160ca916020909101906141a8565b50606087015160cb55608087015151610f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d707479206d657461646174612055524c00000000000000000000000000006044820152606401610a29565b60808701518051610f6b9160cc916020909101906141a8565b5060cd80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff881617905560cf85905573ffffffffffffffffffffffffffffffffffffffff8216611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416c6c6f77616e6365733a20696e76616c6964207265666572656e63650000006044820152606401610a29565b60cd80547fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000073ffffffffffffffffffffffffffffffffffffffff85160217905560c9805460010190556127108461ffff16106110e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f526f79616c7469657320746f6f206869676800000000000000000000000000006044820152606401610a29565b60cd80547fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000061ffff8716021790556000805b84518110156111ae5761117185828151811061114257611142614a58565b60200260200101516000015186838151811061116057611160614a58565b602002602001015160200151612fb8565b84818151811061118357611183614a58565b6020026020010151602001518261119a9190614acd565b9150806111a681614af3565b915050611124565b506127108161ffff161061121e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f53686172657320746f6f206869676800000000000000000000000000000000006044820152606401610a29565b6112338961122e83612710614b2c565b612fb8565b50801561126357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050505050505050565b611278335b826131f6565b611304576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a29565b610be3838383613362565b6000808061131b61209f565b73ffffffffffffffffffffffffffffffffffffffff16141561134a5761133f61209f565b600091509150611382565b61135261209f565b60cd54612710906113739068010000000000000000900461ffff1686614b4f565b61137d9190614b8c565b915091505b9250929050565b3361139261209f565b73ffffffffffffffffffffffffffffffffffffffff161461140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a29565b803b611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c6964206e6577207265666572656e636500000000000000000000006044820152606401610a29565b60cd805473ffffffffffffffffffffffffffffffffffffffff9092166a0100000000000000000000027fffff0000000000000000000000000000000000000000ffffffffffffffffffff909216919091179055565b6114d5336135c9565b565b610be383838360405180602001604052806000815250612291565b6114fb33611272565b611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420617070726f76656400000000000000000000000000000000000000006044820152606401610a29565b61156a81613783565b50565b600061157860c95490565b60cd5467ffffffffffffffff16156115a75760cd546115a29067ffffffffffffffff166001614bc7565b6115b1565b67ffffffffffffffff5b67ffffffffffffffff16610d439190614ab6565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff16806108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610a29565b60008060cf54116116e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4e6f7420666f722073616c6500000000000000000000000000000000000000006044820152606401610a29565b60cf54341461174f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f57726f6e672070726963650000000000000000000000000000000000000000006044820152606401610a29565b60408051600180825281830190925260009160208083019080368337019050509050338160008151811061178557611785614a58565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910182015260cf546040805191825233928201929092527f60a6c75698fadb72223808131f9f9bb9db3afa32122db6d94fb8fc985a504baa910160405180910390a1610d2681612d87565b600060cd600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166390e3b35c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561185957600080fd5b505afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118919190614bea565b67ffffffffffffffff166118a361156d565b67ffffffffffffffff161015611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f536f6c64206f75740000000000000000000000000000000000000000000000006044820152606401610a29565b600060cd600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b15801561197f57600080fd5b505afa158015611993573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b79190614c07565b8310611a625760cd600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631f7b6d326040518163ffffffff1660e01b815260040160206040518083038186803b158015611a2557600080fd5b505afa158015611a39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5d9190614c07565b611a64565b825b9050835b81811015611ca65760cd546040517f8623ec7b000000000000000000000000000000000000000000000000000000008152600481018390526000916a0100000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690638623ec7b9060240160206040518083038186803b158015611ae957600080fd5b505afa158015611afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b219190614c20565b73ffffffffffffffffffffffffffffffffffffffff818116600081815260ce60205260408082205460cd5491517f2b603c710000000000000000000000000000000000000000000000000000000081526004810194909452949550909361ffff16926a01000000000000000000009091041690632b603c719060240160206040518083038186803b158015611bb557600080fd5b505afa158015611bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bed9190614c3d565b611bf79190614b2c565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260ce6020526040812080549293508392909190611c3590849061ffff16614acd565b92506101000a81548161ffff021916908361ffff16021790555060005b8161ffff16811015611c9057611c7083611c6b60c95490565b613850565b611c7e60c980546001019055565b80611c8881614af3565b915050611c52565b5050508080611c9e90614af3565b915050611a68565b5060c9545b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8216611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610a29565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b33611d8a61209f565b73ffffffffffffffffffffffffffffffffffffffff1614611e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a29565b47158015611e15575060cf54155b611e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f506f74656e7469616c206c6f7373206f662066756e64730000000000000000006044820152606401610a29565b6114d56000613a12565b60606000606060ca60cb5460cc828054611e9e90614a04565b80601f0160208091040260200160405190810160405280929190818152602001828054611eca90614a04565b8015611f175780601f10611eec57610100808354040283529160200191611f17565b820191906000526020600020905b815481529060010190602001808311611efa57829003601f168201915b50505050509250808054611f2a90614a04565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5690614a04565b8015611fa35780601f10611f7857610100808354040283529160200191611fa3565b820191906000526020600020905b815481529060010190602001808311611f8657829003601f168201915b50505050509050925092509250909192565b60005b60d05481101561156a57611fff60d08281548110611fd857611fd8614a58565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff166135c9565b8061200981614af3565b915050611fb8565b60ca805461201e90614a04565b80601f016020809104026020016040519081016040528092919081815260200182805461204a90614a04565b80156120975780601f1061206c57610100808354040283529160200191612097565b820191906000526020600020905b81548152906001019060200180831161207a57829003601f168201915b505050505081565b6000610d4360975473ffffffffffffffffffffffffffffffffffffffff1690565b336120c961209f565b73ffffffffffffffffffffffffffffffffffffffff1614612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a29565b60cf8190556040518181527fa6dc15bdb68da224c66db4b3838d9a2b205138e8cff6774e57d0af91e196d6229060200160405180910390a150565b6060606680546108f990614a04565b3361219961209f565b73ffffffffffffffffffffffffffffffffffffffff1614612216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a29565b80612222576000612225565b60015b6000805260ce6020527fd3f5862f6f80175da7514904f3a889cc3cc8c4f3af5129e28cdeaee2baa6efc480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff9290921691909117905550565b61228d338383613a89565b5050565b61229b33836131f6565b612327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610a29565b61233384848484613bb7565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff821661238a5750506000805260ce6020527fd3f5862f6f80175da7514904f3a889cc3cc8c4f3af5129e28cdeaee2baa6efc45461ffff1690565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260ce6020526040908190205460cd5491517f2b603c71000000000000000000000000000000000000000000000000000000008152600481019390935261ffff16926a01000000000000000000009091041690632b603c719060240160206040518083038186803b15801561241a57600080fd5b505afa15801561242e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124529190614c3d565b6108e49190614b2c565b60008181526067602052604090205460609073ffffffffffffffffffffffffffffffffffffffff166124ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f45646974696f6e20646f65736e277420657869737400000000000000000000006044820152606401610a29565b60cc80546124f790614a04565b80601f016020809104026020016040519081016040528092919081815260200182805461252390614a04565b80156125705780601f1061254557610100808354040283529160200191612570565b820191906000526020600020905b81548152906001019060200180831161255357829003601f168201915b50505050509050919050565b60cc805461201e90614a04565b60008060d2544761259a9190614c5a565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260d3602090815260408083205460d19092529091205491925090612710906125e29061ffff1684614b4f565b6125ec9190614b8c565b6125f69190614ab6565b9392505050565b60006126098251612c0a565b61266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4d696e74696e67206e6f7420616c6c6f776564206f7220657863656564696e676044820152606401610a29565b3361267861209f565b73ffffffffffffffffffffffffffffffffffffffff16141580156126c857506000805260ce6020527fd3f5862f6f80175da7514904f3a889cc3cc8c4f3af5129e28cdeaee2baa6efc45461ffff16155b156126d7576126d78251612d47565b6108e482612d87565b336126e961209f565b73ffffffffffffffffffffffffffffffffffffffff1614612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a29565b60008251116127d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f456d70747920636f6e74656e742055524c0000000000000000000000000000006044820152606401610a29565b81516127e49060ca9060208501906141a8565b506000815111612850576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d707479206d657461646174612055524c00000000000000000000000000006044820152606401610a29565b8051610be39060cc9060208401906141a8565b3361286c61209f565b73ffffffffffffffffffffffffffffffffffffffff16146128e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a29565b73ffffffffffffffffffffffffffffffffffffffff8116612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4e6577206f776e657220697320746865207a65726f20616464726573730000006044820152606401610a29565b60d1600061297261209f565b73ffffffffffffffffffffffffffffffffffffffff90811682526020808301939093526040918201600090812054918516815260d19093529120546129be9161ffff9081169116614acd565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260d160208190526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff94909416939093179092559081612a2161209f565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff9290921691909117905561156a81613a12565b3b151590565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612b1a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108e457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108e4565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190612bc4826115c5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600033612c1561209f565b73ffffffffffffffffffffffffffffffffffffffff161480612c6457506000805260ce6020527fd3f5862f6f80175da7514904f3a889cc3cc8c4f3af5129e28cdeaee2baa6efc45461ffff1615155b806108e4575060cd546040517f2b603c710000000000000000000000000000000000000000000000000000000081523360048201526a010000000000000000000090910473ffffffffffffffffffffffffffffffffffffffff1690632b603c719060240160206040518083038186803b158015612ce057600080fd5b505afa158015612cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d189190614c3d565b33600090815260ce602052604090205461ffff91821691612d3b91859116614acd565b61ffff16111592915050565b33600090815260ce602052604081208054839290612d6a90849061ffff16614acd565b92506101000a81548161ffff021916908361ffff16021790555050565b60008151612d9361156d565b67ffffffffffffffff161015612e05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f536f6c64206f75740000000000000000000000000000000000000000000000006044820152606401610a29565b60005b8251811015612e5757612e37838281518110612e2657612e26614a58565b6020026020010151611c6b60c95490565b612e4560c980546001019055565b80612e4f81614af3565b915050612e08565b5060c9546108e4565b600054610100900460ff16612ef7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a29565b612eff613c5a565b612f07613c5a565b61228d8282613cf1565b600054610100900460ff16612fa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a29565b612fb0613c5a565b6114d5613daf565b73ffffffffffffffffffffffffffffffffffffffff8216613035576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5368617265686f6c646572206973207a65726f206164647265737300000000006044820152606401610a29565b60008161ffff1611801561304f57506127108161ffff1611155b6130b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5368617265732061726520696e76616c696400000000000000000000000000006044820152606401610a29565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260d1602052604090205461ffff1615613146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f5368617265686f6c64657220616c7265616479206861732073686172657300006044820152606401610a29565b60d08054600181019091557fe89d44c8fd6a9bac8af33ce47f56337617d449bf7ff3956b618c646de829cbcb0180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff939093169283179055600091825260d1602052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff909216919091179055565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff166132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610a29565b60006132b2836115c5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061332157508373ffffffffffffffffffffffffffffffffffffffff166133098461097c565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cab575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff16611cab565b8273ffffffffffffffffffffffffffffffffffffffff16613382826115c5565b73ffffffffffffffffffffffffffffffffffffffff1614613425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610a29565b73ffffffffffffffffffffffffffffffffffffffff82166134c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a29565b6134d2600082612b6a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152606860205260408120805460019290613508908490614ab6565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152606860205260408120805460019290613543908490614c5a565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6040517fce513b6f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152600090309063ce513b6f9060240160206040518083038186803b15801561363157600080fd5b505afa158015613645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136699190614c07565b9050806136d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4163636f756e74206973206e6f7420647565207061796d656e740000000000006044820152606401610a29565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260d3602052604081208054839290613707908490614c5a565b925050819055508060d260008282546137209190614c5a565b9091555061373090508282613e4f565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fc271d5cc8e899d2f13fb92ceb234c8beb4f1b82ebee351bd4fd728a79773e12b910160405180910390a15050565b600061378e826115c5565b905061379b600083612b6a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526068602052604081208054600192906137d1908490614ab6565b909155505060008281526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b73ffffffffffffffffffffffffffffffffffffffff82166138cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a29565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a29565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260686020526040812080546001929061398f908490614c5a565b909155505060008181526067602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a29565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613bc2848484613362565b613bce84848484613fa9565b612333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a29565b600054610100900460ff166114d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a29565b600054610100900460ff16613d88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a29565b8151613d9b9060659060208501906141a8565b508051610be39060669060208401906141a8565b600054610100900460ff16613e46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a29565b6114d533613a12565b80471015613eb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a29565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114613f13576040519150601f19603f3d011682016040523d82523d6000602084013e613f18565b606091505b5050905080610be3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a29565b600073ffffffffffffffffffffffffffffffffffffffff84163b1561419d576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290614020903390899088908890600401614c72565b602060405180830381600087803b15801561403a57600080fd5b505af1925050508015614088575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261408591810190614cb1565b60015b614152573d8080156140b6576040519150601f19603f3d011682016040523d82523d6000602084013e6140bb565b606091505b50805161414a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a29565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611cab565b506001949350505050565b8280546141b490614a04565b90600052602060002090601f0160209004810192826141d6576000855561421c565b82601f106141ef57805160ff191683800117855561421c565b8280016001018555821561421c579182015b8281111561421c578251825591602001919060010190614201565b5061422892915061422c565b5090565b5b80821115614228576000815560010161422d565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461156a57600080fd5b60006020828403121561428157600080fd5b81356125f681614241565b6000815180845260005b818110156142b257602081850181015186830182015201614296565b818111156142c4576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125f6602083018461428c565b60006020828403121561431c57600080fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff8116811461156a57600080fd5b803561435081614323565b919050565b6000806040838503121561436857600080fd5b823561437381614323565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156143d3576143d3614381565b60405290565b60405160a0810167ffffffffffffffff811182821017156143d3576143d3614381565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561444357614443614381565b604052919050565b600067ffffffffffffffff83111561446557614465614381565b61449660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016143fc565b90508281528383830111156144aa57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126144d257600080fd5b6125f68383356020850161444b565b67ffffffffffffffff8116811461156a57600080fd5b8035614350816144e1565b61ffff8116811461156a57600080fd5b803561435081614502565b600067ffffffffffffffff82111561453757614537614381565b5060051b60200190565b600082601f83011261455257600080fd5b813560206145676145628361451d565b6143fc565b82815260069290921b8401810191818101908684111561458657600080fd5b8286015b848110156145d757604081890312156145a35760008081fd5b6145ab6143b0565b81356145b681614323565b8152818501356145c581614502565b8186015283529183019160400161458a565b509695505050505050565b600080600080600080600060e0888a0312156145fd57600080fd5b873561460881614323565b9650602088013567ffffffffffffffff8082111561462557600080fd5b9089019060a0828c03121561463957600080fd5b6146416143d9565b82358281111561465057600080fd5b61465c8d8286016144c1565b82525060208301358281111561467157600080fd5b61467d8d8286016144c1565b60208301525060408301358281111561469557600080fd5b6146a18d8286016144c1565b604083015250606083013560608201526080830135828111156146c357600080fd5b6146cf8d8286016144c1565b60808301525097506146e360408b016144f7565b965060608a013595506146f860808b01614512565b945060a08a013591508082111561470e57600080fd5b5061471b8a828b01614541565b92505061472a60c08901614345565b905092959891949750929550565b60008060006060848603121561474d57600080fd5b833561475881614323565b9250602084013561476881614323565b929592945050506040919091013590565b6000806040838503121561478c57600080fd5b50508035926020909101359150565b6000602082840312156147ad57600080fd5b81356125f681614323565b6060815260006147cb606083018661428c565b84602084015282810360408401526147e3818561428c565b9695505050505050565b8035801515811461435057600080fd5b60006020828403121561480f57600080fd5b6125f6826147ed565b6000806040838503121561482b57600080fd5b823561483681614323565b9150614844602084016147ed565b90509250929050565b6000806000806080858703121561486357600080fd5b843561486e81614323565b9350602085013561487e81614323565b925060408501359150606085013567ffffffffffffffff8111156148a157600080fd5b8501601f810187136148b257600080fd5b6148c18782356020840161444b565b91505092959194509250565b600060208083850312156148e057600080fd5b823567ffffffffffffffff8111156148f757600080fd5b8301601f8101851361490857600080fd5b80356149166145628261451d565b81815260059190911b8201830190838101908783111561493557600080fd5b928401925b8284101561495c57833561494d81614323565b8252928401929084019061493a565b979650505050505050565b6000806040838503121561497a57600080fd5b823561498581614323565b9150602083013561499581614323565b809150509250929050565b600080604083850312156149b357600080fd5b823567ffffffffffffffff808211156149cb57600080fd5b6149d7868387016144c1565b935060208501359150808211156149ed57600080fd5b506149fa858286016144c1565b9150509250929050565b600181811c90821680614a1857607f821691505b60208210811415614a52577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614ac857614ac8614a87565b500390565b600061ffff808316818516808303821115614aea57614aea614a87565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b2557614b25614a87565b5060010190565b600061ffff83811690831681811015614b4757614b47614a87565b039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b8757614b87614a87565b500290565b600082614bc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600067ffffffffffffffff808316818516808303821115614aea57614aea614a87565b600060208284031215614bfc57600080fd5b81516125f6816144e1565b600060208284031215614c1957600080fd5b5051919050565b600060208284031215614c3257600080fd5b81516125f681614323565b600060208284031215614c4f57600080fd5b81516125f681614502565b60008219821115614c6d57614c6d614a87565b500190565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526147e3608083018461428c565b600060208284031215614cc357600080fd5b81516125f68161424156fea26469706673582212200d5e0b7f246b689c9e244473f87c525c636a050d59571fe0e7e084a0eef7597f64736f6c63430008090033