60806040523480156200001157600080fd5b506040805180820182526007808252661a59db9bdc995960ca1b602080840182815285518087019096529285528401528151919291620000549160039162000073565b5080516200006a90600490602084019062000073565b50505062000156565b828054620000819062000119565b90600052602060002090601f016020900481019282620000a55760008555620000f0565b82601f10620000c057805160ff1916838001178555620000f0565b82800160010185558215620000f0579182015b82811115620000f0578251825591602001919060010190620000d3565b50620000fe92915062000102565b5090565b5b80821115620000fe576000815560010162000103565b600181811c908216806200012e57607f821691505b602082108114156200015057634e487b7160e01b600052602260045260246000fd5b50919050565b611c5e80620001666000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c80636d73e669116100e357806395d89b411161008c578063a9059cbb11610066578063a9059cbb1461037f578063dd62ed3e14610392578063e5a61679146103cb57600080fd5b806395d89b41146103515780639dc29fac14610359578063a457c2d71461036c57600080fd5b8063827f13f4116100bd578063827f13f4146103055780638a0dcbf61461030d5780638a1099731461034957600080fd5b80636d73e6691461028657806370a08231146102995780637b9d7d49146102c257600080fd5b8063313ce567116101455780635ce6ed411161011f5780635ce6ed41146102605780635e742e7b1461026b5780636a86da191461027357600080fd5b8063313ce5671461022b578063395093511461023a57806340c10f191461024d57600080fd5b806319542f001161017657806319542f00146101f057806323b872dd146102055780632d3456701461021857600080fd5b806306fdde031461019d578063095ea7b3146101bb57806318160ddd146101de575b600080fd5b6101a56103de565b6040516101b291906117c7565b60405180910390f35b6101ce6101c9366004611838565b610470565b60405190151581526020016101b2565b6002545b6040519081526020016101b2565b6102036101fe366004611927565b610488565b005b6101ce610213366004611a43565b610589565b610203610226366004611a7f565b6105f2565b604051601281526020016101b2565b6101ce610248366004611838565b61077b565b61020361025b366004611838565b6107ba565b600b5460ff166101ce565b61020361087f565b610203610281366004611a9a565b610942565b610203610294366004611a7f565b610a34565b6101e26102a7366004611a7f565b6001600160a01b031660009081526020819052604090205490565b6102036102d0366004611a7f565b600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b6007546101e2565b6101ce61031b366004611ab7565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b610203610bc1565b6101a5610c87565b610203610367366004611838565b610c96565b6101ce61037a366004611838565b610d57565b6101ce61038d366004611838565b610e0c565b6101e26103a0366004611ab7565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102036103d9366004611aea565b610e73565b6060600980546103ed90611b71565b80601f016020809104026020016040519081016040528092919081815260200182805461041990611b71565b80156104665780601f1061043b57610100808354040283529160200191610466565b820191906000526020600020905b81548152906001019060200180831161044957829003601f168201915b5050505050905090565b60003361047e818585610f37565b5060019392505050565b60055460ff16156104e05760405162461bcd60e51b815260206004820152601260248201527f69734e6f74496e697469616c697a61626c65000000000000000000000000000060448201526064015b60405180910390fd5b6104ec85858585610e73565b8051600d8190556000905b808210156105735782828151811061051157610511611bac565b6020908102919091018101516000848152600c909252604090912080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790558161056b81611bd8565b9250506104f7565b50506005805460ff191660011790555050505050565b60085460009060ff16156105df5760405162461bcd60e51b815260206004820152600e60248201527f5f696e507269766174654d6f646500000000000000000000000000000000000060448201526064016104d7565b6105ea84848461108f565b949350505050565b600554604051630935e01b60e21b81526001600160a01b0383811660048301523392610100900416906324d7806c9060240160206040518083038186803b15801561063c57600080fd5b505afa158015610650573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106749190611bf3565b6106ac5760405162461bcd60e51b815260206004820152600960248201526837b7363ca0b236b4b760b91b60448201526064016104d7565b6001600160a01b0380821660009081526006602090815260408083209386168352929052205460ff166107215760405162461bcd60e51b815260206004820152601160248201527f6f6e6c79417070726f76656441646d696e00000000000000000000000000000060448201526064016104d7565b6001600160a01b03808216600081815260066020908152604080832094871680845294909152808220805460ff19169055517f64fe5b8de88c898e9178daabf0fa372d2d65ff14649e0f7e9f35b3a4b85ac08d9190a35050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061047e90829086906107b5908790611c10565b610f37565b600554604051630935e01b60e21b81523360048201526101009091046001600160a01b0316906324d7806c9060240160206040518083038186803b15801561080157600080fd5b505afa158015610815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108399190611bf3565b6108715760405162461bcd60e51b815260206004820152600960248201526837b7363ca0b236b4b760b91b60448201526064016104d7565b61087b82826110a8565b5050565b600554604051630935e01b60e21b81523360048201526101009091046001600160a01b0316906324d7806c9060240160206040518083038186803b1580156108c657600080fd5b505afa1580156108da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108fe9190611bf3565b6109365760405162461bcd60e51b815260206004820152600960248201526837b7363ca0b236b4b760b91b60448201526064016104d7565b600b805460ff19169055565b6005546040517f2f54bf6e0000000000000000000000000000000000000000000000000000000081523360048201526101009091046001600160a01b031690632f54bf6e90602401602060405180830381600087803b1580156109a457600080fd5b505af11580156109b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc9190611bf3565b610a285760405162461bcd60e51b815260206004820152600960248201527f6f6e6c794f776e6572000000000000000000000000000000000000000000000060448201526064016104d7565b610a318161117b565b50565b600554604051630935e01b60e21b81526001600160a01b0383811660048301523392610100900416906324d7806c9060240160206040518083038186803b158015610a7e57600080fd5b505afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab69190611bf3565b610aee5760405162461bcd60e51b815260206004820152600960248201526837b7363ca0b236b4b760b91b60448201526064016104d7565b6001600160a01b0380821660009081526006602090815260408083209386168352929052205460ff1615610b645760405162461bcd60e51b815260206004820152601460248201527f6f6e6c794e6f74417070726f76656441646d696e00000000000000000000000060448201526064016104d7565b6001600160a01b03808216600081815260066020908152604080832094871680845294909152808220805460ff19166001179055517fd464f74183d84404c711fa41de3925148ced6324ad6077c3ef1773b25fd1ae539190a35050565b600554604051630935e01b60e21b81523360048201526101009091046001600160a01b0316906324d7806c9060240160206040518083038186803b158015610c0857600080fd5b505afa158015610c1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c409190611bf3565b610c785760405162461bcd60e51b815260206004820152600960248201526837b7363ca0b236b4b760b91b60448201526064016104d7565b600b805460ff19166001179055565b6060600a80546103ed90611b71565b600554604051630935e01b60e21b81523360048201526101009091046001600160a01b0316906324d7806c9060240160206040518083038186803b158015610cdd57600080fd5b505afa158015610cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d159190611bf3565b610d4d5760405162461bcd60e51b815260206004820152600960248201526837b7363ca0b236b4b760b91b60448201526064016104d7565b61087b82826111c2565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610df45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f00000000000000000000000000000000000000000000000000000060648201526084016104d7565b610e018286868403610f37565b506001949350505050565b60085460009060ff1615610e625760405162461bcd60e51b815260206004820152600e60248201527f5f696e507269766174654d6f646500000000000000000000000000000000000060448201526064016104d7565b610e6c8383611343565b9392505050565b60055460ff1615610ec65760405162461bcd60e51b815260206004820152601260248201527f69734e6f74496e697469616c697a61626c65000000000000000000000000000060448201526064016104d7565b6005805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b03871602179055610efc8361117b565b8151610f0f90600990602085019061172e565b508051610f2390600a90602084019061172e565b50506005805460ff19166001179055505050565b6001600160a01b038316610fb25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104d7565b6001600160a01b03821661102e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016104d7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60003361109d858285611351565b610e018585856113e3565b6001600160a01b0382166110fe5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104d7565b61110a600083836115e1565b806002600082825461111c9190611c10565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361087b6000838361169e565b6008805460ff19168215159081179091556040519081527f103ae9832f052879845a50017fc76388964d64ed04d8246c05c222d6a2d772689060200160405180910390a150565b6001600160a01b03821661123e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016104d7565b61124a826000836115e1565b6001600160a01b038216600090815260208190526040902054818110156112d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f636500000000000000000000000000000000000000000000000000000000000060648201526084016104d7565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361133e8360008461169e565b505050565b60003361047e8185856113e3565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146113dd57818110156113d05760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016104d7565b6113dd8484848403610f37565b50505050565b6001600160a01b03831661145f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016104d7565b6001600160a01b0382166114db5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016104d7565b6114e68383836115e1565b6001600160a01b038316600090815260208190526040902054818110156115755760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e6365000000000000000000000000000000000000000000000000000060648201526084016104d7565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113dd84848461169e565b600d546000905b80821015611697576000828152600c6020526040908190205490517f7cbab1c70000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905290911690637cbab1c790606401600060405180830381600087803b15801561166c57600080fd5b505af1158015611680573d6000803e3d6000fd5b50505050818061168f90611bd8565b9250506115e8565b5050505050565b600b5460ff161561133e5761133e826116cc846001600160a01b031660009081526020819052604090205490565b600754811180156116e2575063ffffffff823b16155b1561087b5760078190556040518181526001600160a01b038316907f02140af1dc14eac0eddf823c0eb8cdd4ecb788803ed90ead2d2238b72bbb400c9060200160405180910390a25050565b82805461173a90611b71565b90600052602060002090601f01602090048101928261175c57600085556117a2565b82601f1061177557805160ff19168380011785556117a2565b828001600101855582156117a2579182015b828111156117a2578251825591602001919060010190611787565b506117ae9291506117b2565b5090565b5b808211156117ae57600081556001016117b3565b600060208083528351808285015260005b818110156117f4578581018301518582016040015282016117d8565b81811115611806576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461183357600080fd5b919050565b6000806040838503121561184b57600080fd5b6118548361181c565b946020939093013593505050565b8015158114610a3157600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156118af576118af611870565b604052919050565b600082601f8301126118c857600080fd5b813567ffffffffffffffff8111156118e2576118e2611870565b6118f5601f8201601f1916602001611886565b81815284602083860101111561190a57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561193f57600080fd5b6119488661181c565b945060208087013561195981611862565b9450604087013567ffffffffffffffff8082111561197657600080fd5b6119828a838b016118b7565b9550606089013591508082111561199857600080fd5b6119a48a838b016118b7565b945060808901359150808211156119ba57600080fd5b818901915089601f8301126119ce57600080fd5b8135818111156119e0576119e0611870565b8060051b91506119f1848301611886565b818152918301840191848101908c841115611a0b57600080fd5b938501935b83851015611a3057611a218561181c565b82529385019390850190611a10565b8096505050505050509295509295909350565b600080600060608486031215611a5857600080fd5b611a618461181c565b9250611a6f6020850161181c565b9150604084013590509250925092565b600060208284031215611a9157600080fd5b610e6c8261181c565b600060208284031215611aac57600080fd5b8135610e6c81611862565b60008060408385031215611aca57600080fd5b611ad38361181c565b9150611ae16020840161181c565b90509250929050565b60008060008060808587031215611b0057600080fd5b611b098561181c565b93506020850135611b1981611862565b9250604085013567ffffffffffffffff80821115611b3657600080fd5b611b42888389016118b7565b93506060870135915080821115611b5857600080fd5b50611b65878288016118b7565b91505092959194509250565b600181811c90821680611b8557607f821691505b60208210811415611ba657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611bec57611bec611bc2565b5060010190565b600060208284031215611c0557600080fd5b8151610e6c81611862565b60008219821115611c2357611c23611bc2565b50019056fea2646970667358221220c6a21f037d8538185313ca3d9fe554b8c26b7909b18ea63ab820cf24128d736c64736f6c63430008080033