0x60806040526002805460ff1916905534801561001a57600080fd5b50611c188061002a6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806391d14854116100a2578063c4d66de811610071578063c4d66de8146103bb578063ca15c873146103e1578063d547741f146103fe578063e375b64e1461042a578063ec87621c146104b957610116565b806391d14854146103635780639559c0bd146103a3578063a217fddf146103ab578063b017a30f146103b357610116565b80634794b430116100e95780634794b4301461024f57806349f5124b14610257578063609c92b81461025f5780638274664f146102675780639010d07c1461032457610116565b8063150b7a021461011b578063248a9ca3146101c65780632f2ff15d146101f557806336568abe14610223575b600080fd5b6101a96004803603608081101561013157600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561016b57600080fd5b82018360208201111561017d57600080fd5b803590602001918460018302840111600160201b8311171561019e57600080fd5b5090925090506104c1565b604080516001600160e01b03199092168252519081900360200190f35b6101e3600480360360208110156101dc57600080fd5b50356104d2565b60408051918252519081900360200190f35b6102216004803603604081101561020b57600080fd5b50803590602001356001600160a01b03166104ea565b005b6102216004803603604081101561023957600080fd5b50803590602001356001600160a01b0316610556565b6101e36105b7565b6101e36105db565b6101e36105ff565b6102216004803603606081101561027d57600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111600160201b831117156102e357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061061d945050505050565b6103476004803603604081101561033a57600080fd5b5080359060200135610d51565b604080516001600160a01b039092168252519081900360200190f35b61038f6004803603604081101561037957600080fd5b50803590602001356001600160a01b0316610d78565b604080519115158252519081900360200190f35b6101e3610d96565b6101e3610d9b565b6101e3610da0565b610221600480360360208110156103d157600080fd5b50356001600160a01b0316610dc4565b6101e3600480360360208110156103f757600080fd5b5035610e83565b6102216004803603604081101561041457600080fd5b50803590602001356001600160a01b0316610e9a565b6102216004803603608081101561044057600080fd5b6001600160a01b0382358116926020810135821692604082013590921691810190608081016060820135600160201b81111561047b57600080fd5b82018360208201111561048d57600080fd5b803590602001918460018302840111600160201b831117156104ae57600080fd5b509092509050610ef3565b6101e36112ad565b630a85bd0160e11b95945050505050565b6000818152602081905260409020600201545b919050565b60008281526020819052604090206002015461050d906105086112d1565b610d78565b6105485760405162461bcd60e51b815260040180806020018281038252602f815260200180611aee602f913960400191505060405180910390fd5b61055282826112d6565b5050565b61055e6112d1565b6001600160a01b0316816001600160a01b0316146105ad5760405162461bcd60e51b815260040180806020018281038252602f815260200180611bb4602f913960400191505060405180910390fd5b6105528282611345565b7ff871896b17e9cb7a64941c62c188a4f5c621b86800e3d15452ece01ce56073df81565b7ff94915c6d1fd521cee85359239227480c7e8776d7caf1fc3bacad5c269b66a1481565b604080516545524337323160d01b8152905190819003600601902081565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902061064a816105086112d1565b6001906106ea5760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156106db5780601f106106b0576101008083540402835291602001916106db565b820191906000526020600020905b8154815290600101906020018083116106be57829003601f168201915b50509250505060405180910390fd5b5060606106fe6106f9846113b4565b6113d9565b9050606061071f8260018151811061071257fe5b60200260200101516113d9565b905060006107408260018151811061073357fe5b60200260200101516114c1565b90507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60001b6107768360008151811061073357fe5b14156108825760006001600160a01b03166107978360028151811061073357fe5b6001600160a01b0316146107dc5760405162461bcd60e51b8152600401808060200182810382526021815260200180611b936021913960400191505060405180910390fd5b856001600160a01b03166342842e0e30836107fd8660038151811061073357fe5b6040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561086557600080fd5b505af1158015610879573d6000803e3d6000fd5b50505050610d48565b7ff871896b17e9cb7a64941c62c188a4f5c621b86800e3d15452ece01ce56073df60001b6108b68360008151811061073357fe5b1415610a425760606108db846002815181106108ce57fe5b602002602001015161150f565b905060608180602001905160208110156108f457600080fd5b8101908080516040519392919084600160201b82111561091357600080fd5b90830190602082018581111561092857600080fd5b82518660208202830111600160201b8211171561094457600080fd5b82525081516020918201928201910280838360005b83811015610971578181015183820152602001610959565b50505050905001604052505050905060008151905060005b8181101561087957896001600160a01b03166342842e0e30878685815181106109ae57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b158015610a1e57600080fd5b505af1158015610a32573d6000803e3d6000fd5b5050600190920191506109899050565b7ff94915c6d1fd521cee85359239227480c7e8776d7caf1fc3bacad5c269b66a1460001b610a768360008151811061073357fe5b1415610d115760006001600160a01b0316610a978360028151811061073357fe5b6001600160a01b031614610adc5760405162461bcd60e51b8152600401808060200182810382526021815260200180611b936021913960400191505060405180910390fd5b60008690506000610af38460038151811061073357fe5b60408051632142170760e11b81523060048201526001600160a01b038681166024830152604482018490529151929350908416916342842e0e9160648082019260009290919082900301818387803b158015610b4e57600080fd5b505af1158015610b62573d6000803e3d6000fd5b505050506060610b78866002815181106108ce57fe5b90506060818060200190516020811015610b9157600080fd5b8101908080516040519392919084600160201b821115610bb057600080fd5b908301906020820185811115610bc557600080fd5b8251600160201b811182820188101715610bde57600080fd5b82525081516020918201929091019080838360005b83811015610c0b578181015183820152602001610bf3565b50505050905090810190601f168015610c385780820380516001836020036101000a031916815260200191505b5060408181526349b9530b60e01b825260048201898152602483019182528651604484015286519697506001600160a01b038b16966349b9530b96508a9550889450909260640190602085019080838360005b83811015610ca3578181015183820152602001610c8b565b50505050905090810190601f168015610cd05780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015610cf057600080fd5b505af1158015610d04573d6000803e3d6000fd5b5050505050505050610d48565b60405162461bcd60e51b8152600401808060200182810382526022815260200180611b716022913960400191505060405180910390fd5b50505050505050565b6000828152602081905260408120610d6f908363ffffffff61158c16565b90505b92915050565b6000828152602081905260408120610d6f908363ffffffff61159816565b601481565b600081565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef81565b60025460ff1615610e0d576040805162461bcd60e51b815260206004820152600e60248201526d185b1c9958591e481a5b9a5d195960921b604482015290519081900360640190fd5b610e3d6040518060400160405280600f81526020016e45524337323150726564696361746560881b8152506115ad565b610e48600082610548565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c019020610e739082610548565b506002805460ff19166001179055565b6000818152602081905260408120610d729061164b565b600082815260208190526040902060020154610eb8906105086112d1565b6105ad5760405162461bcd60e51b8152600401808060200182810382526030815260200180611b1d6030913960400191505060405180910390fd5b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c019020610f20816105086112d1565b600190610f865760405162461bcd60e51b81526020600482019081528254600260001961010060018416150201909116046024830181905290918291604490910190849080156106db5780601f106106b0576101008083540402835291602001916106db565b50602082141561106557600083836020811015610fa257600080fd5b5060408051913580835290519092506001600160a01b038088169289821692918b16917f8357472e13612a8c3d6f3e9d71fbba8a78ab77dbdcc7fcf3b7b645585f0bbbfc9181900360200190a460408051632142170760e11b81526001600160a01b038981166004830152306024830152604482018490529151918716916342842e0e9160648082019260009290919082900301818387803b15801561104757600080fd5b505af115801561105b573d6000803e3d6000fd5b50505050506112a5565b60608383602081101561107757600080fd5b810190602081018135600160201b81111561109157600080fd5b8201836020820111156110a357600080fd5b803590602001918460208302840111600160201b831117156110c457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050509050846001600160a01b0316866001600160a01b0316886001600160a01b03167f5345c2beb0e49c805f42bb70c4ec5c3c3d9680ce45b8f4529c028d5f3e0f7a0d846040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015611190578181015183820152602001611178565b505050509050019250505060405180910390a4805160148111156111e55760405162461bcd60e51b8152600401808060200182810382526024815260200180611b4d6024913960400191505060405180910390fd5b60005b818110156112a157866001600160a01b03166342842e0e8a3086858151811061120d57fe5b60200260200101516040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b03168152602001836001600160a01b03166001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561127d57600080fd5b505af1158015611291573d6000803e3d6000fd5b5050600190920191506111e89050565b5050505b505050505050565b604080516b4d414e414745525f524f4c4560a01b8152905190819003600c01902081565b335b90565b60008281526020819052604090206112f4908263ffffffff61165616565b15610552576113016112d1565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020611363908263ffffffff61166b16565b15610552576113706112d1565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6113bc611a19565b506040805180820190915281518152602082810190820152919050565b60606113e482611680565b6113ed57600080fd5b60006113f8836116ba565b905060608167ffffffffffffffff8111801561141357600080fd5b5060405190808252806020026020018201604052801561144d57816020015b61143a611a19565b8152602001906001900390816114325790505b509050600061145f8560200151611716565b60208601510190506000805b848110156114b65761147c83611779565b915060405180604001604052808381526020018481525084828151811061149f57fe5b60209081029190910101529181019160010161146b565b509195945050505050565b8051600090158015906114d657508151602110155b6114df57600080fd5b6000806114eb84611812565b8151919350915060208210156115075760208290036101000a90045b949350505050565b805160609061151d57600080fd5b60008061152984611812565b9150915060608167ffffffffffffffff8111801561154657600080fd5b506040519080825280601f01601f191660200182016040528015611571576020820181803683370190505b50905060208101611583848285611838565b50949350505050565b6000610d6f8383611889565b6000610d6f836001600160a01b0384166118ed565b806040516020018082805190602001908083835b602083106115e05780518252601f1990920191602091820191016115c1565b51815160209384036101000a60001901801990921691161790527f3a20494e53554646494349454e545f5045524d495353494f4e530000000000009190930190815260408051808303600519018152601a909201905280516105529550600194509201919050611a33565b6000610d7282611905565b6000610d6f836001600160a01b038416611909565b6000610d6f836001600160a01b038416611953565b8051600090611691575060006104e5565b6020820151805160001a9060c08210156116b0576000925050506104e5565b5060019392505050565b80516000906116cb575060006104e5565b600080905060006116df8460200151611716565b602085015185519181019250015b8082101561170d576116fe82611779565b600190930192909101906116ed565b50909392505050565b8051600090811a60808110156117305760009150506104e5565b60b881108061174b575060c0811080159061174b575060f881105b1561175a5760019150506104e5565b60c081101561176e5760b5190190506104e5565b60f5190190506104e5565b80516000908190811a6080811015611794576001915061180b565b60b88110156117a957607e198101915061180b565b60c08110156117d65760b78103600185019450806020036101000a8551046001820181019350505061180b565b60f88110156117eb5760be198101915061180b565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b60008060006118248460200151611716565b602085015194519481019594039392505050565b8061184257611884565b5b60208110611862578251825260209283019290910190601f1901611843565b8015611884578251825160208390036101000a60001901801990921691161782525b505050565b815460009082106118cb5760405162461bcd60e51b8152600401808060200182810382526022815260200180611acc6022913960400191505060405180910390fd5b8260000182815481106118da57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b600061191583836118ed565b61194b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d72565b506000610d72565b60008181526001830160205260408120548015611a0f578354600019808301919081019060009087908390811061198657fe5b90600052602060002001549050808760000184815481106119a357fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806119d357fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610d72565b6000915050610d72565b604051806040016040528060008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611a7457805160ff1916838001178555611aa1565b82800160010185558215611aa1579182015b82811115611aa1578251825591602001919060010190611a86565b50611aad929150611ab1565b5090565b6112d391905b80821115611aad5760008155600101611ab756fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433732315072656469636174653a20455843454544535f42415443485f4c494d49544552433732315072656469636174653a20494e56414c49445f5349474e41545552454552433732315072656469636174653a20494e56414c49445f5245434549564552416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220b097c51815ee053708f0d10b8c663491702584aeb7ff1c02c908aed3d0ffc84164736f6c63430006060033