60806040523480156200001157600080fd5b506040805180820182526004808252635448453960e01b60208084018281528551808701909652928552840152815191929162000051916003916200032c565b508051620000679060049060208401906200032c565b50506005805460ff191690555062000081600033620000fa565b620000ad7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a33620000fa565b620000d97f123b642491709420c2370bb98c4e7de2b1bc05c5f9fd95ac4111e12683553c6233620000fa565b620000f433620000ee6402540be4006200010a565b6200012c565b62000577565b62000106828262000223565b5050565b60006200011a6012600a62000436565b62000126908362000502565b92915050565b6001600160a01b038216620001885760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b6200019660008383620002c7565b8060026000828254620001aa9190620003d2565b90915550506001600160a01b03821660009081526020819052604081208054839290620001d9908490620003d2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b60008281526006602090815260408083206001600160a01b038516845290915290205460ff16620001065760008281526006602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002833390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60055460ff16156200030f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200017f565b620003278383836200032760201b6200064c1760201c565b505050565b8280546200033a9062000524565b90600052602060002090601f0160209004810192826200035e5760008555620003a9565b82601f106200037957805160ff1916838001178555620003a9565b82800160010185558215620003a9579182015b82811115620003a95782518255916020019190600101906200038c565b50620003b7929150620003bb565b5090565b5b80821115620003b75760008155600101620003bc565b60008219821115620003e857620003e862000561565b500190565b600181815b808511156200042e57816000190482111562000412576200041262000561565b808516156200042057918102915b93841c9390800290620003f2565b509250929050565b60006200044760ff8416836200044e565b9392505050565b6000826200045f5750600162000126565b816200046e5750600062000126565b81600181146200048757600281146200049257620004b2565b600191505062000126565b60ff841115620004a657620004a662000561565b50506001821b62000126565b5060208310610133831016604e8410600b8410161715620004d7575081810a62000126565b620004e38383620003ed565b8060001904821115620004fa57620004fa62000561565b029392505050565b60008160001904831182151516156200051f576200051f62000561565b500290565b600181811c908216806200053957607f821691505b602082108114156200055b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b611e5980620005876000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80635c975abb116100f9578063a9059cbb11610097578063d8bd75af11610071578063d8bd75af146103e6578063dd62ed3e146103f9578063e63ab1e914610432578063fa89cff81461045957600080fd5b8063a9059cbb146103ab578063d0ca2f67146103be578063d547741f146103d357600080fd5b806391d14854116100d357806391d148541461037557806395d89b4114610388578063a217fddf14610390578063a457c2d71461039857600080fd5b80635c975abb1461033957806370a08231146103445780638456cb591461036d57600080fd5b80632f2ff15d11610166578063366dc08311610140578063366dc083146102c3578063395093511461030b5780633f4ba83a1461031e5780634c11b33f1461032657600080fd5b80632f2ff15d1461028c578063313ce567146102a157806336568abe146102b057600080fd5b806318160ddd116101a257806318160ddd1461021957806320c7d2ca1461022b57806323b872dd14610256578063248a9ca31461026957600080fd5b806301ffc9a7146101c957806306fdde03146101f1578063095ea7b314610206575b600080fd5b6101dc6101d73660046119db565b61046c565b60405190151581526020015b60405180910390f35b6101f96104a3565b6040516101e89190611b2b565b6101dc610214366004611933565b610535565b6002545b6040519081526020016101e8565b61023e61023936600461199f565b61054b565b6040516001600160a01b0390911681526020016101e8565b6101dc6102643660046118f7565b610575565b61021d61027736600461199f565b60009081526006602052604090206001015490565b61029f61029a3660046119b8565b610626565b005b604051601281526020016101e8565b61029f6102be3660046119b8565b610651565b6102d66102d13660046118a9565b6106cf565b604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e0016101e8565b6101dc610319366004611933565b61075c565b61029f610798565b61029f61033436600461195d565b6107ce565b60055460ff166101dc565b61021d6103523660046118a9565b6001600160a01b031660009081526020819052604090205490565b61029f6109bf565b6101dc6103833660046119b8565b6109f2565b6101f9610a1d565b61021d600081565b6101dc6103a6366004611933565b610a2c565b6101dc6103b9366004611933565b610ac5565b61021d600080516020611e0483398151915281565b61029f6103e13660046119b8565b610ad2565b61029f6103f436600461195d565b610af8565b61021d6104073660046118c4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61021d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61029f6104673660046118a9565b610c29565b60006001600160e01b03198216637965db0b60e01b148061049d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600380546104b290611d70565b80601f01602080910402602001604051908101604052809291908181526020018280546104de90611d70565b801561052b5780601f106105005761010080835404028352916020019161052b565b820191906000526020600020905b81548152906001019060200180831161050e57829003601f168201915b5050505050905090565b6000610542338484610e5b565b50600192915050565b6008818154811061055b57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000610582848484610f7f565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561060c5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106198533858403610e5b565b60019150505b9392505050565b600082815260066020526040902060010154610642813361115a565b61064c83836111be565b505050565b6001600160a01b03811633146106c15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610603565b6106cb8282611244565b5050565b60008080808080806001600160a01b0388166106fd5760405162461bcd60e51b815260040161060390611b88565b6000610708896112ab565b905060006107158a611346565b90508160a0015181111561072a575060a08101515b8151602083015160408401516060850151608086015160a090960151939e929d50909b50995092975095509350915050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610542918590610793908690611bcf565b610e5b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6107c3813361115a565b6107cb61138c565b50565b60055460ff16156107f15760405162461bcd60e51b815260040161060390611b5e565b600080516020611e0483398151915261080a813361115a565b6108138661141f565b61085f5760405162461bcd60e51b815260206004820152601b60248201527f544845393a2062656e6566696369617279206e6f7420666f756e6400000000006044820152606401610603565b8361086c5763f486570093505b6108788685858561143a565b61088457610884611dab565b600061088f876112ab565b9050600081608001511180156108a9575060008160a00151115b156109225760646108b9886112ab565b6080015110156109225760405162461bcd60e51b815260206004820152602e60248201527f544845393a206163636f756e7420746f20776869636820726576656e7565207760448201526d185cc81d1c985b9cd9995c9c995960921b6064820152608401610603565b6109798761092f886115dd565b878787606461093d8d6115dd565b6001600160a01b039096166000908152600760205260409020948555600185019390935560028401919091556003830155600482015560050155565b7f48e9a0354f4ede03676ae307b71e37e5fed6b4f99e92298a39b081e27ce0b1b3878787846040516109ae9493929190611af6565b60405180910390a150505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a6109ea813361115a565b6107cb6115f5565b60009182526006602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546104b290611d70565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015610aae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610603565b610abb3385858403610e5b565b5060019392505050565b6000610542338484610f7f565b600082815260066020526040902060010154610aee813361115a565b61064c8383611244565b60055460ff1615610b1b5760405162461bcd60e51b815260040161060390611b5e565b600080516020611e04833981519152610b34813361115a565b83610b415763f486570093505b610b4d8685858561143a565b610b5957610b59611dab565b610b628661141f565b15610b7957610b7486868686866107ce565b610c21565b610b9486610b86876115dd565b868686606461093d8c6115dd565b600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0388161790557fbbb96124e422b96061a49822a91defe98f04c5c2ee0d9e40f6a08f548055728c86610c0a816112ab565b604051610c18929190611ab4565b60405180910390a15b505050505050565b60055460ff1615610c4c5760405162461bcd60e51b815260040161060390611b5e565b600080516020611e04833981519152610c65813361115a565b6001600160a01b038216610c8b5760405162461bcd60e51b815260040161060390611b88565b610c948261141f565b610ce05760405162461bcd60e51b815260206004820152601b60248201527f544845393a2062656e6566696369617279206e6f7420666f756e6400000000006044820152606401610603565b6000610ceb836112ab565b9050610cf68361164d565b610d4c5760405162461bcd60e51b815260206004820152602160248201527f544845393a204974206861736e2774206265656e2072656c65617365642079656044820152601d60fa1b6064820152608401610603565b60008160a0015111610da05760405162461bcd60e51b815260206004820152601960248201527f544845393a204e6f2072656d61696e696e6720616d6f756e74000000000000006044820152606401610603565b60a081015160808201516000610db586611346565b90508360a00151811115610dd257505060a0820151600090610de3565b610de0828560400151611673565b91505b610dee33878361167f565b610df88682610ac5565b50610e20868560000151610e0b896116a2565b876040015188606001518761093d8a89611673565b7f013373905d7c70a21ac633fd6f9d988b5524a430b3a92bcbdfdd6945917d13718682610e4c896112ab565b604051610c1893929190611ad1565b6001600160a01b038316610ebd5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610603565b6001600160a01b038216610f1e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610603565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316610fe35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610603565b6001600160a01b0382166110455760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610603565b61105083838361167f565b6001600160a01b038316600090815260208190526040902054818110156110c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610603565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906110ff908490611bcf565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161114b91815260200190565b60405180910390a35b50505050565b61116482826109f2565b6106cb5761117c816001600160a01b031660146116d2565b6111878360206116d2565b604051602001611198929190611a3f565b60408051601f198184030181529082905262461bcd60e51b825261060391600401611b2b565b6111c882826109f2565b6106cb5760008281526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790556112003390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61124e82826109f2565b156106cb5760008281526006602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6112e46040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b506001600160a01b0316600090815260076020908152604091829020825160c08101845281548152600182015492810192909252600281015492820192909252600382015460608201526004820154608082015260059091015460a082015290565b60006113518261164d565b1561137f5761049d611378611365846112ab565b5161136f856112ab565b6040015161186e565b606461187a565b506000919050565b919050565b60055460ff166113d55760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610603565b6005805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60008061142b836112ab565b51111561137f57506001919050565b60006001600160a01b0385166114625760405162461bcd60e51b815260040161060390611b88565b600083116114b25760405162461bcd60e51b815260206004820152601f60248201527f544845393a2070657263656e746167652063616e6e6f74206265207a65726f006044820152606401610603565b606483111561150e5760405162461bcd60e51b815260206004820152602260248201527f544845393a2070657263656e746167652063616e6e6f74206578636565642031604482015261030360f41b6064820152608401610603565b6000821161156a5760405162461bcd60e51b8152602060048201526024808201527f544845393a206c6f636b206379636c6520646179732063616e6e6f74206265206044820152637a65726f60e01b6064820152608401610603565b4284116115d15760405162461bcd60e51b815260206004820152602f60248201527f544845393a2066697273742072656c656173652074696d65206973206265666f60448201526e72652063757272656e742074696d6560881b6064820152608401610603565b5060015b949350505050565b60006115eb6012600a611c4c565b61049d9083611cf7565b60055460ff16156116185760405162461bcd60e51b815260040161060390611b5e565b6005805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586114023390565b60006116588261141f565b1561137f57611666826112ab565b6020015142101592915050565b600061061f8284611d16565b60055460ff161561064c5760405162461bcd60e51b815260040161060390611b5e565b600061049d6116b0836112ab565b602001516116cd6116c0856112ab565b606001516201518061186e565b611886565b606060006116e1836002611cf7565b6116ec906002611bcf565b67ffffffffffffffff81111561170457611704611ded565b6040519080825280601f01601f19166020018201604052801561172e576020820181803683370190505b509050600360fc1b8160008151811061174957611749611dd7565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061177857611778611dd7565b60200101906001600160f81b031916908160001a905350600061179c846002611cf7565b6117a7906001611bcf565b90505b600181111561181f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106117db576117db611dd7565b1a60f81b8282815181106117f1576117f1611dd7565b60200101906001600160f81b031916908160001a90535060049490941c9361181881611d59565b90506117aa565b50831561061f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610603565b600061061f8284611cf7565b600061061f8284611be7565b600061061f8284611bcf565b80356001600160a01b038116811461138757600080fd5b6000602082840312156118bb57600080fd5b61061f82611892565b600080604083850312156118d757600080fd5b6118e083611892565b91506118ee60208401611892565b90509250929050565b60008060006060848603121561190c57600080fd5b61191584611892565b925061192360208501611892565b9150604084013590509250925092565b6000806040838503121561194657600080fd5b61194f83611892565b946020939093013593505050565b600080600080600060a0868803121561197557600080fd5b61197e86611892565b97602087013597506040870135966060810135965060800135945092505050565b6000602082840312156119b157600080fd5b5035919050565b600080604083850312156119cb57600080fd5b823591506118ee60208401611892565b6000602082840312156119ed57600080fd5b81356001600160e01b03198116811461061f57600080fd5b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611a77816017850160208801611d2d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611aa8816028840160208801611d2d565b01602801949350505050565b6001600160a01b038316815260e0810161061f6020830184611a05565b6001600160a01b03841681526020810183905261010081016115d56040830184611a05565b6001600160a01b038516815260208101849052604081018390526101208101611b226060830184611a05565b95945050505050565b6020815260008251806020840152611b4a816040850160208701611d2d565b601f01601f19169190910160400192915050565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526027908201527f544845393a2062656e65666963696172792066726f6d20746865207a65726f206040820152666164647265737360c81b606082015260800190565b60008219821115611be257611be2611dc1565b500190565b600082611c0457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115611c44578160001904821115611c2a57611c2a611dc1565b80851615611c3757918102915b93841c9390800290611c0e565b509250929050565b600061061f60ff841683600082611c655750600161049d565b81611c725750600061049d565b8160018114611c885760028114611c9257611cae565b600191505061049d565b60ff841115611ca357611ca3611dc1565b50506001821b61049d565b5060208310610133831016604e8410600b8410161715611cd1575081810a61049d565b611cdb8383611c09565b8060001904821115611cef57611cef611dc1565b029392505050565b6000816000190483118215151615611d1157611d11611dc1565b500290565b600082821015611d2857611d28611dc1565b500390565b60005b83811015611d48578181015183820152602001611d30565b838111156111545750506000910152565b600081611d6857611d68611dc1565b506000190190565b600181811c90821680611d8457607f821691505b60208210811415611da557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe123b642491709420c2370bb98c4e7de2b1bc05c5f9fd95ac4111e12683553c62a2646970667358221220d043b82e3420fe8b5c358890e7f5d56a15f0d2e1e6168f31751093ae565d618a64736f6c63430008070033