//
0x6080604052348015600f57600080fd5b50600080546001600160a01b03191633179055612883806100316000396000f3fe6080604052600436106100a05760003560e01c806370c16b981161006457806370c16b98146101cd5780637c3a2473146101ff57806394590cec1461021f5780639e281a9814610259578063e904399d14610279578063f8b2cb4f146102ad57600080fd5b80632d2ae1c1146100ac5780634faee9e2146100e2578063590e1ae3146101315780635ecb16cd1461013b57806366298ecb1461015b57600080fd5b366100a757005b600080fd5b3480156100b857600080fd5b506100cc6100c7366004611f02565b6102db565b6040516100d9919061200e565b60405180910390f35b3480156100ee57600080fd5b506101026100fd366004612021565b610461565b6040516100d9949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b610139610611565b005b34801561014757600080fd5b50610139610156366004611f02565b610674565b34801561016757600080fd5b5061017b610176366004612021565b6107c5565b60408051998a5260208a01989098526001600160a01b0396871697890197909752949093166060870152608086019190915260a0850152151560c084015260e0830152610100820152610120016100d9565b3480156101d957600080fd5b506101ed6101e8366004612021565b610c08565b6040516100d99695949392919061203e565b34801561020b57600080fd5b5061013961021a3660046120cf565b6110e0565b34801561022b57600080fd5b5061023f61023a366004612118565b61118e565b6040805160029390930b83529015156020830152016100d9565b34801561026557600080fd5b506101396102743660046120cf565b611405565b34801561028557600080fd5b50610299610294366004612021565b61146e565b6040516100d99897969594939291906121dd565b3480156102b957600080fd5b506102cd6102c8366004612021565b611ab3565b6040519081526020016100d9565b60606000825167ffffffffffffffff8111156102f9576102f9611ecc565b604051908082528060200260200182016040528015610322578160200160208202803683370190505b50905060005b835181101561045a57600084828151811061034557610345612291565b6020026020010151905084828151811061036157610361612291565b60200260200101516001600160a01b031673a00744882684c3e4747faefd68d283ea44099d036001600160a01b031614610420576040516370a0823160e01b81523060048201526001600160a01b038216906370a0823190602401602060405180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd91906122a7565b83838151811061040f5761040f612291565b602002602001018181525050610451565b60005483516001600160a01b03909116319084908490811061044457610444612291565b6020026020010181815250505b50600101610328565b5092915050565b60008060008060006126f290506000866001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d291906122c0565b905073fb1e9b0f32e98164286972142ecc921b7dd786876001600160a01b038216148061051b5750730a753dd1afde272a2d4bf55df6165687442015776001600160a01b038216145b15610526576126f791505b6000876001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610566573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058a91906122c0565b9050600080896001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f19190612308565b506001600160701b039182169c91169a5092985093965090945050505050565b33739c4aba92384d723ca81544225366254baf3de4e41461063157600080fd5b604051739c4aba92384d723ca81544225366254baf3de4e4904780156108fc02916000818181858888f19350505050158015610671573d6000803e3d6000fd5b50565b33739c4aba92384d723ca81544225366254baf3de4e41461069457600080fd5b60005b81518110156107c15760008282815181106106b4576106b4612291565b60209081029190910101516040516370a0823160e01b81523060048201529091506001600160a01b0382169063a9059cbb90739c4aba92384d723ca81544225366254baf3de4e49083906370a0823190602401602060405180830381865afa158015610724573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074891906122a7565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610793573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b7919061234b565b5050600101610697565b5050565b6000806000806000806000806000610836604051806101200160405280600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160001515815260200160008152602001600081525090565b8a6001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610874573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089891906122c0565b81604001906001600160a01b031690816001600160a01b0316815250508a6001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091791906122c0565b81606001906001600160a01b031690816001600160a01b03168152505080604001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099a9190612379565b6109a590600a612491565b81608001818152505080606001516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a149190612379565b610a1f90600a612491565b8160a00181815250508a6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610a66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8a9190612308565b506001600160701b0390811660208085019190915291168252604080516322be3de160e01b815290516001600160a01b038e16926322be3de192600480820193918290030181865afa158015610ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b08919061234b565b15801560c0830152610b3757610b308160000151826020015183608001518460a00151611b27565b6101008201525b60c0810151604051632895a2f560e11b81529015156004820152739442e8d017bb3dc2ba35d75204211e60f86ff0f89063512b45ea90602401602060405180830381865afa158015610b8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb191906122a7565b8160e0018181525050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509193959799909294969850565b6000806060806060600080876001600160a01b0316635fd65f0f6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7591906124a0565b50509450505050506000886001600160a01b0316630ba819596040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce191906122a7565b905060036001600160a01b038a167389963fcd25cd3b369a2e0642521bca7cf0b9d54703610d0d575060045b60008167ffffffffffffffff811115610d2857610d28611ecc565b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b50905060008267ffffffffffffffff811115610d6f57610d6f611ecc565b604051908082528060200260200182016040528015610d98578160200160208202803683370190505b50905060008367ffffffffffffffff811115610db657610db6611ecc565b604051908082528060200260200182016040528015610ddf578160200160208202803683370190505b50905060008d6001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e46919061234b565b905060005b858160ff1610156110c8578e6001600160a01b03166382b86600826040518263ffffffff1660e01b8152600401610e8b919060ff91909116815260200190565b602060405180830381865afa158015610ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecc91906122c0565b838260ff1681518110610ee157610ee1612291565b60200260200101906001600160a01b031690816001600160a01b0316815250508e6001600160a01b03166391ceb3eb826040518263ffffffff1660e01b8152600401610f36919060ff91909116815260200190565b602060405180830381865afa158015610f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7791906122a7565b858260ff1681518110610f8c57610f8c612291565b602002602001018181525050828160ff1681518110610fad57610fad612291565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110169190612379565b611021906012612503565b61102c90600a612491565b848260ff168151811061104157611041612291565b602002602001018181525050611098848260ff168151811061106557611065612291565b6020026020010151868360ff168151811061108257611082612291565b6020026020010151611bfd90919063ffffffff16565b858260ff16815181106110ad576110ad612291565b60209081029190910101526110c18161251c565b9050610e4b565b50949d959c50909a5090985096509094509092505050565b33738895b7f0e0f1ec8f1e085fe38bd5d8cde1a0e7951461110057600080fd5b60405163a9059cbb60e01b8152738895b7f0e0f1ec8f1e085fe38bd5d8cde1a0e79560048201526024810182905282906001600160a01b0382169063a9059cbb906044015b6020604051808303816000875af1158015611164573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611188919061234b565b50505050565b6000808061119c8688612551565b905060008760020b1280156111bc57506111b6868861258b565b60020b15155b156111cf57806111cb816125ad565b9150505b84156112da576000806111e183611c8c565b90925090506000600160ff831681901b906111fc90826125d0565b61120691906125e3565b60405163299ce14b60e11b8152600185900b600482015290915060009082906001600160a01b038a1690635339c29690602401602060405180830381865afa158015611256573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127a91906122a7565b1680151596509050856112a4578961129560ff8516876125f6565b61129f919061261b565b6112cf565b896112ae82611ca9565b6112b89085612503565b6112c59060ff16876125f6565b6112cf919061261b565b9650505050506113fb565b6000806112f06112eb84600161263b565b611c8c565b90925090506000611308600160ff841681901b6125d0565b60405163299ce14b60e11b8152600185900b60048201529019915060009082906001600160a01b038a1690635339c29690602401602060405180830381865afa158015611359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137d91906122a7565b1680151596509050856113bd57896113968460ff612503565b60ff166113a487600161263b565b6113ae919061263b565b6113b8919061261b565b6113f4565b89836113c883611da1565b6113d29190612503565b60ff166113e087600161263b565b6113ea919061263b565b6113f4919061261b565b9650505050505b5094509492505050565b33739c4aba92384d723ca81544225366254baf3de4e41461142557600080fd5b60405163a9059cbb60e01b8152739c4aba92384d723ca81544225366254baf3de4e460048201526024810182905282906001600160a01b0382169063a9059cbb90604401611145565b6000806000806000606080606060008990506114e560405180610100016040528060006001600160a01b03168152602001600060020b8152602001600060020b8152602001600062ffffff16815260200160006001600160801b031681526020016060815260200160608152602001606081525090565b816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190612672565b5050505060029190910b6020808501919091526001600160a01b039283168452604080516334324e9f60e21b815290519386169363d0c93a7c9350600480830193928290030181865afa1580156115a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c691906126f1565b816040019060020b908160020b81525050816001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611615573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611639919061270e565b62ffffff16606082015260408051630d34328160e11b815290516001600160a01b03841691631a6865029160048083019260209291908290030181865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac919061274a565b6001600160801b0316608082015260408051600a808252610160820190925290602082016101408036833750505060a082015260408051600a808252610160820190925290602082016101408036833750505060c082015260408051600a808252610160820190925290602082016101408036833750505060e08201526020810151600090815b600581101561188d5761174c828560400151858861118e565b8560a00151838151811061176257611762612291565b602002602001018660c00151848151811061177f5761177f612291565b6020026020010182151515158152508260020b60020b81525050508360a0015181815181106117b0576117b0612291565b60200260200101519150846001600160a01b031663f30dba938560a0015183815181106117df576117df612291565b60200260200101516040518263ffffffff1660e01b815260040161180c919060029190910b815260200190565b61010060405180830381865afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e9190612765565b5050505060e08801518051939450928592508210905061187057611870612291565b6020026020010181600f0b600f0b81525050806001019050611733565b505050602081015160019060055b600a811015611a6b578060050361190f576118bc828560400151858861118e565b8560a0015183815181106118d2576118d2612291565b602002602001018660c0015184815181106118ef576118ef612291565b6020026020010182151515158152508260020b60020b8152505050611978565b61192961191d6001846125f6565b8560400151858861118e565b8560a00151838151811061193f5761193f612291565b602002602001018660c00151848151811061195c5761195c612291565b6020026020010182151515158152508260020b60020b81525050505b8360a00151818151811061198e5761198e612291565b60200260200101519150846001600160a01b031663f30dba938560a0015183815181106119bd576119bd612291565b60200260200101516040518263ffffffff1660e01b81526004016119ea919060029190910b815260200190565b61010060405180830381865afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c9190612765565b5050505060e088015180519394509285925082109050611a4e57611a4e612291565b6020026020010181600f0b600f0b8152505080600101905061189b565b50826000015183602001518460400151856060015186608001518760a001518860c001518960e001519b509b509b509b509b509b509b509b5050505050919395975091939597565b6040516370a0823160e01b815230600482015260009082906001600160a01b038216906370a0823190602401602060405180830381865afa158015611afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2091906122a7565b9392505050565b60008083611b3d87670de0b6b3a7640000612809565b611b479190612820565b9050600083611b5e87670de0b6b3a7640000612809565b611b689190612820565b90506000670de0b6b3a7640000611b7f8385612809565b611b899190612820565b90506000670de0b6b3a7640000611ba08480612809565b611baa9190612820565b670de0b6b3a7640000611bbd8680612809565b611bc79190612820565b611bd191906125e3565b9050670de0b6b3a7640000611be68284612809565b611bf09190612820565b9998505050505050505050565b600082600003611c0f57506000611c86565b6000611c1b8385612809565b905082611c288583612820565b14611c835760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840160405180910390fd5b90505b92915050565b600281900b60081d6000611ca26101008461258b565b9050915091565b6000808211611cb757600080fd5b600160801b8210611cd557608091821c91611cd29082612834565b90505b680100000000000000008210611cf857604091821c91611cf59082612834565b90505b6401000000008210611d1757602091821c91611d149082612834565b90505b620100008210611d3457601091821c91611d319082612834565b90505b6101008210611d5057600891821c91611d4d9082612834565b90505b60108210611d6b57600491821c91611d689082612834565b90505b60048210611d8657600291821c91611d839082612834565b90505b60028210611d9c57611d99600182612834565b90505b919050565b6000808211611daf57600080fd5b5060ff6001600160801b03821615611dd357611dcc608082612503565b9050611ddb565b608082901c91505b67ffffffffffffffff821615611dfd57611df6604082612503565b9050611e05565b604082901c91505b63ffffffff821615611e2357611e1c602082612503565b9050611e2b565b602082901c91505b61ffff821615611e4757611e40601082612503565b9050611e4f565b601082901c91505b60ff821615611e6a57611e63600882612503565b9050611e72565b600882901c91505b600f821615611e8d57611e86600482612503565b9050611e95565b600482901c91505b6003821615611eb057611ea9600282612503565b9050611eb8565b600282901c91505b6001821615611d9c57611d99600182612503565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461067157600080fd5b8035611d9c81611ee2565b600060208284031215611f1457600080fd5b813567ffffffffffffffff811115611f2b57600080fd5b8201601f81018413611f3c57600080fd5b803567ffffffffffffffff811115611f5657611f56611ecc565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715611f8357611f83611ecc565b604052918252602081840181019290810187841115611fa157600080fd5b6020850194505b83851015611fc757611fb985611ef7565b815260209485019401611fa8565b509695505050505050565b600081518084526020840193506020830160005b82811015612004578151865260209586019590910190600101611fe6565b5093949350505050565b602081526000611b206020830184611fd2565b60006020828403121561203357600080fd5b8135611c8381611ee2565b86815285602082015260c06040820152600061205d60c0830187611fd2565b828103606084015261206f8187611fd2565b83810360808501528551808252602080880193509091019060005b818110156120b15783516001600160a01b031683526020938401939092019160010161208a565b505084151560a085015291506120c49050565b979650505050505050565b600080604083850312156120e257600080fd5b82356120ed81611ee2565b946020939093013593505050565b8060020b811461067157600080fd5b801515811461067157600080fd5b6000806000806080858703121561212e57600080fd5b8435612139816120fb565b93506020850135612149816120fb565b925060408501356121598161210a565b9150606085013561216981611ee2565b939692955090935050565b600081518084526020840193506020830160005b828110156120045781511515865260209586019590910190600101612188565b600081518084526020840193506020830160005b82811015612004578151600f0b8652602095860195909101906001016121bc565b60018060a01b03891681528760020b60208201528660020b604082015262ffffff861660608201526001600160801b038516608082015261010060a082015260006101008201600086518083526020830192506020880160005b8281101561225857815160020b855260209485019490910190600101612237565b5050505082810360c084015261226e8186612174565b905082810360e084015261228281856121a8565b9b9a5050505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156122b957600080fd5b5051919050565b6000602082840312156122d257600080fd5b8151611c8381611ee2565b80516001600160701b0381168114611d9c57600080fd5b805163ffffffff81168114611d9c57600080fd5b60008060006060848603121561231d57600080fd5b612326846122dd565b9250612334602085016122dd565b9150612342604085016122f4565b90509250925092565b60006020828403121561235d57600080fd5b8151611c838161210a565b805160ff81168114611d9c57600080fd5b60006020828403121561238b57600080fd5b611b2082612368565b634e487b7160e01b600052601160045260246000fd5b6001815b60018411156123e5578085048111156123c9576123c9612394565b60018416156123d757908102905b60019390931c9280026123ae565b935093915050565b6000826123fc57506001611c86565b8161240957506000611c86565b816001811461241f576002811461242957612445565b6001915050611c86565b60ff84111561243a5761243a612394565b50506001821b611c86565b5060208310610133831016604e8410600b8410161715612468575081810a611c86565b61247560001984846123aa565b806000190482111561248957612489612394565b029392505050565b6000611b2060ff8416836123ed565b600080600080600080600060e0888a0312156124bb57600080fd5b8751602089015160408a015160608b015160808c015160a08d015160c08e0151959c50939a509198509650945092506124f381611ee2565b8091505092959891949750929550565b60ff8281168282160390811115611c8657611c86612394565b600060ff821660ff810361253257612532612394565b60010192915050565b634e487b7160e01b600052601260045260246000fd5b60008160020b8360020b806125685761256861253b565b627fffff1982146000198214161561258257612582612394565b90059392505050565b60008260020b8061259e5761259e61253b565b808360020b0791505092915050565b60008160020b627fffff1981036125c6576125c6612394565b6000190192915050565b81810381811115611c8657611c86612394565b80820180821115611c8657611c86612394565b600282810b9082900b03627fffff198112627fffff82131715611c8657611c86612394565b60008260020b8260020b028060020b915080821461045a5761045a612394565b600281810b9083900b01627fffff8113627fffff1982121715611c8657611c86612394565b805161ffff81168114611d9c57600080fd5b600080600080600080600060e0888a03121561268d57600080fd5b875161269881611ee2565b60208901519097506126a9816120fb565b95506126b760408901612660565b94506126c560608901612660565b93506126d360808901612660565b92506126e160a08901612368565b915060c08801516124f38161210a565b60006020828403121561270357600080fd5b8151611c83816120fb565b60006020828403121561272057600080fd5b815162ffffff81168114611c8357600080fd5b80516001600160801b0381168114611d9c57600080fd5b60006020828403121561275c57600080fd5b611b2082612733565b600080600080600080600080610100898b03121561278257600080fd5b61278b89612733565b9750602089015180600f0b81146127a157600080fd5b60408a015160608b015160808c01519299509097509550600681900b81146127c857600080fd5b60a08a01519094506127d981611ee2565b92506127e760c08a016122f4565b60e08a01519092506127f88161210a565b809150509295985092959890939650565b8082028115828204841417611c8657611c86612394565b60008261282f5761282f61253b565b500490565b60ff8181168382160190811115611c8657611c8661239456fea2646970667358221220020b8d165dd9ce4f5b9552f6bc7aa97ad403eddc5eeee0447219b8365e49cb1464736f6c634300081e0033