0x60a060405234801561000f575f80fd5b50604051611e86380380611e8683398101604081905261002e916101b7565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c816100bd565b5060016002556001600160a01b038116610074575f80fd5b6001600160a01b03811660805261008b5f3361010e565b506100b67f828634d95e775031b9ff576b159a8509d3053581a8c9c4d7d86899e0afcd882f3361010e565b50506101e4565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101ae575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101663390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b1565b505f5b92915050565b5f602082840312156101c7575f80fd5b81516001600160a01b03811681146101dd575f80fd5b9392505050565b608051611c756102115f395f818161021201528181610b4801528181610e370152610fda0152611c755ff3fe60806040526004361061018a575f3560e01c80638aeda25a116100df578063b75c7dc611610083578063f2fde38b11610060578063f2fde38b146104ad578063f51321d7146104cc578063f7c469f0146104eb578063f9079b371461050a57005b8063b75c7dc614610450578063d547741f1461046f578063ea1bb3d51461048e57005b806390be10cc116100bc57806390be10cc146103eb57806391d14854146103ff5780639ef346b41461041e578063a217fddf1461043d57005b80638aeda25a1461037c5780638af104da146103af5780638da5cb5b146103ce57005b80632f2ff15d116101465780635a7bb69a116101235780635a7bb69a146102e957806366afd8ef1461031d578063715018a61461033c5780637e913dc61461035057005b80632f2ff15d1461029757806336568abe146102b657806348deb471146102d557005b806301ffc9a7146101935780630e3cfb39146101c757806313083617146101e657806321df0da714610204578063248a9ca31461024a5780632e1a7d4d1461027857005b3661019157005b005b34801561019e575f80fd5b506101b26101ad366004611960565b610529565b60405190151581526020015b60405180910390f35b3480156101d2575f80fd5b506101916101e13660046119af565b61055f565b3480156101f1575f80fd5b506003545b6040519081526020016101be565b34801561020f575f80fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b0390911681526020016101be565b348015610255575f80fd5b506101f6610264366004611a25565b5f9081526020819052604090206001015490565b348015610283575f80fd5b50610191610292366004611a25565b610a56565b3480156102a2575f80fd5b506101916102b1366004611a3c565b610b7c565b3480156102c1575f80fd5b506101916102d0366004611a3c565b610ba6565b3480156102e0575f80fd5b506005546101f6565b3480156102f4575f80fd5b506101f6610303366004611a66565b6001600160a01b03165f9081526006602052604090205490565b348015610328575f80fd5b50610191610337366004611a7f565b610bde565b348015610347575f80fd5b50610191610e72565b34801561035b575f80fd5b5061036f61036a366004611a66565b610e85565b6040516101be9190611a9f565b348015610387575f80fd5b506101f67f828634d95e775031b9ff576b159a8509d3053581a8c9c4d7d86899e0afcd882f81565b3480156103ba575f80fd5b506101f66103c9366004611b4b565b610f71565b3480156103d9575f80fd5b506001546001600160a01b0316610232565b3480156103f6575f80fd5b506101f6610fb7565b34801561040a575f80fd5b506101b2610419366004611a3c565b611052565b348015610429575f80fd5b5061036f610438366004611a25565b61107a565b348015610448575f80fd5b506101f65f81565b34801561045b575f80fd5b5061019161046a366004611a25565b611136565b34801561047a575f80fd5b50610191610489366004611a3c565b61123a565b348015610499575f80fd5b506101f66104a8366004611a25565b61125e565b3480156104b8575f80fd5b506101916104c7366004611a66565b611359565b3480156104d7575f80fd5b5061036f6104e6366004611b4b565b611393565b3480156104f6575f80fd5b506101f6610505366004611a66565b6113af565b348015610515575f80fd5b506101f6610524366004611a25565b6113d2565b5f6001600160e01b03198216637965db0b60e01b148061055957506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f828634d95e775031b9ff576b159a8509d3053581a8c9c4d7d86899e0afcd882f61058981611457565b6105938284611b87565b306001600160a01b03166390be10cc6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f39190611b9a565b101561067f5760405162461bcd60e51b815260206004820152604a60248201527f546f6b656e56657374696e673a2063616e6e6f7420637265617465207665737460448201527f696e67207363686564756c652062656361757365206e6f742073756666696369606482015269656e7420746f6b656e7360b01b608482015260a4015b60405180910390fd5b878911156106e35760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e56657374696e673a20696e697469616c5374617274206d7573742060448201526a1899480f0f481cdd185c9d60aa1b6064820152608401610676565b5f861161073d5760405162461bcd60e51b815260206004820152602260248201527f546f6b656e56657374696e673a206475726174696f6e206d757374206265203e604482015261020360f41b6064820152608401610676565b5f831161078c5760405162461bcd60e51b815260206004820181905260248201527f546f6b656e56657374696e673a20616d6f756e74206d757374206265203e20306044820152606401610676565b60018510156107f35760405162461bcd60e51b815260206004820152602d60248201527f546f6b656e56657374696e673a20736c696365506572696f645365636f6e647360448201526c206d757374206265203e3d203160981b6064820152608401610676565b604051630f7c469f60e41b81526001600160a01b038b1660048201525f90309063f7c469f090602401602060405180830381865afa158015610837573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085b9190611b9a565b90505f610868898b611b87565b90506040518061018001604052806001151581526020018d6001600160a01b031681526020018c81526020018281526020018b815260200189815260200188815260200187151581526020018681526020018581526020015f81526020015f151581525060045f8481526020019081526020015f205f820151815f015f6101000a81548160ff0219169083151502179055506020820151815f0160016101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e0820151816006015f6101000a81548160ff02191690831515021790555061010082015181600701556101208201518160080155610140820151816009015561016082015181600a015f6101000a81548160ff02191690831515021790555090505083856109c79190611b87565b6005546109d49190611b87565b6005556003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b018390556001600160a01b038d165f9081526006602052604090205490610a2c908290611b87565b6001600160a01b03909d165f9081526006602052604090209c909c55505050505050505050505050565b610a5e611461565b610a66611489565b80306001600160a01b03166390be10cc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aa3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ac79190611b9a565b1015610b295760405162461bcd60e51b815260206004820152602b60248201527f546f6b656e56657374696e673a206e6f7420656e6f756768207769746864726160448201526a7761626c652066756e647360a81b6064820152608401610676565b610b6f610b3e6001546001600160a01b031690565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690836114b6565b610b796001600255565b50565b5f82815260208190526040902060010154610b9681611457565b610ba08383611508565b50505050565b6001600160a01b0381163314610bcf5760405163334bd91960e11b815260040160405180910390fd5b610bd98282611597565b505050565b610be6611461565b5f82815260046020526040902054829060ff161515600114610c06575f80fd5b5f818152600460205260409020600a015460ff1615610c23575f80fd5b5f8381526004602052604090208054600154336001600160a01b036101009093048316811492909116148180610c565750805b610cd35760405162461bcd60e51b815260206004820152604260248201527f546f6b656e56657374696e673a206f6e6c792062656e6566696369617279206160448201527f6e64206f776e65722063616e2072656c656173652076657374656420746f6b656064820152616e7360f01b608482015260a401610676565b6040805161018081018252845460ff808216151583526001600160a01b03610100928390041660208401526001870154938301939093526002860154606083015260038601546080830152600486015460a0830152600586015460c083015260068601548316151560e083015260078601549082015260088501546101208201526009850154610140820152600a85015490911615156101608201525f90610d7a90611600565b905085811015610df25760405162461bcd60e51b815260206004820152603d60248201527f546f6b656e56657374696e673a2063616e6e6f742072656c6561736520746f6b60448201527f656e732c206e6f7420656e6f7567682076657374656420746f6b656e730000006064820152608401610676565b858460090154610e029190611b87565b600985015583546005546101009091046001600160a01b031690610e27908890611bb1565b600555610e5e6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682896114b6565b505050505050610e6e6001600255565b5050565b610e7a611489565b610e835f61170f565b565b610e8d6118fc565b6001600160a01b0382165f9081526006602052604081205460049190610ebb9085906103c990600190611bb1565b815260208082019290925260409081015f20815161018081018352815460ff808216151583526001600160a01b036101009283900416958301959095526001830154938201939093526002820154606082015260038201546080820152600482015460a0820152600582015460c082015260068201548416151560e082015260078201549281019290925260088101546101208301526009810154610140830152600a0154909116151561016082015292915050565b6040516bffffffffffffffffffffffff19606084901b166020820152603481018290525f9060540160405160208183030381529060405280519060200120905092915050565b6005546040516370a0823160e01b81523060048201525f91906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561101f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110439190611b9a565b61104d9190611bb1565b905090565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6110826118fc565b505f90815260046020818152604092839020835161018081018552815460ff808216151583526001600160a01b0361010092839004169483019490945260018301549582019590955260028201546060820152600382015460808201529281015460a0840152600581015460c084015260068101548216151560e084015260078101549383019390935260088301546101208301526009830154610140830152600a90920154909116151561016082015290565b61113e611489565b5f81815260046020526040902054819060ff16151560011461115e575f80fd5b5f818152600460205260409020600a015460ff161561117b575f80fd5b5f828152600460205260409020600681015460ff1615156001146111f05760405162461bcd60e51b815260206004820152602660248201527f546f6b656e56657374696e673a2076657374696e67206973206e6f74207265766044820152656f6361626c6560d01b6064820152608401610676565b5f81600901548260070154836008015461120a9190611b87565b6112149190611bb1565b9050806005546112249190611bb1565b60055550600a01805460ff191660011790555050565b5f8281526020819052604090206001015461125481611457565b610ba08383611597565b5f81815260046020526040812054829060ff16151560011461127e575f80fd5b5f818152600460205260409020600a015460ff161561129b575f80fd5b5f83815260046020818152604092839020835161018081018552815460ff808216151583526001600160a01b0361010092839004169483019490945260018301549582019590955260028201546060820152600382015460808201529281015460a0840152600581015460c084015260068101548216151560e084015260078101549383019390935260088301546101208301526009830154610140830152600a83015416151561016082015261135190611600565b949350505050565b611361611489565b6001600160a01b03811661138a57604051631e4fbdf760e01b81525f6004820152602401610676565b610b798161170f565b61139b6118fc565b6113a86104388484610f71565b9392505050565b6001600160a01b0381165f90815260066020526040812054610559908390610f71565b5f6113dc60035490565b82106114345760405162461bcd60e51b815260206004820152602160248201527f546f6b656e56657374696e673a20696e646578206f7574206f6620626f756e646044820152607360f81b6064820152608401610676565b6003828154811061144757611447611bc4565b905f5260205f2001549050919050565b610b798133611760565b600280540361148357604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6001546001600160a01b03163314610e835760405163118cdaa760e01b8152336004820152602401610676565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610bd9908490611799565b5f6115138383611052565b611590575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556115483390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610559565b505f610559565b5f6115a28383611052565b15611590575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610559565b60408101515f90429081108061161d575061016083015115156001145b1561162a57505f92915050565b826060015181101561164c578261014001518361012001516113a89190611bb1565b8260a0015183608001516116609190611b87565b811061168c578261014001518361010001518461012001516116829190611b87565b6113a89190611bb1565b5f83608001518261169d9190611bb1565b60c08501519091505f6116b08284611bd8565b90505f6116bd8383611bf7565b90505f8760a00151828961010001516116d69190611bf7565b6116e09190611bd8565b9050876101400151818961012001516116f99190611b87565b6117039190611bb1565b98975050505050505050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b61176a8282611052565b610e6e5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610676565b5f6117ad6001600160a01b038416836117fa565b905080515f141580156117d15750808060200190518101906117cf9190611c0e565b155b15610bd957604051635274afe760e01b81526001600160a01b0384166004820152602401610676565b60606113a883835f845f80856001600160a01b0316848660405161181e9190611c29565b5f6040518083038185875af1925050503d805f8114611858576040519150601f19603f3d011682016040523d82523d5f602084013e61185d565b606091505b509150915061186d868383611877565b9695505050505050565b60608261188c57611887826118d3565b6113a8565b81511580156118a357506001600160a01b0384163b155b156118cc57604051639996b31560e01b81526001600160a01b0385166004820152602401610676565b50806113a8565b8051156118e35780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518061018001604052805f151581526020015f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f81526020015f151581525090565b5f60208284031215611970575f80fd5b81356001600160e01b0319811681146113a8575f80fd5b80356001600160a01b038116811461199d575f80fd5b919050565b8015158114610b79575f80fd5b5f805f805f805f805f6101208a8c0312156119c8575f80fd5b6119d18a611987565b985060208a0135975060408a0135965060608a0135955060808a0135945060a08a0135935060c08a0135611a04816119a2565b989b979a50959894979396929550929360e081013593506101000135919050565b5f60208284031215611a35575f80fd5b5035919050565b5f8060408385031215611a4d575f80fd5b82359150611a5d60208401611987565b90509250929050565b5f60208284031215611a76575f80fd5b6113a882611987565b5f8060408385031215611a90575f80fd5b50508035926020909101359150565b81511515815261018081016020830151611ac460208401826001600160a01b03169052565b5060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e0830151611b0a60e084018215159052565b50610100830151610100830152610120830151610120830152610140830151610140830152610160830151611b4461016084018215159052565b5092915050565b5f8060408385031215611b5c575f80fd5b611b6583611987565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561055957610559611b73565b5f60208284031215611baa575f80fd5b5051919050565b8181038181111561055957610559611b73565b634e487b7160e01b5f52603260045260245ffd5b5f82611bf257634e487b7160e01b5f52601260045260245ffd5b500490565b808202811582820484141761055957610559611b73565b5f60208284031215611c1e575f80fd5b81516113a8816119a2565b5f82518060208501845e5f92019182525091905056fea2646970667358221220ddd4e0563560a32d4309577c7e6f37979d391081d96265eed40e2604806dc06364736f6c634300081a0033000000000000000000000000f65a9e1d5cc8af394653954bc79f31e0b7199c05