60806040526008805461ffff19166101001790556119fa600a553480156200002657600080fd5b50604051620028d3380380620028d3833981016040819052620000499162000202565b6040805180820182526007815266547275706c617960c81b60208083019182528351808501909452600384526254525560e81b908401528151919291620000939160009162000146565b508051620000a990600190602084019062000146565b505050620000c6620000c0620000f060201b60201c565b620000f4565b6006805460ff60a01b191690558051620000e890600790602084019062000146565b50506200031b565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200015490620002de565b90600052602060002090601f016020900481019282620001785760008555620001c3565b82601f106200019357805160ff1916838001178555620001c3565b82800160010185558215620001c3579182015b82811115620001c3578251825591602001919060010190620001a6565b50620001d1929150620001d5565b5090565b5b80821115620001d15760008155600101620001d6565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200021657600080fd5b82516001600160401b03808211156200022e57600080fd5b818501915085601f8301126200024357600080fd5b815181811115620002585762000258620001ec565b604051601f8201601f19908116603f01168101908382118183101715620002835762000283620001ec565b8160405282815288868487010111156200029c57600080fd5b600093505b82841015620002c05784840186015181850187015292850192620002a1565b82841115620002d25760008684830101525b98975050505050505050565b600181811c90821680620002f357607f821691505b602082108114156200031557634e487b7160e01b600052602260045260246000fd5b50919050565b6125a8806200032b6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c80635a71dadf1161012a5780638456cb59116100bd578063b88d4fde1161008c578063c87b56dd11610071578063c87b56dd14610420578063e985e9c514610433578063f2fde38b1461046f57600080fd5b8063b88d4fde146103fa578063bd32fb661461040d57600080fd5b80638456cb59146103c65780638da5cb5b146103ce57806395d89b41146103df578063a22cb465146103e757600080fd5b80636871ee40116100f95780636871ee401461039b5780636c0360eb146103a357806370a08231146103ab578063715018a6146103be57600080fd5b80635a71dadf1461034a5780635c975abb1461035d57806361db4e94146103805780636352211e1461038857600080fd5b80633c1d667b116101a25780634223f5e8116101715780634223f5e8146102f357806342842e0e1461031757806355f804b31461032a578063564566a81461033d57600080fd5b80633c1d667b146102c85780633ccfd60b146102db5780633f4ba83a146102e35780633fbab9eb146102eb57600080fd5b806323b872dd116101de57806323b872dd1461028d5780632a47f799146102a057806333039d3d146102b757806334918dfd146102c057600080fd5b806301ffc9a71461021057806306fdde0314610238578063081812fc1461024d578063095ea7b314610278575b600080fd5b61022361021e366004611f26565b610482565b60405190151581526020015b60405180910390f35b610240610567565b60405161022f9190611f9b565b61026061025b366004611fae565b6105f9565b6040516001600160a01b03909116815260200161022f565b61028b610286366004611fe3565b610620565b005b61028b61029b36600461200d565b610757565b6102a96119fa81565b60405190815260200161022f565b6102a9611b5881565b61028b6107de565b61028b6102d6366004612090565b610834565b61028b610a36565b61028b610b08565b6102a9610b1a565b60085461030590610100900460ff1681565b60405160ff909116815260200161022f565b61028b61032536600461200d565b610b2a565b61028b610338366004612136565b610b45565b6008546102239060ff1681565b61028b6103583660046121a8565b610b8a565b60065474010000000000000000000000000000000000000000900460ff16610223565b61028b610c03565b610260610396366004611fae565b610cc2565b61028b610d27565b610240610ed2565b6102a96103b93660046121cb565b610f60565b61028b610ffa565b61028b61100c565b6006546001600160a01b0316610260565b61024061101c565b61028b6103f53660046121e6565b61102b565b61028b610408366004612222565b61103a565b61028b61041b366004611fae565b6110c8565b61024061042e366004611fae565b6110d5565b6102236104413660046122e2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61028b61047d3660046121cb565b61113c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061051557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061056157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606000805461057690612315565b80601f01602080910402602001604051908101604052809291908181526020018280546105a290612315565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b5050505050905090565b6000610604826111cc565b506000908152600460205260409020546001600160a01b031690565b600061062b82610cc2565b9050806001600160a01b0316836001600160a01b031614156106ba5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b03821614806106d657506106d68133610441565b6107485760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106b1565b6107528383611230565b505050565b61076133826112b6565b6107d35760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f76656400000000000000000000000000000000000060648201526084016106b1565b610752838383611335565b6107e661151a565b6008805460ff8082161560ff1990921682179092556040519116151581527f6143d1994b0bc2db674da4f758fd5d5f18fa202a65acd97b74f38cbe90874f37906020015b60405180910390a1565b61083c611574565b6119fa61084860095490565b106108955760405162461bcd60e51b815260206004820152600360248201527f452331000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b600b546040517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201526108ea918391603401604051602081830303815290604052805190602001206115df565b6109365760405162461bcd60e51b815260206004820152600360248201527f452335000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b600854336000908152600c602052604090205460ff61010090920482169116106109a25760405162461bcd60e51b815260206004820152600360248201527f452336000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b336000908152600c60205260408120805460ff16916109c083612366565b91906101000a81548160ff021916908360ff160217905550506109e7600980546001019055565b60006109f260095490565b90506109fe33826115f5565b6040518181527f75c6a4e32bd9a5ba4951a80cce64a24d5702461cdb1e6d4b671bb494a5adfe43906020015b60405180910390a15050565b610a3e61151a565b6040514790600090339083908381818185875af1925050503d8060008114610a82576040519150601f19603f3d011682016040523d82523d6000602084013e610a87565b606091505b5050905080610ad85760405162461bcd60e51b815260206004820152600360248201527f452334000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b6040518281527f794032702377d1e7eb93381e2467d569394569207a770af85b3222a361126c9190602001610a2a565b610b1061151a565b610b1861160f565b565b6000610b2560095490565b905090565b6107528383836040518060200160405280600081525061103a565b610b4d61151a565b610b5960078383611e5f565b507f325d37e8fb549c86966f09bc3e6f62eb3afa93b255d6e3234338001f3d80bd866007604051610a2a9190612386565b610b9261151a565b600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff8481168202929092179283905560405192041681527f2d4dbbc7cc670af5ad0d109085da094ce0addda907513e3890aaa01ec2815f26906020015b60405180910390a150565b610c0b61151a565b6119fa600a5410158015610c225750611b58600a54105b610c6e5760405162461bcd60e51b815260206004820152600360248201527f452333000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b600a8054906000610c7e8361242e565b9190505550610c8f33600a546115f5565b7faef5ca58a7b9433fe3e5518615f7e11adbe08b852c47d0b61979164dc6945e7b600a5460405161082a91815260200190565b6000818152600260205260408120546001600160a01b0316806105615760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106b1565b610d2f611574565b60085460ff16610d815760405162461bcd60e51b815260206004820152600360248201527f452330000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b6119fa610d8d60095490565b10610dda5760405162461bcd60e51b815260206004820152600360248201527f452331000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b600854336000908152600c602052604090205460ff6101009092048216911610610e465760405162461bcd60e51b815260206004820152600360248201527f452332000000000000000000000000000000000000000000000000000000000060448201526064016106b1565b336000908152600c60205260408120805460ff1691610e6483612366565b91906101000a81548160ff021916908360ff16021790555050610e8b600980546001019055565b6000610e9660095490565b9050610ea233826115f5565b6040518181527fd630d8798d9ab9a91fda5b2404d8cecd6e494012b04c6f4f6565ba1ab563481490602001610bf8565b60078054610edf90612315565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0b90612315565b8015610f585780601f10610f2d57610100808354040283529160200191610f58565b820191906000526020600020905b815481529060010190602001808311610f3b57829003601f168201915b505050505081565b60006001600160a01b038216610fde5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016106b1565b506001600160a01b031660009081526003602052604090205490565b61100261151a565b610b18600061167a565b61101461151a565b610b186116e4565b60606001805461057690612315565b611036338383611753565b5050565b61104433836112b6565b6110b65760405162461bcd60e51b815260206004820152602e60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206e6f7220617070726f76656400000000000000000000000000000000000060648201526084016106b1565b6110c284848484611822565b50505050565b6110d061151a565b600b55565b60606110e0826111cc565b60006110ea6118ab565b9050600081511161110a5760405180602001604052806000815250611135565b80611114846118ba565b604051602001611125929190612467565b6040516020818303038152906040525b9392505050565b61114461151a565b6001600160a01b0381166111c05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106b1565b6111c98161167a565b50565b6000818152600260205260409020546001600160a01b03166111c95760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016106b1565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038416908117909155819061127d82610cc2565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112c283610cc2565b9050806001600160a01b0316846001600160a01b0316148061130957506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061132d5750836001600160a01b0316611322846105f9565b6001600160a01b0316145b949350505050565b826001600160a01b031661134882610cc2565b6001600160a01b0316146113c45760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016106b1565b6001600160a01b03821661143f5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106b1565b61144a600082611230565b6001600160a01b0383166000908152600360205260408120805460019290611473908490612496565b90915550506001600160a01b03821660009081526003602052604081208054600192906114a19084906124ad565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6006546001600160a01b03163314610b185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106b1565b60065474010000000000000000000000000000000000000000900460ff1615610b185760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016106b1565b6000826115ec85846119ec565b14949350505050565b611036828260405180602001604052806000815250611a39565b611617611ac2565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200161082a565b600680546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6116ec611574565b600680547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586116623390565b816001600160a01b0316836001600160a01b031614156117b55760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106b1565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61182d848484611335565b61183984848484611b2c565b6110c25760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106b1565b60606007805461057690612315565b6060816118fa57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611924578061190e8161242e565b915061191d9050600a836124db565b91506118fe565b60008167ffffffffffffffff81111561193f5761193f612049565b6040519080825280601f01601f191660200182016040528015611969576020820181803683370190505b5090505b841561132d5761197e600183612496565b915061198b600a866124ef565b6119969060306124ad565b60f81b8183815181106119ab576119ab612503565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506119e5600a866124db565b945061196d565b600081815b8451811015611a3157611a1d82868381518110611a1057611a10612503565b6020026020010151611cd9565b915080611a298161242e565b9150506119f1565b509392505050565b611a438383611d05565b611a506000848484611b2c565b6107525760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106b1565b60065474010000000000000000000000000000000000000000900460ff16610b185760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016106b1565b60006001600160a01b0384163b15611cce576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611b89903390899088908890600401612519565b602060405180830381600087803b158015611ba357600080fd5b505af1925050508015611bd3575060408051601f3d908101601f19168201909252611bd091810190612555565b60015b611c83573d808015611c01576040519150601f19603f3d011682016040523d82523d6000602084013e611c06565b606091505b508051611c7b5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106b1565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061132d565b506001949350505050565b6000818310611cf5576000828152602084905260409020611135565b5060009182526020526040902090565b6001600160a01b038216611d5b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106b1565b6000818152600260205260409020546001600160a01b031615611dc05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106b1565b6001600160a01b0382166000908152600360205260408120805460019290611de99084906124ad565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611e6b90612315565b90600052602060002090601f016020900481019282611e8d5760008555611ed3565b82601f10611ea65782800160ff19823516178555611ed3565b82800160010185558215611ed3579182015b82811115611ed3578235825591602001919060010190611eb8565b50611edf929150611ee3565b5090565b5b80821115611edf5760008155600101611ee4565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146111c957600080fd5b600060208284031215611f3857600080fd5b813561113581611ef8565b60005b83811015611f5e578181015183820152602001611f46565b838111156110c25750506000910152565b60008151808452611f87816020860160208601611f43565b601f01601f19169290920160200192915050565b6020815260006111356020830184611f6f565b600060208284031215611fc057600080fd5b5035919050565b80356001600160a01b0381168114611fde57600080fd5b919050565b60008060408385031215611ff657600080fd5b611fff83611fc7565b946020939093013593505050565b60008060006060848603121561202257600080fd5b61202b84611fc7565b925061203960208501611fc7565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561208857612088612049565b604052919050565b600060208083850312156120a357600080fd5b823567ffffffffffffffff808211156120bb57600080fd5b818501915085601f8301126120cf57600080fd5b8135818111156120e1576120e1612049565b8060051b91506120f284830161205f565b818152918301840191848101908884111561210c57600080fd5b938501935b8385101561212a57843582529385019390850190612111565b98975050505050505050565b6000806020838503121561214957600080fd5b823567ffffffffffffffff8082111561216157600080fd5b818501915085601f83011261217557600080fd5b81358181111561218457600080fd5b86602082850101111561219657600080fd5b60209290920196919550909350505050565b6000602082840312156121ba57600080fd5b813560ff8116811461113557600080fd5b6000602082840312156121dd57600080fd5b61113582611fc7565b600080604083850312156121f957600080fd5b61220283611fc7565b91506020830135801515811461221757600080fd5b809150509250929050565b6000806000806080858703121561223857600080fd5b61224185611fc7565b93506020612250818701611fc7565b935060408601359250606086013567ffffffffffffffff8082111561227457600080fd5b818801915088601f83011261228857600080fd5b81358181111561229a5761229a612049565b6122ac84601f19601f8401160161205f565b915080825289848285010111156122c257600080fd5b808484018584013760008482840101525080935050505092959194509250565b600080604083850312156122f557600080fd5b6122fe83611fc7565b915061230c60208401611fc7565b90509250929050565b600181811c9082168061232957607f821691505b6020821081141561234a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff81141561237d5761237d612350565b60010192915050565b600060208083526000845481600182811c9150808316806123a857607f831692505b8583108114156123c657634e487b7160e01b85526022600452602485fd5b8786018381526020018180156123e357600181146123f45761241f565b60ff1986168252878201965061241f565b60008b81526020902060005b8681101561241957815484820152908501908901612400565b83019750505b50949998505050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561246057612460612350565b5060010190565b60008351612479818460208801611f43565b83519083019061248d818360208801611f43565b01949350505050565b6000828210156124a8576124a8612350565b500390565b600082198211156124c0576124c0612350565b500190565b634e487b7160e01b600052601260045260246000fd5b6000826124ea576124ea6124c5565b500490565b6000826124fe576124fe6124c5565b500690565b634e487b7160e01b600052603260045260246000fd5b60006001600160a01b0380871683528086166020840152508360408301526080606083015261254b6080830184611f6f565b9695505050505050565b60006020828403121561256757600080fd5b815161113581611ef856fea26469706673582212209225f363e2cd994fb74ad7dfba203bc8fb8a84028e0348d48de26057c66c8fd564736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e61336558443664517435584162476e5633616632586d50335a6a556577416e32563442765a5a4459746a392f00000000000000000000