0x60806040523480156200001157600080fd5b5060405162002a5538038062002a5583398101604081905262000034916200029a565b600080546001600160a01b03191633908117825560405184928492918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805460ff60a01b191690556200009182620000a6565b6200009c81620001a9565b50505050620002f1565b6000546001600160a01b03163314620000f55760405162461bcd60e51b8152602060048201819052602482015260008051602062002a3583398151915260448201526064015b60405180910390fd5b6001600160a01b0381166200014d5760405162461bcd60e51b815260206004820152601360248201527f656d70747920627269646765207369676e6572000000000000000000000000006044820152606401620000ec565b6001546040516001600160a01b038084169216907f149d692eda7ac02c9f4f8513da0e59ee3e9a72544738da92574d9f8bf579ff1e90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620001f45760405162461bcd60e51b8152602060048201819052602482015260008051602062002a358339815191526044820152606401620000ec565b6001600160a01b0381166200023e5760405162461bcd60e51b815260206004820152600f60248201526e32b6b83a3c903a3932b0b9bab932b960891b6044820152606401620000ec565b6002546040516001600160a01b038084169216907f1875a627112d4eedc536528e078f5f4c119d74f3c281d67bc096791825e4aabd90600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b60008060408385031215620002ad578182fd5b8251620002ba81620002d8565b6020840151909250620002cd81620002d8565b809150509250929050565b6001600160a01b0381168114620002ee57600080fd5b50565b61273480620003016000396000f3fe6080604052600436106101445760003560e01c8063671d6429116100c05780638da5cb5b11610074578063f2fde38b11610059578063f2fde38b1461035c578063fda49eb41461037c578063ffa1ad741461039c57600080fd5b80638da5cb5b1461031e578063e5fea93b1461033c57600080fd5b80637c41ad2c116100a55780637c41ad2c146102b95780638456cb59146102d95780638995881d146102ee57600080fd5b8063671d642914610284578063715018a6146102a457600080fd5b80634bfed4a1116101175780635c975abb116100fc5780635c975abb1461021957806363f901bb146102445780636542ab911461026457600080fd5b80634bfed4a1146101b3578063562aae68146101c657600080fd5b80630482a3381461014957806331938b781461015e5780633b3bff0f1461017e5780633f4ba83a1461019e575b600080fd5b61015c6101573660046125b1565b6103c3565b005b34801561016a57600080fd5b5061015c610179366004612512565b61076f565b34801561018a57600080fd5b5061015c6101993660046123df565b610bff565b3480156101aa57600080fd5b5061015c610c65565b61015c6101c13660046123fb565b610cc9565b3480156101d257600080fd5b506101fc6101e13660046123df565b6003602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561022557600080fd5b50600054600160a01b900460ff165b6040519015158152602001610210565b34801561025057600080fd5b506001546101fc906001600160a01b031681565b34801561027057600080fd5b5061015c61027f3660046123df565b6110cf565b34801561029057600080fd5b5061015c61029f3660046123df565b6111e8565b3480156102b057600080fd5b5061015c611301565b3480156102c557600080fd5b5061015c6102d43660046123df565b6113b2565b3480156102e557600080fd5b5061015c611415565b3480156102fa57600080fd5b506102346103093660046123df565b60046020526000908152604090205460ff1681565b34801561032a57600080fd5b506000546001600160a01b03166101fc565b34801561034857600080fd5b5061015c610357366004612476565b611477565b34801561036857600080fd5b5061015c6103773660046123df565b6119ad565b34801561038857600080fd5b506002546101fc906001600160a01b031681565b3480156103a857600080fd5b506103b1600181565b60405160ff9091168152602001610210565b8151602080840191909120600081815260059092526040909120548391839160ff161561042a5760405162461bcd60e51b815260206004820152601060248201526f726575736564207369676e617475726560801b60448201526064015b60405180910390fd5b6000818152600560205260409020805460ff19166001179055811561049757610455426103e861267c565b82116104975760405162461bcd60e51b815260206004820152601160248201527065787069726564207369676e617475726560781b6044820152606401610421565b600054600160a01b900460ff16156104e45760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610421565b6001600160a01b03881660009081526004602052604090205460ff161561053f5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881a5cc81c185d5cd959608a1b6044820152606401610421565b6001600160a01b03888116600090815260036020526040902054166105a65760405162461bcd60e51b815260206004820152601460248201527f746f6b656e206e6f7420726567697374657265640000000000000000000000006044820152606401610421565b60408051306020808301919091528183018c90526001600160a01b038b811660608401528a16608083015260a082018990523460c083015260e080830188905283518084039091018152610100830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000061012084015261013c8084018290528451808503909101815261015c90930190935281519101206000906001549091506001600160a01b03166106618289611aeb565b6001600160a01b0316146106b75760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420627269646765207369676e617475726500000000000000006044820152606401610421565b6106cc6001600160a01b038b1633308b611b66565b341561070d576002546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561070b573d6000803e3d6000fd5b505b604080518c8152602081018a905234918101919091526001600160a01b038a81169133918d16907ffbc8337b08322b8857dc82cc3ca875440af5059fc1e11b46ef736b1f571a47f4906060015b60405180910390a45050505050505050505050565b81516020808401919091206000818152600590925260408220548492919060ff16156107d05760405162461bcd60e51b815260206004820152601060248201526f726575736564207369676e617475726560801b6044820152606401610421565b6000818152600560205260409020805460ff19166001179055811561083d576107fb426103e861267c565b821161083d5760405162461bcd60e51b815260206004820152601160248201527065787069726564207369676e617475726560781b6044820152606401610421565b83516020808601919091206000818152600590925260408220548692919060ff161561089e5760405162461bcd60e51b815260206004820152601060248201526f726575736564207369676e617475726560801b6044820152606401610421565b6000818152600560205260409020805460ff19166001179055811561090b576108c9426103e861267c565b821161090b5760405162461bcd60e51b815260206004820152601160248201527065787069726564207369676e617475726560781b6044820152606401610421565b600054600160a01b900460ff16156109585760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610421565b6001600160a01b038a1660009081526004602052604090205460ff16156109b35760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881a5cc81c185d5cd959608a1b6044820152606401610421565b6001600160a01b038a811660009081526003602052604090205416610a1a5760405162461bcd60e51b815260206004820152601460248201527f746f6b656e206e6f7420726567697374657265640000000000000000000000006044820152606401610421565b60408051306020808301919091528183018e90526001600160a01b038d1660608301524660808301523360a083015260c08083018d90528351808403909101815260e0830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000061010084015261011c8084018290528451808503909101815261013c90930190935281519101206000906001600160a01b03808e1660009081526003602052604090205491925016610ada828c611aeb565b6001600160a01b031614610b305760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420746f6b656e207369676e61747572650000000000000000006044820152606401610421565b6001546001600160a01b0316610b46828b611aeb565b6001600160a01b031614610b9c5760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420627269646765207369676e617475726500000000000000006044820152606401610421565b5050610bb9610ba83390565b6001600160a01b038c16908b611c1d565b336001600160a01b03168a6001600160a01b03168c7fa45c018c08cffc1e5d85864e334de0f820678cb0f6278a9ee5ed170b2b3d94d78c60405161075a91815260200190565b6000546001600160a01b03163314610c595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b610c6281611c6b565b50565b6000546001600160a01b03163314610cbf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b610cc7611d1e565b565b8151602080840191909120600081815260059092526040909120548391839160ff1615610d2b5760405162461bcd60e51b815260206004820152601060248201526f726575736564207369676e617475726560801b6044820152606401610421565b6000818152600560205260409020805460ff191660011790558115610d9857610d56426103e861267c565b8211610d985760405162461bcd60e51b815260206004820152601160248201527065787069726564207369676e617475726560781b6044820152606401610421565b600054600160a01b900460ff1615610de55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610421565b6001600160a01b038816610e3b5760405162461bcd60e51b815260206004820152600e60248201527f746f6b656e20697320656d7074790000000000000000000000000000000000006044820152606401610421565b6001600160a01b038716610e915760405162461bcd60e51b815260206004820152601260248201527f62617365546f6b656e20697320656d70747900000000000000000000000000006044820152606401610421565b6001600160a01b03881660009081526004602052604090205460ff1615610eec5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881a5cc81c185d5cd959608a1b6044820152606401610421565b604080513060208083019190915233828401526001600160a01b038b811660608401528a81166080840152891660a08301523460c083015260e080830188905283518084039091018152610100830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000061012084015261013c8084018290528451808503909101815261015c90930190935281519101206000906001549091506001600160a01b0316610fa78289611aeb565b6001600160a01b031614610ffd5760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420627269646765207369676e617475726500000000000000006044820152606401610421565b50506001600160a01b038881166000908152600360205260409020805473ffffffffffffffffffffffffffffffffffffffff1916918816919091179055341561107b576002546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611079573d6000803e3d6000fd5b505b856001600160a01b0316876001600160a01b0316896001600160a01b03167f2a01ad7aa2d2f1a30ca9240162484085719a1dc4706f26467cb3c097dce6ca1b60405160405180910390a45050505050505050565b6000546001600160a01b031633146111295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b6001600160a01b03811661117f5760405162461bcd60e51b815260206004820152601360248201527f656d70747920627269646765207369676e6572000000000000000000000000006044820152606401610421565b6001546040516001600160a01b038084169216907f149d692eda7ac02c9f4f8513da0e59ee3e9a72544738da92574d9f8bf579ff1e90600090a36001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146112425760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b6001600160a01b0381166112985760405162461bcd60e51b815260206004820152600f60248201527f656d7074792074726561737572657200000000000000000000000000000000006044820152606401610421565b6002546040516001600160a01b038084169216907f1875a627112d4eedc536528e078f5f4c119d74f3c281d67bc096791825e4aabd90600090a36002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461135b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b6000546001600160a01b0316331461140c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b610c6281611ddf565b6000546001600160a01b0316331461146f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b610cc7611e96565b8251602080850191909120600081815260059092526040909120548491839160ff16156114d95760405162461bcd60e51b815260206004820152601060248201526f726575736564207369676e617475726560801b6044820152606401610421565b6000818152600560205260409020805460ff19166001179055811561154657611504426103e861267c565b82116115465760405162461bcd60e51b815260206004820152601160248201527065787069726564207369676e617475726560781b6044820152606401610421565b8451602080870191909120600081815260059092526040909120548691869160ff16156115a85760405162461bcd60e51b815260206004820152601060248201526f726575736564207369676e617475726560801b6044820152606401610421565b6000818152600560205260409020805460ff191660011790558115611615576115d3426103e861267c565b82116116155760405162461bcd60e51b815260206004820152601160248201527065787069726564207369676e617475726560781b6044820152606401610421565b600054600160a01b900460ff16156116625760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610421565b6001600160a01b038b1660009081526004602052604090205460ff16156116bd5760405162461bcd60e51b815260206004820152600f60248201526e1d1bdad95b881a5cc81c185d5cd959608a1b6044820152606401610421565b6001600160a01b038b8116600090815260036020526040902054166117245760405162461bcd60e51b815260206004820152601460248201527f746f6b656e206e6f7420726567697374657265640000000000000000000000006044820152606401610421565b60408051306020808301919091526001600160a01b038e8116838501528d16606083015260808083018b90528351808403909101815260a0830184528051908201207f19457468657265756d205369676e6564204d6573736167653a0a33320000000060c084015260dc8084018290528451808503909101815260fc90930190935281519101206000906001600160a01b03808f16600090815260036020526040902054919250166117d6828d611aeb565b6001600160a01b03161461182c5760405162461bcd60e51b815260206004820152601760248201527f696e76616c696420746f6b656e207369676e61747572650000000000000000006044820152606401610421565b6001546001600160a01b0316611842828c611aeb565b6001600160a01b0316146118985760405162461bcd60e51b815260206004820152601860248201527f696e76616c696420627269646765207369676e617475726500000000000000006044820152606401610421565b50506118a38b611ddf565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000906001600160a01b038d16906370a082319060240160206040518083038186803b1580156118fe57600080fd5b505afa158015611912573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119369190612599565b90508015611952576119526001600160a01b038d168c83611c1d565b8a6001600160a01b03168c6001600160a01b03167f18df02dcc52b9c494f391df09661519c0069bd8540141946280399408205ca1a8360405161199791815260200190565b60405180910390a3505050505050505050505050565b6000546001600160a01b03163314611a075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610421565b6001600160a01b038116611a835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610421565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60008151604114611b3e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610421565b60208201516040830151606084015160001a611b5c86828585611f39565b9695505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052611c179085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526120e2565b50505050565b6040516001600160a01b038316602482015260448101829052611c669084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611bb3565b505050565b6001600160a01b03811660009081526004602052604090205460ff16611cd35760405162461bcd60e51b815260206004820152601360248201527f746f6b656e206973206e6f7420706175736564000000000000000000000000006044820152606401610421565b6001600160a01b038116600081815260046020526040808220805460ff19169055513392917fa5bb93d2ab7320f11fa3d7af4ef8d6d3be3845fb3cbc5e0e177fb7c36a22591d91a350565b600054600160a01b900460ff16611d775760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610421565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b03811660009081526004602052604090205460ff1615611e485760405162461bcd60e51b815260206004820152601760248201527f746f6b656e20697320616c7265616479207061757365640000000000000000006044820152606401610421565b6001600160a01b038116600081815260046020526040808220805460ff19166001179055513392917f3049c79d2929992d0f7fdd893166d6b11cc50f9c20d83ba5ea22091b7f1276d591a350565b600054600160a01b900460ff1615611ee35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610421565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611dc23390565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115611fb65760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610421565b8360ff16601b1480611fcb57508360ff16601c145b6120225760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610421565b6040805160008082526020820180845288905260ff871692820192909252606081018590526080810184905260019060a0016020604051602081039080840390855afa158015612076573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610421565b95945050505050565b6000612137826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121c79092919063ffffffff16565b805190915015611c66578080602001905181019061215591906124f2565b611c665760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610421565b60606121d684846000856121e0565b90505b9392505050565b6060824710156122585760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610421565b843b6122a65760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610421565b600080866001600160a01b031685876040516122c2919061262d565b60006040518083038185875af1925050503d80600081146122ff576040519150601f19603f3d011682016040523d82523d6000602084013e612304565b606091505b509150915061231482828661231f565b979650505050505050565b6060831561232e5750816121d9565b82511561233e5782518084602001fd5b8160405162461bcd60e51b81526004016104219190612649565b600082601f830112612368578081fd5b813567ffffffffffffffff80821115612383576123836126d3565b604051601f8301601f19908116603f011681019082821181831017156123ab576123ab6126d3565b816040528381528660208588010111156123c3578485fd5b8360208701602083013792830160200193909352509392505050565b6000602082840312156123f0578081fd5b81356121d9816126e9565b600080600080600060a08688031215612412578081fd5b853561241d816126e9565b9450602086013561242d816126e9565b9350604086013561243d816126e9565b9250606086013567ffffffffffffffff811115612458578182fd5b61246488828901612358565b95989497509295608001359392505050565b600080600080600060a0868803121561248d578081fd5b8535612498816126e9565b945060208601356124a8816126e9565b9350604086013567ffffffffffffffff808211156124c4578283fd5b6124d089838a01612358565b945060608801359150808211156124e5578283fd5b5061246488828901612358565b600060208284031215612503578081fd5b815180151581146121d9578182fd5b600080600080600060a08688031215612529578081fd5b85359450602086013561253b816126e9565b935060408601359250606086013567ffffffffffffffff8082111561255e578283fd5b61256a89838a01612358565b9350608088013591508082111561257f578283fd5b5061258c88828901612358565b9150509295509295909350565b6000602082840312156125aa578081fd5b5051919050565b60008060008060008060c087890312156125c9578081fd5b8635955060208701356125db816126e9565b945060408701356125eb816126e9565b935060608701359250608087013567ffffffffffffffff81111561260d578182fd5b61261989828a01612358565b92505060a087013590509295509295509295565b6000825161263f8184602087016126a7565b9190910192915050565b60208152600082518060208401526126688160408501602087016126a7565b601f01601f19169190910160400192915050565b60008160001904831182151516156126a257634e487b7160e01b81526011600452602481fd5b500290565b60005b838110156126c25781810151838201526020016126aa565b83811115611c175750506000910152565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c6257600080fdfea2646970667358221220d76edd234ce48a8912abe2a9a24afbd6de6cecf6c1b64e25648889dc48a0145764736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000072c509b36f734567b86e6b624ba4d53ea5043718000000000000000000000000d020f2160cef2e4d70431c2f3bba506ea6a618d4