60806040526009805460ff19169055348015610019575f80fd5b50600280546001600160a01b0319908116339081179092556003805490911673547f11ecf7f732359a09390e1075108b0fdc409a17905560056004819055600a9055683635c9adc5dea0000060078190555f828152602081815260408083208490555192835290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36117db806100b95f395ff3fe60806040526004361061017e575f3560e01c80636c11bcd3116100cd578063c9567bf911610087578063dd62ed3e11610062578063dd62ed3e1461046f578063e5dc6b21146104b3578063f3290d75146104d2578063fd43e461146104f1575f80fd5b8063c9567bf914610434578063cae9ca5114610448578063d0febe4c14610467575f80fd5b80636c11bcd31461036057806370a082311461037f57806395d89b41146103b3578063a457c2d7146103e2578063a9059cbb14610401578063b638b99d14610420575f80fd5b806338458e9b1161013857806342966c681161011357806342966c68146102f457806355e2e9741461031357806356a060a214610332578063691f224f1461034b575f80fd5b806338458e9b146102a257806339509351146102b657806341566585146102d5575f80fd5b806306fdde03146101b1578063095ea7b3146101fb57806318160ddd1461022a57806323b872dd1461024857806324024efd14610267578063313ce5671461027c575f80fd5b366101ad576006546101909034610505565b600681905567016345785d8a0000116101ab576101ab610528565b005b5f80fd5b3480156101bc575f80fd5b506101e5604051806040016040528060098152602001682127a9a99021b7b4b760b91b81525081565b6040516101f2919061146c565b60405180910390f35b348015610206575f80fd5b5061021a610215366004611499565b610645565b60405190151581526020016101f2565b348015610235575f80fd5b506007545b6040519081526020016101f2565b348015610253575f80fd5b5061021a6102623660046114c1565b6106bc565b348015610272575f80fd5b5061023a60055481565b348015610287575f80fd5b50610290600981565b60405160ff90911681526020016101f2565b3480156102ad575f80fd5b5060055461023a565b3480156102c1575f80fd5b5061021a6102d0366004611499565b6109c2565b3480156102e0575f80fd5b506101ab6102ef3660046114fa565b610a59565b3480156102ff575f80fd5b506101ab61030e366004611513565b610ada565b34801561031e575f80fd5b506101ab61032d366004611513565b610be2565b34801561033d575f80fd5b5060095461021a9060ff1681565b348015610356575f80fd5b5061023a60045481565b34801561036b575f80fd5b506101ab61037a366004611513565b610c85565b34801561038a575f80fd5b5061023a6103993660046114fa565b6001600160a01b03165f9081526020819052604090205490565b3480156103be575f80fd5b506101e560405180604001604052806004815260200163424f535360e01b81525081565b3480156103ed575f80fd5b5061021a6103fc366004611499565b610e4c565b34801561040c575f80fd5b5061021a61041b366004611499565b610e8d565b34801561042b575f80fd5b506101ab61106b565b34801561043f575f80fd5b506101ab61109f565b348015610453575f80fd5b5061021a61046236600461153e565b611100565b6101ab6111cb565b34801561047a575f80fd5b5061023a610489366004611602565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156104be575f80fd5b506101ab6104cd366004611513565b6112a1565b3480156104dd575f80fd5b506101ab6104ec3660046114fa565b611344565b3480156104fc575f80fd5b5060045461023a565b5f806105118385611647565b90508381101561051f575f80fd5b90505b92915050565b67016345785d8a0000600654101561059f5760405162461bcd60e51b815260206004820152602f60248201527f4e6f20616363756d756c6174656420455448206f72206e6f742072656163686560448201526e19081d1a19481d1a1c995cda1bdb19608a1b60648201526084015b60405180910390fd5b600680545f918290556003546040519192916001600160a01b039091169083908381818185875af1925050503d805f81146105f5576040519150601f19603f3d011682016040523d82523d5f602084013e6105fa565b606091505b50509050806106415760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610596565b5050565b5f6001600160a01b038316610658575f80fd5b335f8181526001602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a350600192915050565b335f8181526008602052604081205490919060ff16156106ee5760405162461bcd60e51b81526004016105969061165a565b6001600160a01b0385165f90815260086020526040902054859060ff16156107285760405162461bcd60e51b81526004016105969061165a565b6001600160a01b0385165f90815260086020526040902054859060ff16156107625760405162461bcd60e51b81526004016105969061165a565b6001600160a01b0387165f90815260208190526040902054851115610785575f80fd5b6001600160a01b0387165f9081526001602090815260408083203384529091529020548511156107b3575f80fd5b6001600160a01b0386166107c5575f80fd5b6001600160a01b0387165f9081526008602052604090205460ff16156108255760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610596565b335f9081526008602052604090205460ff161561087d5760405162461bcd60e51b815260206004820152601660248201527514dc195b99195c881a5cc8189b1858dadb1a5cdd195960521b6044820152606401610596565b6001600160a01b0386165f9081526008602052604090205460ff16156108e05760405162461bcd60e51b8152602060048201526018602482015277149958da5c1a595b9d081a5cc8189b1858dadb1a5cdd195960421b6044820152606401610596565b6001600160a01b0387165f9081526020819052604090205461090290866113c1565b6001600160a01b038089165f9081526020819052604080822093909355908816815220546109309086610505565b6001600160a01b038088165f9081526020818152604080832094909455918a16815260018252828120338252909152205461096b90866113c1565b6001600160a01b038881165f81815260016020908152604080832033845282529182902094909455518881529189169290915f80516020611786833981519152910160405180910390a35060019695505050505050565b5f6001600160a01b0383166109d5575f80fd5b335f9081526001602090815260408083206001600160a01b0387168452909152902054610a03908390611647565b335f8181526001602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016106ab565b6002546001600160a01b03163314610a835760405162461bcd60e51b81526004016105969061168a565b6001600160a01b0381165f81815260086020908152604091829020805460ff1916905590519182527fb6cb92ab3b64acc8266d35aa965ecc56979942efea2a84f6485ea6a19dbb465291015b60405180910390a150565b5f8111610af95760405162461bcd60e51b8152600401610596906116d8565b335f90815260208190526040902054811115610b4e5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610596565b335f90815260208190526040902054610b6790826113c1565b335f90815260208190526040902055600754610b8390826113c1565b6007556040518181525f9033905f805160206117868339815191529060200160405180910390a360405181815233907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca59060200160405180910390a250565b6002546001600160a01b03163314610c0c5760405162461bcd60e51b81526004016105969061168a565b6032811115610c505760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420746178207261746560801b6044820152606401610596565b60048190556040518181527fae77d4346a9bb794e9a2ca0c9a5582253727c54d60944d10c70cdb886fae872290602001610acf565b60095460ff16610cd15760405162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b6044820152606401610596565b5f8111610cf05760405162461bcd60e51b8152600401610596906116d8565b335f90815260208190526040902054811115610d455760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610596565b5f610d52826005546113d8565b90505f610d5f83836113c1565b335f90815260208190526040902054909150610d7b90846113c1565b335f90815260208190526040808220929092553081522054610d9d9084610505565b305f81815260208181526040918290209390935551858152909133915f80516020611786833981519152910160405180910390a3335f90815260208190526040902054610dea9082610505565b335f81815260208181526040918290209390935551838152909130915f8051602061178683398151915291015b60405180910390a3600654610e2c9083610505565b600681905567016345785d8a000011610e4757610e47610528565b505050565b5f6001600160a01b038316610e5f575f80fd5b335f9081526001602090815260408083206001600160a01b0387168452909152902054610a03908390611700565b335f8181526008602052604081205490919060ff1615610ebf5760405162461bcd60e51b81526004016105969061165a565b6001600160a01b0384165f90815260086020526040902054849060ff1615610ef95760405162461bcd60e51b81526004016105969061165a565b335f90815260208190526040902054841115610f13575f80fd5b6001600160a01b038516610f25575f80fd5b335f9081526008602052604090205460ff1615610f7c5760405162461bcd60e51b815260206004820152601560248201527414d95b99195c881a5cc8189b1858dadb1a5cdd1959605a1b6044820152606401610596565b6001600160a01b0385165f9081526008602052604090205460ff1615610fdf5760405162461bcd60e51b8152602060048201526018602482015277149958da5c1a595b9d081a5cc8189b1858dadb1a5cdd195960421b6044820152606401610596565b335f90815260208190526040902054610ff890856113c1565b335f90815260208190526040808220929092556001600160a01b038716815220546110239085610505565b6001600160a01b0386165f81815260208181526040918290209390935551868152909133915f80516020611786833981519152910160405180910390a3506001949350505050565b6002546001600160a01b031633146110955760405162461bcd60e51b81526004016105969061168a565b61109d610528565b565b6002546001600160a01b031633146110c95760405162461bcd60e51b81526004016105969061168a565b6009805460ff191660011790556040517fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f905f90a1565b335f8181526001602090815260408083206001600160a01b038816808552925280832086905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061115a9087815260200190565b60405180910390a3604051638f4ffcb160e01b81526001600160a01b03851690638f4ffcb190611194903390879030908890600401611713565b5f604051808303815f87803b1580156111ab575f80fd5b505af11580156111bd573d5f803e3d5ffd5b506001979650505050505050565b60095460ff166112175760405162461bcd60e51b8152602060048201526017602482015276151c98591a5b99c81a5cc81b9bdd081bdc195b881e595d604a1b6044820152606401610596565b5f34116112365760405162461bcd60e51b8152600401610596906116d8565b5f3490505f611247826004546113d8565b90505f61125483836113c1565b335f908152602081905260409020549091506112709082610505565b335f81815260208181526040808320949094559251848152919290915f805160206117868339815191529101610e17565b6002546001600160a01b031633146112cb5760405162461bcd60e51b81526004016105969061168a565b603281111561130f5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420746178207261746560801b6044820152606401610596565b60058190556040518181527f2c96581632d8419de551d8de650a261d72b39b295859b7618a0ff837860b33e290602001610acf565b6002546001600160a01b0316331461136e5760405162461bcd60e51b81526004016105969061168a565b6001600160a01b0381165f81815260086020908152604091829020805460ff1916600117905590519182527fcdce62d5847573e30fb5827d632433a34c6e49c3b5c7a5bf8e9f5f2dcf75fe4c9101610acf565b5f828211156113ce575f80fd5b61051f8284611700565b5f806113e484846113f9565b90506113f160648261174f565b949350505050565b5f825f0361140857505f610522565b5f611413838561176e565b905082611420858361174f565b1461051f575f80fd5b5f81518084525f5b8181101561144d57602081850181015186830182015201611431565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f61051f6020830184611429565b80356001600160a01b0381168114611494575f80fd5b919050565b5f80604083850312156114aa575f80fd5b6114b38361147e565b946020939093013593505050565b5f805f606084860312156114d3575f80fd5b6114dc8461147e565b92506114ea6020850161147e565b9150604084013590509250925092565b5f6020828403121561150a575f80fd5b61051f8261147e565b5f60208284031215611523575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f805f60608486031215611550575f80fd5b6115598461147e565b925060208401359150604084013567ffffffffffffffff8082111561157c575f80fd5b818601915086601f83011261158f575f80fd5b8135818111156115a1576115a161152a565b604051601f8201601f19908116603f011681019083821181831017156115c9576115c961152a565b816040528281528960208487010111156115e1575f80fd5b826020860160208301375f6020848301015280955050505050509250925092565b5f8060408385031215611613575f80fd5b61161c8361147e565b915061162a6020840161147e565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561052257610522611633565b6020808252601690820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b604082015260600190565b6020808252602e908201527f4f6e6c792074686520636f6e7472616374206f776e65722063616e2063616c6c60408201526d103a3434b990333ab731ba34b7b760911b606082015260800190565b6020808252600e908201526d125b9d985b1a5908185b5bdd5b9d60921b604082015260600190565b8181038181111561052257610522611633565b6001600160a01b03858116825260208201859052831660408201526080606082018190525f9061174590830184611429565b9695505050505050565b5f8261176957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176105225761052261163356feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a8c537b1cbfc58b6c09d9eff9f530c6b508f6489ce5f0ccc7dc7627c47be22dd64736f6c63430008140033