0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614356806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610351575f3560e01c80638456cb59116101be578063c6e6f592116100fe578063e5dcfdb51161009e578063f0f4426011610079578063f0f4426014610768578063f2fde38b1461077b578063f39f251d1461078e578063fd5694d214610797575f80fd5b8063e5dcfdb514610730578063e8b0bb7c14610743578063ef8b30f714610670575f80fd5b8063d505accf116100d9578063d505accf1461069e578063d905777e146106b1578063dd62ed3e146106c4578063e30c397814610728575f80fd5b8063c6e6f59214610670578063c879657214610683578063ce96cb771461068b575f80fd5b8063a9059cbb11610169578063ba08765211610144578063ba08765214610637578063c1e755501461064a578063c3c646741461065d578063c63d75b6146104af575f80fd5b8063a9059cbb146105fe578063b3d7f6b914610611578063b460af9414610624575f80fd5b80638da5cb5b116101995780638da5cb5b146105db57806394bf804d146105e357806395d89b41146105f6575f80fd5b80638456cb59146105b057806384b0196e146105b85780638b33a13b146105d3575f80fd5b80633f4ba83a1161029457806370a082311161023457806379ba50971161020f57806379ba50971461056b5780637ecebe00146105735780637f5a9f7d1461058657806380dd9a1f1461058e575f80fd5b806370a0823114610548578063715018a61461055b578063747a9aee14610563575f80fd5b806352c8c3c01161026f57806352c8c3c0146104e25780635c975abb146104eb57806361d027b3146105155780636e553f6514610535575f80fd5b80633f4ba83a146104a7578063402d267d146104af5780634cdad50614610385575f80fd5b806318160ddd116102ff578063313ce567116102da578063313ce5671461044e578063362925c21461045d5780633644e5151461047257806338d52e0f1461047a575f80fd5b806318160ddd1461040c57806323b872dd146104335780632452373b14610446575f80fd5b806308dedf341161032f57806308dedf3414610398578063095ea7b3146103d65780630a28a477146103f9575f80fd5b806301e1d1141461035557806306fdde031461037057806307a2d13a14610385575b5f80fd5b61035d61079f565b6040519081526020015b60405180910390f35b6103786107c3565b6040516103679190613a9b565b61035d610393366004613aad565b61087b565b6001546103c1907501000000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610367565b6103e96103e4366004613aec565b61088c565b6040519015158152602001610367565b61035d610407366004613aad565b6108a3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025461035d565b6103e9610441366004613b14565b6108af565b61035d6108d4565b60405160128152602001610367565b61047061046b366004613c43565b610927565b005b61035d610cd5565b610482610cde565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610367565b610470610d1f565b61035d6104bd366004613cd8565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90565b61035d60025481565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166103e9565b6001546104829073ffffffffffffffffffffffffffffffffffffffff1681565b61035d610543366004613cf1565b610d62565b61035d610556366004613cd8565b610e18565b610470610e68565b61035d610e79565b610470610f90565b61035d610581366004613cd8565b611010565b61035d61101a565b6103e961059c366004613cd8565b60046020525f908152604090205460ff1681565b6104706110b6565b6105c06110ce565b6040516103679796959493929190613d1b565b61035d6111c8565b61048261124b565b61035d6105f1366004613cf1565b611273565b6103786112fe565b6103e961060c366004613aec565b61134f565b61035d61061f366004613aad565b61135c565b61035d610632366004613dda565b611368565b61035d610645366004613dda565b61141f565b610470610658366004613e13565b6114ab565b61047061066b366004613e45565b61160c565b61035d61067e366004613aad565b6117a1565b6104706117ac565b61035d610699366004613cd8565b611851565b6104706106ac366004613e6d565b611864565b61035d6106bf366004613cd8565b611a20565b61035d6106d2366004613eda565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b610482611a2a565b61047061073e366004613f02565b611a52565b6001546103e99074010000000000000000000000000000000000000000900460ff1681565b610470610776366004613cd8565b611b5c565b610470610789366004613cd8565b611caa565b61035d60035481565b61035d611d61565b5f806107a9611e16565b90506107b361101a565b6107bd9082613f48565b91505090565b60605f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b90508060030180546107f990613f5b565b80601f016020809104026020016040519081016040528092919081815260200182805461082590613f5b565b80156108705780601f1061084757610100808354040283529160200191610870565b820191905f5260205f20905b81548152906001019060200180831161085357829003601f168201915b505050505091505090565b5f610886825f611e8d565b92915050565b5f33610899818585611ee4565b5060019392505050565b5f610886826001611ef6565b5f336108bc858285611f44565b6108c7858585612030565b60019150505b9392505050565b5f6108fd7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b670de0b6b3a764000061090e6111c8565b6109189190613fac565b6109229190613ff0565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f811580156109715750825b90505f8267ffffffffffffffff16600114801561098d5750303b155b90508115801561099b575080155b156109d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610a335784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b73ffffffffffffffffffffffffffffffffffffffff8a161580610a6a575073ffffffffffffffffffffffffffffffffffffffff8616155b80610a89575073ffffffffffffffffffffffffffffffffffffffff8916155b15610ac0576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aca88886120d9565b610ad38a6120eb565b610adc886120fc565b610ae4612143565b610aed89612153565b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8b16179055600180547fffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff16770927c0010000000000000000000000000000000000000000179055610b8261dead670de0b6b3a7640000612164565b426002555f546040517f4cdad506000000000000000000000000000000000000000000000000000000008152670de0b6b3a7640000600482015273ffffffffffffffffffffffffffffffffffffffff90911690634cdad50690602401602060405180830381865afa158015610bf9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c1d9190614003565b600355600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8816179055610c686121be565b8315610cc95784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f6109226121ce565b5f807f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005b5473ffffffffffffffffffffffffffffffffffffffff1692915050565b610d276121d7565b610d2f61222f565b610d376122b0565b610d6060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b5f610d6b612373565b610d7361222f565b60015474010000000000000000000000000000000000000000900460ff168015610dac5750335f9081526004602052604090205460ff16155b15610de3576040517f4e967e5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ded83836123cf565b905061088660017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b73ffffffffffffffffffffffffffffffffffffffff9093165f9081526020939093525050604090205490565b610e706121d7565b610d605f612411565b6001545f907501000000000000000000000000000000000000000000900463ffffffff16808203610eab575f91505090565b5f610eb46111c8565b90505f610edf7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90505f610ef683670de0b6b3a76400008484612461565b6003549091505f9080831115610f1357610f108184613f48565b91505b815f03610f26575f965050505050505090565b5f60025442610f359190613f48565b90505f610f5f610f45838a613fac565b610f56629896806301e13380613fac565b8991905f612461565b90505f610f768588670de0b6b3a764000084612461565b9050610f8282826124ac565b9a9950505050505050505050565b3380610f9a611a2a565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b61100d81612411565b50565b5f610886826124bb565b5f80611024610e79565b5f546040517fef8b30f70000000000000000000000000000000000000000000000000000000081526004810183905291925073ffffffffffffffffffffffffffffffffffffffff169063ef8b30f7906024015b602060405180830381865afa158015611092573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bd9190614003565b6110be6121d7565b6110c661222f565b610d376124e3565b5f60608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100805490915015801561110c57506001810154155b611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152606401610ffb565b61117a61255c565b6111826125ad565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b5f805473ffffffffffffffffffffffffffffffffffffffff16634cdad5066111ee611e16565b6040518263ffffffff1660e01b815260040161120c91815260200190565b602060405180830381865afa158015611227573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109229190614003565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300610d02565b5f61127c612373565b61128461222f565b60015474010000000000000000000000000000000000000000900460ff1680156112bd5750335f9081526004602052604090205460ff16155b156112f4576040517f4e967e5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ded83836125d6565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916107f990613f5b565b5f33610899818585612030565b5f610886826001611e8d565b5f611371612373565b61137961222f565b60015474010000000000000000000000000000000000000000900460ff1680156113b25750335f9081526004602052604090205460ff16155b156113e9576040517f4e967e5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f4848484612610565b90506108cd60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f611428612373565b61143061222f565b60015474010000000000000000000000000000000000000000900460ff1680156114695750335f9081526004602052604090205460ff16155b156114a0576040517f4e967e5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113f4848484612696565b6114b36121d7565b6114bb61222f565b5f6114c4611d61565b90506114ce61271c565b620f424063ffffffff83161115611511576040517f8e9b51ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffff16750100000000000000000000000000000000000000000063ffffffff8516908102919091179091556040519081527f74f254e69f1d1aa50fbf15b184112c15530415ac9f4b4bf2b75778c6befd09789060200160405180910390a15f61159b611d61565b9050816115a960018361401a565b10156115e1576040517f3add83a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505061100d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b6116146121d7565b61161c61222f565b73ffffffffffffffffffffffffffffffffffffffff8216611669576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f9081526004602052604090205481151560ff9091161515036116ef576040517fb26b4fd000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201528115156024820152604401610ffb565b73ffffffffffffffffffffffffffffffffffffffff82165f8181526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fab5814e9f0dc78998a367cdeb77f1143370431cce307f90adb6db02f49fd768a910160405180910390a261179d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5050565b5f610886825f611ef6565b6117b46121d7565b6117bc61222f565b6117c4612373565b5f6117cd611d61565b90506117d761271c565b5f6117e0611d61565b9050816117ee60018361401a565b1015611826576040517f3add83a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050610d6060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f61088661185e83610e18565b5f611e8d565b834211156118a1576040517f6279130200000000000000000000000000000000000000000000000000000000815260048101859052602401610ffb565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886119188c73ffffffffffffffffffffffffffffffffffffffff165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61197f82612866565b90505f61198e828787876128ad565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a15576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401610ffb565b610cc98a8a8a611ee4565b5f61088682610e18565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610d02565b611a5a6121d7565b611a6261222f565b801515600160149054906101000a900460ff16151503611ab2576040517fd67745d80000000000000000000000000000000000000000000000000000000081528115156004820152602401610ffb565b6001805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f2b2380572b1802e670291bd5cd15ebf6ddd121ffebb227239f6bfbc473883ec590611b2b90831515815260200190565b60405180910390a161100d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611b646121d7565b611b6c61222f565b73ffffffffffffffffffffffffffffffffffffffff8116611bb9576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff90811690821603611c0e576040517f6825c7e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a905f90a35061100d60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b611cb26121d7565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255611d1b61124b565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f611d8a7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b5f54670de0b6b3a76400009073ffffffffffffffffffffffffffffffffffffffff16634cdad506611db961079f565b6040518263ffffffff1660e01b8152600401611dd791815260200190565b602060405180830381865afa158015611df2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090e9190614003565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0080546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201525f929173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401611077565b5f6108cd611e9961079f565b611ea490600161401a565b611eaf5f600a61414e565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611edb919061401a565b85919085612461565b611ef183838360016128d9565b505050565b5f6108cd611f0582600a61414e565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254611f31919061401a565b611f3961079f565b611edb90600161401a565b73ffffffffffffffffffffffffffffffffffffffff8381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461202a578181101561201c576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610ffb565b61202a84848484035f6128d9565b50505050565b73ffffffffffffffffffffffffffffffffffffffff831661207f576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b73ffffffffffffffffffffffffffffffffffffffff82166120ce576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b611ef1838383612a43565b6120e1612a4e565b61179d8282612ab5565b6120f3612a4e565b61100d81612b18565b612104612a4e565b61100d816040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250612b6f565b61214b612a4e565b610d60612be1565b61215b612a4e565b61100d81612c32565b73ffffffffffffffffffffffffffffffffffffffff82166121b3576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b61179d5f8383612a43565b6121c6612a4e565b610d60612d03565b5f610922612d0b565b336121e061124b565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ffb565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016122aa576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b6122b8612d7e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610d60576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6123fb856117a1565b905061240933858784612dd9565b949350505050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815561179d82612e95565b5f61248e61246e83612f2a565b801561248957505f848061248457612484613fc3565b868809115b151590565b612499868686612f56565b6124a3919061401a565b95945050505050565b5f8282188284100282186108cd565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610e3c565b6124eb612373565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612322565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100916107f990613f5b565b60605f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1006107e8565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f6126028561135c565b905061240933858388612dd9565b5f8061261b83611851565b90508085111561267d576040517ffe9cceec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810186905260448101829052606401610ffb565b5f612687866108a3565b90506124a3338686898561302b565b5f806126a183611a20565b905080851115612703576040517fb94abeec00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810186905260448101829052606401610ffb565b5f61270d8661087b565b90506124a3338686848a61302b565b5f612725610e79565b9050805f036127315750565b5f80546040517fef8b30f70000000000000000000000000000000000000000000000000000000081526004810184905273ffffffffffffffffffffffffffffffffffffffff9091169063ef8b30f790602401602060405180830381865afa15801561279e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c29190614003565b6001544260025590915073ffffffffffffffffffffffffffffffffffffffff166127ea6108d4565b6003555f546128109073ffffffffffffffffffffffffffffffffffffffff1682846130e9565b604080518481526020810184905273ffffffffffffffffffffffffffffffffffffffff8316917f2e4fb6077d4acf86e12bb7411fb82b2b3eaa6a49787f4b1e17b423e7ea841169910160405180910390a2505050565b5f6108866128726121ce565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f805f806128bd8888888861316a565b9250925092506128cd828261325d565b50909695505050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0073ffffffffffffffffffffffffffffffffffffffff8516612949576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b73ffffffffffffffffffffffffffffffffffffffff8416612998576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b73ffffffffffffffffffffffffffffffffffffffff8086165f90815260018301602090815260408083209388168352929052208390558115612a3c578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051612a3391815260200190565b60405180910390a35b5050505050565b611ef1838383613360565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16610d60576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612abd612a4e565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03612b0984826141a0565b506004810161202a83826141a0565b612b20612a4e565b73ffffffffffffffffffffffffffffffffffffffff8116611004576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b612b77612a4e565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102612bc384826141a0565b5060038101612bd283826141a0565b505f8082556001909101555050565b612be9612a4e565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b612c3a612a4e565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e005f80612c6684613373565b9150915081612c76576012612c78565b805b83547fffffffffffffffffffffff000000000000000000000000000000000000000000167401000000000000000000000000000000000000000060ff92909216919091027fffffffffffffffffffffffff0000000000000000000000000000000000000000161773ffffffffffffffffffffffffffffffffffffffff94909416939093179091555050565b61234d612a4e565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612d35613484565b612d3d6134ff565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610d60576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181811580612de6575080155b15612e1d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612e26611d61565b9050612e3061271c565b612e3c87878787613554565b5f612e45611d61565b905081612e5360018361401a565b1015612e8b576040517f3add83a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff0000000000000000000000000000000000000000811673ffffffffffffffffffffffffffffffffffffffff848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f6002826003811115612f3f57612f3f6142b7565b612f4991906142e4565b60ff166001149050919050565b5f838302817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870982811083820303915050805f03612fa957838281612f9f57612f9f613fc3565b04925050506108cd565b808411612fc057612fc0600385150260111861360b565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b8181811580613038575080155b1561306f576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613078611d61565b905061308261271c565b61308f888888888861361c565b5f613098611d61565b9050816130a660018361401a565b10156130de576040517f3add83a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff838116602483015260448201839052611ef191859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613724565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156131a357505f91506003905082613253565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156131f4573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661324a57505f925060019150829050613253565b92505f91508190505b9450945094915050565b5f826003811115613270576132706142b7565b03613279575050565b600182600381111561328d5761328d6142b7565b036132c4576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156132d8576132d86142b7565b03613312576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610ffb565b6003826003811115613326576133266142b7565b0361179d576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610ffb565b613368612373565b611ef18383836137c3565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f313ce5670000000000000000000000000000000000000000000000000000000017905290515f9182918291829173ffffffffffffffffffffffffffffffffffffffff8716916133f491614305565b5f60405180830381855afa9150503d805f811461342c576040519150601f19603f3d011682016040523d82523d5f602084013e613431565b606091505b509150915081801561344557506020815110155b15613478575f8180602001905181019061345f9190614003565b905060ff8111613476576001969095509350505050565b505b505f9485945092505050565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100816134af61255c565b8051909150156134c757805160209091012092915050565b815480156134d6579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161352a6125ad565b80519091501561354257805160209091012092915050565b600182015480156134d6579392505050565b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0080546135999073ffffffffffffffffffffffffffffffffffffffff16863086613990565b6135a38483612164565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78585604051612a33929190918252602082015260400190565b634e487b715f52806020526024601cfd5b7f0773e532dfede91f04b12a73d3d2acd361424f41f76b4fb79f090161e36b4e0073ffffffffffffffffffffffffffffffffffffffff8681169085161461366857613668848784611f44565b61367284836139d6565b80546136959073ffffffffffffffffffffffffffffffffffffffff1686856130e9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db8686604051613714929190918252602082015260400190565b60405180910390a4505050505050565b5f8060205f8451602086015f885af180613743576040513d5f823e3d81fd5b50505f513d9150811561375a578060011415613774565b73ffffffffffffffffffffffffffffffffffffffff84163b155b1561202a576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610ffb565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0073ffffffffffffffffffffffffffffffffffffffff841661381d5781816002015f828254613812919061401a565b909155506138cd9050565b73ffffffffffffffffffffffffffffffffffffffff84165f90815260208290526040902054828110156138a2576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff861660048201526024810182905260448101849052606401610ffb565b73ffffffffffffffffffffffffffffffffffffffff85165f9081526020839052604090209083900390555b73ffffffffffffffffffffffffffffffffffffffff83166138f8576002810180548390039055613923565b73ffffffffffffffffffffffffffffffffffffffff83165f9081526020829052604090208054830190555b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161398291815260200190565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff848116602483015283811660448301526064820183905261202a9186918216906323b872dd90608401613123565b73ffffffffffffffffffffffffffffffffffffffff8216613a25576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610ffb565b61179d825f83612a43565b5f5b83811015613a4a578181015183820152602001613a32565b50505f910152565b5f8151808452613a69816020860160208601613a30565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081525f6108cd6020830184613a52565b5f60208284031215613abd575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114613ae7575f80fd5b919050565b5f8060408385031215613afd575f80fd5b613b0683613ac4565b946020939093013593505050565b5f805f60608486031215613b26575f80fd5b613b2f84613ac4565b9250613b3d60208501613ac4565b929592945050506040919091013590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112613b8a575f80fd5b813567ffffffffffffffff811115613ba457613ba4613b4e565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff82111715613c1057613c10613b4e565b604052818152838201602001851015613c27575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215613c57575f80fd5b613c6086613ac4565b9450613c6e60208701613ac4565b9350604086013567ffffffffffffffff811115613c89575f80fd5b613c9588828901613b7b565b935050606086013567ffffffffffffffff811115613cb1575f80fd5b613cbd88828901613b7b565b925050613ccc60808701613ac4565b90509295509295909350565b5f60208284031215613ce8575f80fd5b6108cd82613ac4565b5f8060408385031215613d02575f80fd5b82359150613d1260208401613ac4565b90509250929050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f613d5560e0830189613a52565b8281036040840152613d678189613a52565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015613dc9578351835260209384019390920191600101613dab565b50909b9a5050505050505050505050565b5f805f60608486031215613dec575f80fd5b83359250613dfc60208501613ac4565b9150613e0a60408501613ac4565b90509250925092565b5f60208284031215613e23575f80fd5b813563ffffffff811681146108cd575f80fd5b80358015158114613ae7575f80fd5b5f8060408385031215613e56575f80fd5b613e5f83613ac4565b9150613d1260208401613e36565b5f805f805f805f60e0888a031215613e83575f80fd5b613e8c88613ac4565b9650613e9a60208901613ac4565b95506040880135945060608801359350608088013560ff81168114613ebd575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f8060408385031215613eeb575f80fd5b613ef483613ac4565b9150613d1260208401613ac4565b5f60208284031215613f12575f80fd5b6108cd82613e36565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561088657610886613f1b565b600181811c90821680613f6f57607f821691505b602082108103613fa6577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b808202811582820484141761088657610886613f1b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82613ffe57613ffe613fc3565b500490565b5f60208284031215614013575f80fd5b5051919050565b8082018082111561088657610886613f1b565b6001815b60018411156140685780850481111561404c5761404c613f1b565b600184161561405a57908102905b60019390931c928002614031565b935093915050565b5f8261407e57506001610886565b8161408a57505f610886565b81600181146140a057600281146140aa576140c6565b6001915050610886565b60ff8411156140bb576140bb613f1b565b50506001821b610886565b5060208310610133831016604e8410600b84101617156140e9575081810a610886565b6141147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461402d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561414657614146613f1b565b029392505050565b5f6108cd60ff841683614070565b601f821115611ef157805f5260205f20601f840160051c810160208510156141815750805b601f840160051c820191505b81811015612a3c575f815560010161418d565b815167ffffffffffffffff8111156141ba576141ba613b4e565b6141ce816141c88454613f5b565b8461415c565b6020601f82116001811461421f575f83156141e95750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455612a3c565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b8281101561426c578785015182556020948501946001909201910161424c565b50848210156142a857868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b01905550565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f60ff8316806142f6576142f6613fc3565b8060ff84160691505092915050565b5f8251614316818460208701613a30565b919091019291505056fea2646970667358221220f835a7582cc883e560627ff6a1701ada4e173ae08babc5e51c36fa90ca4324a564736f6c634300081a0033