From 43546bb0195a3286c8ba3f371944392e60035b60 Mon Sep 17 00:00:00 2001 From: Pallavi Gupta Date: Fri, 9 Sep 2022 00:13:00 +0530 Subject: [PATCH] Handle stake ownership transfer event --- abis/Staking.json | 47 ++++++++++++++++++++++++++++++++-- src/mapping.ts | 64 ++++++++++++++++++++++++++++++++++++++++++++++- subgraph.yaml | 2 ++ 3 files changed, 110 insertions(+), 3 deletions(-) diff --git a/abis/Staking.json b/abis/Staking.json index 53b58cd..bd2a0c1 100644 --- a/abis/Staking.json +++ b/abis/Staking.json @@ -184,6 +184,31 @@ "name": "Stake", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "talent", + "type": "address" + } + ], + "name": "StakeTransferred", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -1094,6 +1119,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_talents", + "type": "address[]" + }, + { + "internalType": "address", + "name": "_newOwnerAddress", + "type": "address" + } + ], + "name": "transferStakes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1133,8 +1176,8 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b5061550a806100206000396000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806390484673116101bd578063be9a6555116100f9578063d547741f116100a2578063ef5cfb8c1161007c578063ef5cfb8c14610742578063efbe1c1c14610755578063f18d20be1461075e578063fc0c546a1461076657600080fd5b8063d547741f14610719578063ed2f23691461072c578063ee0708051461073557600080fd5b8063ca15c873116100d3578063ca15c873146106ea578063d1990538146106fd578063d4ce57891461070657600080fd5b8063be9a6555146106c1578063bf55bd97146106ca578063c45a0155146106d257600080fd5b8063a217fddf11610166578063aa0b017911610140578063aa0b017914610675578063aef2200d1461069d578063b0e31b2d146106b0578063b435842c146106b957600080fd5b8063a217fddf146105f0578063a4e47b66146105f8578063a8bc58f21461066d57600080fd5b8063977bee8e11610197578063977bee8e146105c2578063992642e5146105d55780639e1a4d19146105e857600080fd5b8063904846731461056d57806391b70f601461057657806391d148541461058957600080fd5b806342d866931161028c57806371f19f94116102355780637ff9b5961161020f5780637ff9b596146104fa57806388a7ca5c146105035780638ba2855d1461052f5780639010d07c1461054257600080fd5b806371f19f94146104b45780637773a92b146104c75780637eefc525146104e757600080fd5b8063683b443011610266578063683b4430146104855780636a0675cf146104985780636a61e5fc146104a157600080fd5b806342d866931461045657806343f49d89146104695780634be1c7961461047c57600080fd5b80632f2770db116102f95780633a98ef39116102d35780633a98ef39146104085780633b039b9e146104105780633dbf35631461042357806342c0e5ef1461044357600080fd5b80632f2770db146103da5780632f2ff15d146103e257806336568abe146103f557600080fd5b806322b3a6a11161032a57806322b3a6a1146103a5578063248a9ca3146103ae57806325b58c87146103d157600080fd5b806301ffc9a714610351578063144fa6d7146103795780631ea18fc51461038e575b600080fd5b61036461035f366004614f04565b610779565b60405190151581526020015b60405180910390f35b61038c610387366004614d03565b61078a565b005b61039760d25481565b604051908152602001610370565b61039760d65481565b6103976103bc366004614ea4565b60009081526065602052604090206001015490565b61039760d35481565b61038c6109fd565b61038c6103f0366004614ebd565b610a73565b61038c610403366004614ebd565b610a9d565b60d454610397565b61036461041e366004614d03565b610b29565b610397610431366004614d03565b60ce6020526000908152604090205481565b610397610451366004614ea4565b610d3c565b610364610464366004614d03565b610d5e565b610397610477366004614d03565b610e92565b61039760db5481565b61038c610493366004614d03565b610f6e565b61039760d85481565b61038c6104af366004614ea4565b611126565b61038c6104c2366004614ea4565b611137565b6103976104d5366004614d03565b60cf6020526000908152604090205481565b6103976104f5366004614ea4565b61134b565b61039760d15481565b610516610511366004614db7565b611363565b6040516001600160e01b03199091168152602001610370565b61036461053d366004614d3d565b6116b9565b610555610550366004614ee2565b61178f565b6040516001600160a01b039091168152602001610370565b61039760dc5481565b61038c610584366004614ff4565b6117a7565b610364610597366004614ebd565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6103646105d0366004614e56565b6119e0565b60c954610555906001600160a01b031681565b610397611ea6565b610397600081565b610643610606366004614d3d565b60cb602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a001610370565b610397611f28565b610688610683366004614d76565b611f47565b60408051928352602083019190915201610370565b6103976106ab366004614ea4565b6120ee565b61039760d45481565b6103976120fc565b61039760d95481565b61038c61212d565b60d0546105559061010090046001600160a01b031681565b6103976106f8366004614ea4565b612236565b61039760d75481565b610397610714366004614ea4565b61224d565b61038c610727366004614ebd565b612266565b61039760cc5481565b60d0546103649060ff1681565b610364610750366004614d03565b61228b565b61039760da5481565b61038c6122a0565b60ca54610555906001600160a01b031681565b6000610784826124c7565b92915050565b600061079581612505565b60ca546001600160a01b0316156107f35760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166108495760405162461bcd60e51b815260206004820152601360248201527f41646472657373206d757374206265207365740000000000000000000000000060448201526064016107ea565b61087c6001600160a01b0383167f36372b070000000000000000000000000000000000000000000000000000000061250f565b6108c85760405162461bcd60e51b815260206004820152601760248201527f6e6f7420612076616c696420455243323020746f6b656e00000000000000000060448201526064016107ea565b6000829050610980816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109459190810190614f2e565b6040518060400160405280600381526020017f54414c000000000000000000000000000000000000000000000000000000000081525061252b565b6109cc5760405162461bcd60e51b815260206004820152601560248201527f746f6b656e206e616d65206973206e6f742054414c000000000000000000000060448201526064016107ea565b505060ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a0881612505565b60d05460ff1615610a5b5760405162461bcd60e51b815260206004820152601060248201527f616c72656164792064697361626c65640000000000000000000000000000000060448201526064016107ea565b610a63612537565b5060d0805460ff19166001179055565b600082815260656020526040902060010154610a8e81612505565b610a98838361257c565b505050565b6001600160a01b0381163314610b1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016107ea565b610b25828261259e565b5050565b6000610b3f60ca546001600160a01b0316151590565b610b8b5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b816001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc9190614d20565b6001600160a01b0316336001600160a01b031614610c825760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652074616c656e742063616e2077697468647261772074686560448201527f6972206f776e207368617265730000000000000000000000000000000000000060648201526084016107ea565b6001600160a01b03828116600090815260ce6020526040908190205460ca54915163a9059cbb60e01b8152336004820152602481018290529092919091169063a9059cbb90604401602060405180830381600087803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1c9190614e82565b5050506001600160a01b0316600090815260ce6020526040812055600190565b60d254600090610d5483670de0b6b3a7640000615383565b61078491906151b1565b6000610d7460ca546001600160a01b0316151590565b610dc05760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60dd543390839060ff1615610de457610ddb338560006125c0565b60019250610e8b565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054610e2290613059565b9050610e30338660006125c0565b600193506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190610e6590613059565b60d654610e72919061516b565b610e7c91906153e1565b60d6555060dd805460ff191690555b5050919050565b6000610e9d826130d0565b610ee95760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000826001600160a01b031663aafa93716040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2457600080fd5b505afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190614fdb565b9050610f678161224d565b9392505050565b600054610100900460ff1615808015610f8e5750600054600160ff909116105b80610fa85750303b158015610fa8575060005460ff166001145b61100b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff19166001179055801561102e576000805461ff0019166101001790555b6001600160a01b0382166110aa5760405162461bcd60e51b815260206004820152602160248201527f737461626c652d636f696e2061646472657373206d7573742062652076616c6960448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790556110dd60003361316c565b8015610b25576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061113181612505565b5060d155565b600061114281612505565b60ca546001600160a01b031661119a5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60d3548211156112125760405162461bcd60e51b815260206004820152602b60248201527f6e6f7420656e6f75676820737461626c6520636f696e206c65667420696e207460448201527f686520636f6e747261637400000000000000000000000000000000000000000060648201526084016107ea565b600061121d8361134b565b90508260d3600082825461123191906153e1565b909155505060ca546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190614e82565b5060c95460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113459190614e82565b50505050565b60d154600090610d5483670de0b6b3a7640000615383565b600060d9544210156113b75760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da544211156114095760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031633141561152f5760d05460ff161561146f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b60006114b084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317692505050565b90506114bd8682876131d1565b60408051868152600060208201526001600160a01b0380841692908916917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf9150506116b0565b611538336130d0565b156116425760ca546001600160a01b03166115bb5760405162461bcd60e51b815260206004820152602a60248201527f54414c20746f6b656e206e6f7420796574207365742e20526566756e64206e6f60448201527f7420706f737369626c650000000000000000000000000000000000000000000060648201526084016107ea565b3360006115c987838861338d565b9050816001600160a01b0316876001600160a01b03167f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c8360405161161091815260200190565b60405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf925050506116b0565b60405162461bcd60e51b815260206004820152602360248201527f556e7265636f676e697a6564204552433133363320746f6b656e20726563656960448201527f766564000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b95945050505050565b60dd546000908390839060ff16156116e0576116d7858560016125c0565b60019250611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb6020908152604080832093851683529290529081205461171e90613059565b905061172c868660016125c0565b600193506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60d65461176e919061516b565b61177891906153e1565b60d6555060dd805460ff191690555b505092915050565b6000828152609760205260408120610f679083613a29565b600054610100900460ff16158080156117c75750600054600160ff909116105b806117e15750303b1580156117e1575060005460ff166001145b6118445760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff191660011790558015611867576000805461ff0019166101001790555b600083116118b75760405162461bcd60e51b815260206004820152601760248201527f5f746f6b656e50726963652063616e6e6f74206265203000000000000000000060448201526064016107ea565b600082116119075760405162461bcd60e51b815260206004820152601860248201527f5f74616c656e7450726963652063616e6e6f742062652030000000000000000060448201526064016107ea565b61190f613a35565b611917613a35565b61191f613a35565b61192885610f6e565b61193061212d565b60d988905560da87905560d786905560d080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0387160217905560d183905560d282905560dc88905561199060003361316c565b80156119d6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600060d954421015611a345760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da54421115611a865760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031615611adf5760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064016107ea565b60dd543390849060ff1615611c945760008411611b365760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611b895760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611b948561134b565b90508460d36000828254611ba8919061516b565b90915550611bb990503387836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190614e82565b5060408051828152600160208201526001600160a01b0388169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a36001935050611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054611cd290613059565b905060008511611d1c5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611d6f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611d7a8661134b565b90508560d36000828254611d8e919061516b565b90915550611d9f90503388836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614e82565b5060408051828152600160208201526001600160a01b0389169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019450506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b60206040518083038186803b158015611eeb57600080fd5b505afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f239190614fdb565b905090565b600060d55460d85460d754611f3d91906153e1565b611f2391906153e1565b6001600160a01b03808416600090815260cb60209081526040808320938616835292815282822060cf9091529181205490918291829015611fa157506001600160a01b038516600090815260cf6020526040902054611fca565b60d654611fb060dc5487613ab4565b611fba91906151b1565b60db54611fc7919061516b565b90505b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561200557600080fd5b505afa158015612019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203d9190614d20565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918916906370a082319060240160206040518083038186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614fdb565b90506000806120da8660000154876003015487896001015487613b6d565b90985096505050505050505b935093915050565b60006107846104518361134b565b60c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611ed3565b600054610100900460ff161580801561214d5750600054600160ff909116105b806121675750303b158015612167575060005460ff166001145b6121ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff1916600117905580156121ed576000805461ff0019166101001790555b8015612233576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600081815260976020526040812061078490613bc7565b6000670de0b6b3a764000060d25483610d549190615383565b60008281526065602052604090206001015461228181612505565b610a98838361259e565b600061229733836116b9565b50600192915050565b60006122ab81612505565b60d05460ff16806122bd575060da5442105b61232f5760405162461bcd60e51b815260206004820152602b60248201527f6e6f742064697361626c65642c20616e64206e6f7420656e64206f662073746160448201527f6b696e672065697468657200000000000000000000000000000000000000000060648201526084016107ea565b60cc54156123cb5760405162461bcd60e51b815260206004820152605060248201527f746865726520617265207374696c6c207374616b657320616363756d756c617460448201527f696e6720726577617264732e2043616c6c2060636c61696d526577617264734f60648201527f6e426568616c6660206f6e207468656d00000000000000000000000000000000608482015260a4016107ea565b60006123d5611f28565b9050600081116124275760405162461bcd60e51b815260206004820152601860248201527f6e6f7468696e67206c65667420746f207769746864726177000000000000000060448201526064016107ea565b60ca5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab9190614e82565b508060d560008282546124be919061516b565b90915550505050565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480610784575061078482613bd1565b6122338133613c1f565b600061251a83613c9f565b8015610f675750610f678383613cd2565b6000610f678383613dd0565b60d05460ff161561254457565b60d45461254d57565b60d65461255c60dc5442613ab4565b61256691906151b1565b60db54612573919061516b565b60db554260dc55565b6125868282613df5565b6000828152609760205260409020610a989082613e97565b6125a88282613eac565b6000828152609760205260409020610a989082613f2f565b60dd548390839060ff1615612b00576001600160a01b03808616600090815260cb602090815260408083209388168352929052206125fc612537565b6000856001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561263757600080fd5b505afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f9190614d20565b6001600160a01b038716600090815260cf6020526040812054919250906126985760db546126b2565b6001600160a01b038716600090815260cf60205260409020545b8354600385015460018601546040516370a0823160e01b81526001600160a01b038781166004830152949550600094859461274f949093909288928f16906370a08231906024015b60206040518083038186803b15801561271257600080fd5b505afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190614fdb565b613b6d565b909250905061275e818361516b565b60d8600082825461276f919061516b565b9091555050600385018390554260028601556001600160a01b038916600090815260ce6020526040812080548392906127a990849061516b565b909155505060d05460ff1680156127c55750600485015460ff16155b156127f45760048501805460ff1916600190811790915560cc80546000906127ee9084906153e1565b90915550505b81612803575050505050613052565b600088600181111561281757612817615467565b14156128ff5760ca5460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561286b57600080fd5b505af115801561287f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a39190614e82565b50886001600160a01b03168a6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f384846040516128f2929190918252602082015260400190565b60405180910390a3612af6565b600188600181111561291357612913615467565b1415612aae5760006129248a610e92565b905060008382116129355781612937565b835b9050600061294582866153e1565b90506129528d8d84613f44565b8b6001600160a01b03168d6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd559084876040516129a0929190918252602082015260400190565b60405180910390a36000811180156129c2575060ca546001600160a01b031615155b15612aa65760ca5460405163a9059cbb60e01b81526001600160a01b038f81166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4d9190614e82565b508b6001600160a01b03168d6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612a9d929190918252602082015260400190565b60405180910390a35b505050612af6565b60405162461bcd60e51b815260206004820152601e60248201527f556e7265636f676e697a656420636865636b706f696e7420616374696f6e000060448201526064016107ea565b5050505050613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054612b3e90613059565b6001600160a01b03808816600090815260cb60209081526040808320938a16835292905220909150612b6e612537565b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015612ba957600080fd5b505afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190614d20565b6001600160a01b038816600090815260cf602052604081205491925090612c0a5760db54612c24565b6001600160a01b038816600090815260cf60205260409020545b9050600080612c77856000015486600301548588600101548e6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016126fa91906001600160a01b0391909116815260200190565b9092509050612c86818361516b565b60d86000828254612c97919061516b565b9091555050600385018390554260028601556001600160a01b038a16600090815260ce602052604081208054839290612cd190849061516b565b909155505060d05460ff168015612ced5750600485015460ff16155b15612d1c5760048501805460ff1916600190811790915560cc8054600090612d169084906153e1565b90915550505b81612d2b575050505050612ffb565b6000896001811115612d3f57612d3f615467565b1415612e275760ca5460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612d9357600080fd5b505af1158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb9190614e82565b50896001600160a01b03168b6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051612e1a929190918252602082015260400190565b60405180910390a3612ff5565b6001896001811115612e3b57612e3b615467565b1415612aae576000612e4c8b610e92565b90506000838211612e5d5781612e5f565b835b90506000612e6d82866153e1565b9050612e7a8e8e84613f44565b8c6001600160a01b03168e6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd55908487604051612ec8929190918252602082015260400190565b60405180910390a3600081118015612eea575060ca546001600160a01b031615155b15612ff15760ca60009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb8f836040518363ffffffff1660e01b8152600401612f469291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f989190614e82565b508c6001600160a01b03168e6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612fe8929190918252602082015260400190565b60405180910390a35b5050505b50505050505b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061302c90613059565b60d654613039919061516b565b61304391906153e1565b60d6555060dd805460ff191690555b5050505050565b60008161306857506000919050565b6003821161307857506001919050565b6000600261308784600161516b565b61309191906151b1565b90508291505b818110156130ca579050806002816130af81866151b1565b6130b9919061516b565b6130c391906151b1565b9050613097565b50919050565b60d0546040517f099aba560000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000926101009004169063099aba569060240160206040518083038186803b15801561313457600080fd5b505afa158015613148573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190614e82565b610b25828261257c565b600081516014146131c95760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642064617461206c656e67746820666f7220616464726573730060448201526064016107ea565b506014015190565b60dd548390839060ff1615613299576131e9846130d0565b6132355760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000831161327d5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613289858560016125c0565b613294858585613f44565b613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546132d790613059565b90506132e2856130d0565b61332e5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b600084116133765760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613382868660016125c0565b612ffb868686613f44565b60dd546000908490849060ff1615613697576133a8856130d0565b6133f45760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808716600090815260cb6020908152604080832093891683529290522060018101548514801561343757613432888860006125c0565b613443565b613443888860016125c0565b6001600160a01b03808916600090815260cb60209081526040808320938b1683529290522060028101549092506134bc5760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b85826001015410156134cd57600080fd5b60018201546000906134e46402540be40089615383565b6134ee91906151b1565b905060006402540be4008285600001546135089190615383565b61351291906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561355a57600080fd5b505afa15801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614fdb565b10156135ea5760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b878460010160008282546135fe91906153e1565b90915550508354819085906000906136179084906153e1565b925050819055508060d4600082825461363091906153e1565b909155505083541580156136495750600484015460ff16155b156136785760048401805460ff1916600190811790915560cc80546000906136729084906153e1565b90915550505b6136828989613ffc565b61368c8a82614079565b9550613a2092505050565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546136d590613059565b90506136e0866130d0565b61372c5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808816600090815260cb60209081526040808320938a1683529290522060018101548614801561376f5761376a898960006125c0565b61377b565b61377b898960016125c0565b6001600160a01b03808a16600090815260cb60209081526040808320938c1683529290522060028101549092506137f45760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b868260010154101561380557600080fd5b600182015460009061381c6402540be4008a615383565b61382691906151b1565b905060006402540be4008285600001546138409190615383565b61384a91906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190614fdb565b10156139225760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b8884600101600082825461393691906153e1565b909155505083548190859060009061394f9084906153e1565b925050819055508060d4600082825461396891906153e1565b909155505083541580156139815750600484015460ff16155b156139b05760048401805460ff1916600190811790915560cc80546000906139aa9084906153e1565b90915550505b6139ba8a8a613ffc565b6139c48b82614079565b96505050506001600160a01b03808416600090815260cb602090815260408083209386168352929052205481906139fa90613059565b60d654613a07919061516b565b613a1191906153e1565b60d6555060dd805460ff191690555b50509392505050565b6000610f6783836140ff565b600054610100900460ff16613ab25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107ea565b565b6000806000613ac38585614129565b91509150600080613ad484846144fc565b915091506000613ae48383614742565b9050306001600160a01b031663d19905386040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b579190614fdb565b613b619082615383565b98975050505050505050565b600080806402540be400613b8188886153e1565b613b8a8a613059565b613b949190615383565b613b9e91906151b1565b90506000613bad8287876147a5565b9050613bb981836153e1565b999098509650505050505050565b6000610784825490565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061078457506301ffc9a760e01b6001600160e01b0319831614610784565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b2557613c5d816001600160a01b03166014614843565b613c68836020614843565b604051602001613c79929190615078565b60408051601f198184030181529082905262461bcd60e51b82526107ea916004016150f9565b6000613cb2826301ffc9a760e01b613cd2565b80156107845750613ccb826001600160e01b0319613cd2565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613d4e90869061505c565b6000604051808303818686fa925050503d8060008114613d8a576040519150601f19603f3d011682016040523d82523d6000602084013e613d8f565b606091505b5091509150602081511015613daa5760009350505050610784565b818015613dc6575080806020019051810190613dc69190614e82565b9695505050505050565b600081518351148015610f675750508051602091820120825192909101919091201490565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b255760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613e533390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f67836001600160a01b038416614a24565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610b255760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f67836001600160a01b038416614a73565b6000613f4f82610d3c565b6001600160a01b03808616600090815260cb60209081526040808320938816835292905220805491925090613fa357600160cc6000828254613f91919061516b565b909155505060048101805460ff191690555b82816000016000828254613fb7919061516b565b9250508190555081816001016000828254613fd2919061516b565b925050819055508260d46000828254613feb919061516b565b909155506130529050858584614b66565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03831690639dc29fac90604401600060405180830381600087803b15801561405d57600080fd5b505af1158015614071573d6000803e3d6000fd5b505050505050565b60ca5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156140c757600080fd5b505af11580156140db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190614e82565b600082600001828154811061411657614116615493565b9060005260206000200154905092915050565b600080306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561416557600080fd5b505afa158015614179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419d9190614fdb565b8311158061421b5750306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141df57600080fd5b505afa1580156141f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142179190614fdb565b8410155b1561430b57306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614fdb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156142ca57600080fd5b505afa1580156142de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143029190614fdb565b915091506144f5565b6000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561434657600080fd5b505afa15801561435a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437e9190614fdb565b851061438a57846143fb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156143c357600080fd5b505afa1580156143d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fb9190614fdb565b90506000306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561443857600080fd5b505afa15801561444c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144709190614fdb565b851161447c57846144ed565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156144b557600080fd5b505afa1580156144c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ed9190614fdb565b919350909150505b9250929050565b6000806000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561453a57600080fd5b505afa15801561454e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145729190614fdb565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ab57600080fd5b505afa1580156145bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e39190614fdb565b6145ed91906153e1565b905080614602576000600192509250506144f5565b6000816402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561464457600080fd5b505afa158015614658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061467c9190614fdb565b61468690896153e1565b6146909190615383565b61469a91906151b1565b90506000826402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156146de57600080fd5b505afa1580156146f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147169190614fdb565b61472090896153e1565b61472a9190615383565b61473491906151b1565b919791965090945050505050565b60008061474f6000614c9d565b61475d6402540be400614c9d565b61476791906153a2565b9050600061477485614c9d565b61477d85614c9d565b61478791906153a2565b905060008261479b6402540be400846152fc565b613dc69190615183565b6000806147bf6147ba6402540be40086615383565b613059565b905060006147d56147ba6402540be40086615383565b905060006147e3828461516b565b6147f26402540be40084615383565b6147fc91906151b1565b905060006402540be400614810838a615383565b61481a91906151b1565b9050600061482960648a6151b1565b905080821015614837578091505b50979650505050505050565b60606000614852836002615383565b61485d90600261516b565b67ffffffffffffffff811115614875576148756154a9565b6040519080825280601f01601f19166020018201604052801561489f576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106148d6576148d6615493565b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061492157614921615493565b60200101906001600160f81b031916908160001a9053506000614945846002615383565b61495090600161516b565b90505b60018111156149d5577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061499157614991615493565b1a60f81b8282815181106149a7576149a7615493565b60200101906001600160f81b031916908160001a90535060049490941c936149ce81615424565b9050614953565b508315610f675760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107ea565b6000818152600183016020526040812054614a6b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610784565b506000610784565b60008181526001830160205260408120548015614b5c576000614a976001836153e1565b8554909150600090614aab906001906153e1565b9050818114614b10576000866000018281548110614acb57614acb615493565b9060005260206000200154905080876000018481548110614aee57614aee615493565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614b2157614b2161547d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610784565b6000915050610784565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390528316906340c10f1990604401600060405180830381600087803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cf6020526040902054158015614c7757506000826001600160a01b0316633e0075a16040518163ffffffff1660e01b815260040160206040518083038186803b158015614c3d57600080fd5b505afa158015614c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c759190614fdb565b115b15610a985760db546001600160a01b038316600090815260cf6020526040902055505050565b6000816402540be40081614cb26002836152ed565b614cbc91906152fc565b614cc76002846152ed565b614cd190836152fc565b6003614cdd81866152ed565b614ce79190615183565b614cf191906153a2565b614cfb919061512c565b949350505050565b600060208284031215614d1557600080fd5b8135610f67816154bf565b600060208284031215614d3257600080fd5b8151610f67816154bf565b60008060408385031215614d5057600080fd5b8235614d5b816154bf565b91506020830135614d6b816154bf565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d96816154bf565b92506020840135614da6816154bf565b929592945050506040919091013590565b600080600080600060808688031215614dcf57600080fd5b8535614dda816154bf565b94506020860135614dea816154bf565b935060408601359250606086013567ffffffffffffffff80821115614e0e57600080fd5b818801915088601f830112614e2257600080fd5b813581811115614e3157600080fd5b896020828501011115614e4357600080fd5b9699959850939650602001949392505050565b60008060408385031215614e6957600080fd5b8235614e74816154bf565b946020939093013593505050565b600060208284031215614e9457600080fd5b81518015158114610f6757600080fd5b600060208284031215614eb657600080fd5b5035919050565b60008060408385031215614ed057600080fd5b823591506020830135614d6b816154bf565b60008060408385031215614ef557600080fd5b50508035926020909101359150565b600060208284031215614f1657600080fd5b81356001600160e01b031981168114610f6757600080fd5b600060208284031215614f4057600080fd5b815167ffffffffffffffff80821115614f5857600080fd5b818401915084601f830112614f6c57600080fd5b815181811115614f7e57614f7e6154a9565b604051601f8201601f19908116603f01168101908382118183101715614fa657614fa66154a9565b81604052828152876020848701011115614fbf57600080fd5b614fd08360208301602088016153f8565b979650505050505050565b600060208284031215614fed57600080fd5b5051919050565b600080600080600080600060e0888a03121561500f57600080fd5b873596506020880135955060408801359450606088013561502f816154bf565b9350608088013561503f816154bf565b9699959850939692959460a0840135945060c09093013592915050565b6000825161506e8184602087016153f8565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516150b08160178501602088016153f8565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516150ed8160288401602088016153f8565b01602801949350505050565b60208152600082518060208401526151188160408501602087016153f8565b601f01601f19169190910160400192915050565b6000808212826001600160ff1b030384138115161561514d5761514d61543b565b82600160ff1b0384128116156151655761516561543b565b50500190565b6000821982111561517e5761517e61543b565b500190565b60008261519257615192615451565b600160ff1b8214600019841416156151ac576151ac61543b565b500590565b6000826151c0576151c0615451565b500490565b80825b60018086116151d757506120e6565b816001600160ff1b03048211156151f0576151f061543b565b808616156151fd57918102915b9490941c9380026151c8565b600082801561521f576001811461522957615232565b6001915050610784565b82915050610784565b508161524057506000610784565b5060016000821380821461525957801561527757615290565b826001600160ff1b03048311156152725761527261543b565b615290565b826001600160ff1b03058312156152905761529061543b565b508083161561529c5750805b6152ac8360011c838402836151c5565b806001600160ff1b030482116000831316156152ca576152ca61543b565b80600160ff1b0582126000831216156152e5576152e561543b565b029392505050565b6000610f6760ff841683615209565b60006001600160ff1b036000841360008413858304851182821616156153245761532461543b565b600160ff1b60008712868205881281841616156153435761534361543b565b6000871292508782058712848416161561535f5761535f61543b565b878505871281841616156153755761537561543b565b505050929093029392505050565b600081600019048311821515161561539d5761539d61543b565b500290565b600080831283600160ff1b018312811516156153c0576153c061543b565b836001600160ff1b030183138116156153db576153db61543b565b50500390565b6000828210156153f3576153f361543b565b500390565b60005b838110156154135781810151838201526020016153fb565b838111156113455750506000910152565b6000816154335761543361543b565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461223357600080fdfea26469706673582212205ae51ee02aa8729497d62ad100e81b08c81aa731b2beedf622adb7897659f3f164736f6c63430008070033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061034c5760003560e01c806390484673116101bd578063be9a6555116100f9578063d547741f116100a2578063ef5cfb8c1161007c578063ef5cfb8c14610742578063efbe1c1c14610755578063f18d20be1461075e578063fc0c546a1461076657600080fd5b8063d547741f14610719578063ed2f23691461072c578063ee0708051461073557600080fd5b8063ca15c873116100d3578063ca15c873146106ea578063d1990538146106fd578063d4ce57891461070657600080fd5b8063be9a6555146106c1578063bf55bd97146106ca578063c45a0155146106d257600080fd5b8063a217fddf11610166578063aa0b017911610140578063aa0b017914610675578063aef2200d1461069d578063b0e31b2d146106b0578063b435842c146106b957600080fd5b8063a217fddf146105f0578063a4e47b66146105f8578063a8bc58f21461066d57600080fd5b8063977bee8e11610197578063977bee8e146105c2578063992642e5146105d55780639e1a4d19146105e857600080fd5b8063904846731461056d57806391b70f601461057657806391d148541461058957600080fd5b806342d866931161028c57806371f19f94116102355780637ff9b5961161020f5780637ff9b596146104fa57806388a7ca5c146105035780638ba2855d1461052f5780639010d07c1461054257600080fd5b806371f19f94146104b45780637773a92b146104c75780637eefc525146104e757600080fd5b8063683b443011610266578063683b4430146104855780636a0675cf146104985780636a61e5fc146104a157600080fd5b806342d866931461045657806343f49d89146104695780634be1c7961461047c57600080fd5b80632f2770db116102f95780633a98ef39116102d35780633a98ef39146104085780633b039b9e146104105780633dbf35631461042357806342c0e5ef1461044357600080fd5b80632f2770db146103da5780632f2ff15d146103e257806336568abe146103f557600080fd5b806322b3a6a11161032a57806322b3a6a1146103a5578063248a9ca3146103ae57806325b58c87146103d157600080fd5b806301ffc9a714610351578063144fa6d7146103795780631ea18fc51461038e575b600080fd5b61036461035f366004614f04565b610779565b60405190151581526020015b60405180910390f35b61038c610387366004614d03565b61078a565b005b61039760d25481565b604051908152602001610370565b61039760d65481565b6103976103bc366004614ea4565b60009081526065602052604090206001015490565b61039760d35481565b61038c6109fd565b61038c6103f0366004614ebd565b610a73565b61038c610403366004614ebd565b610a9d565b60d454610397565b61036461041e366004614d03565b610b29565b610397610431366004614d03565b60ce6020526000908152604090205481565b610397610451366004614ea4565b610d3c565b610364610464366004614d03565b610d5e565b610397610477366004614d03565b610e92565b61039760db5481565b61038c610493366004614d03565b610f6e565b61039760d85481565b61038c6104af366004614ea4565b611126565b61038c6104c2366004614ea4565b611137565b6103976104d5366004614d03565b60cf6020526000908152604090205481565b6103976104f5366004614ea4565b61134b565b61039760d15481565b610516610511366004614db7565b611363565b6040516001600160e01b03199091168152602001610370565b61036461053d366004614d3d565b6116b9565b610555610550366004614ee2565b61178f565b6040516001600160a01b039091168152602001610370565b61039760dc5481565b61038c610584366004614ff4565b6117a7565b610364610597366004614ebd565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6103646105d0366004614e56565b6119e0565b60c954610555906001600160a01b031681565b610397611ea6565b610397600081565b610643610606366004614d3d565b60cb602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a001610370565b610397611f28565b610688610683366004614d76565b611f47565b60408051928352602083019190915201610370565b6103976106ab366004614ea4565b6120ee565b61039760d45481565b6103976120fc565b61039760d95481565b61038c61212d565b60d0546105559061010090046001600160a01b031681565b6103976106f8366004614ea4565b612236565b61039760d75481565b610397610714366004614ea4565b61224d565b61038c610727366004614ebd565b612266565b61039760cc5481565b60d0546103649060ff1681565b610364610750366004614d03565b61228b565b61039760da5481565b61038c6122a0565b60ca54610555906001600160a01b031681565b6000610784826124c7565b92915050565b600061079581612505565b60ca546001600160a01b0316156107f35760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166108495760405162461bcd60e51b815260206004820152601360248201527f41646472657373206d757374206265207365740000000000000000000000000060448201526064016107ea565b61087c6001600160a01b0383167f36372b070000000000000000000000000000000000000000000000000000000061250f565b6108c85760405162461bcd60e51b815260206004820152601760248201527f6e6f7420612076616c696420455243323020746f6b656e00000000000000000060448201526064016107ea565b6000829050610980816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561090957600080fd5b505afa15801561091d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109459190810190614f2e565b6040518060400160405280600381526020017f54414c000000000000000000000000000000000000000000000000000000000081525061252b565b6109cc5760405162461bcd60e51b815260206004820152601560248201527f746f6b656e206e616d65206973206e6f742054414c000000000000000000000060448201526064016107ea565b505060ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a0881612505565b60d05460ff1615610a5b5760405162461bcd60e51b815260206004820152601060248201527f616c72656164792064697361626c65640000000000000000000000000000000060448201526064016107ea565b610a63612537565b5060d0805460ff19166001179055565b600082815260656020526040902060010154610a8e81612505565b610a98838361257c565b505050565b6001600160a01b0381163314610b1b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016107ea565b610b25828261259e565b5050565b6000610b3f60ca546001600160a01b0316151590565b610b8b5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b816001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015610bc457600080fd5b505afa158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfc9190614d20565b6001600160a01b0316336001600160a01b031614610c825760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652074616c656e742063616e2077697468647261772074686560448201527f6972206f776e207368617265730000000000000000000000000000000000000060648201526084016107ea565b6001600160a01b03828116600090815260ce6020526040908190205460ca54915163a9059cbb60e01b8152336004820152602481018290529092919091169063a9059cbb90604401602060405180830381600087803b158015610ce457600080fd5b505af1158015610cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d1c9190614e82565b5050506001600160a01b0316600090815260ce6020526040812055600190565b60d254600090610d5483670de0b6b3a7640000615383565b61078491906151b1565b6000610d7460ca546001600160a01b0316151590565b610dc05760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60dd543390839060ff1615610de457610ddb338560006125c0565b60019250610e8b565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054610e2290613059565b9050610e30338660006125c0565b600193506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190610e6590613059565b60d654610e72919061516b565b610e7c91906153e1565b60d6555060dd805460ff191690555b5050919050565b6000610e9d826130d0565b610ee95760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000826001600160a01b031663aafa93716040518163ffffffff1660e01b815260040160206040518083038186803b158015610f2457600080fd5b505afa158015610f38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5c9190614fdb565b9050610f678161224d565b9392505050565b600054610100900460ff1615808015610f8e5750600054600160ff909116105b80610fa85750303b158015610fa8575060005460ff166001145b61100b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff19166001179055801561102e576000805461ff0019166101001790555b6001600160a01b0382166110aa5760405162461bcd60e51b815260206004820152602160248201527f737461626c652d636f696e2061646472657373206d7573742062652076616c6960448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790556110dd60003361316c565b8015610b25576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061113181612505565b5060d155565b600061114281612505565b60ca546001600160a01b031661119a5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f742079657420736574000000000000000000000060448201526064016107ea565b60d3548211156112125760405162461bcd60e51b815260206004820152602b60248201527f6e6f7420656e6f75676820737461626c6520636f696e206c65667420696e207460448201527f686520636f6e747261637400000000000000000000000000000000000000000060648201526084016107ea565b600061121d8361134b565b90508260d3600082825461123191906153e1565b909155505060ca546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b15801561128857600080fd5b505af115801561129c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c09190614e82565b5060c95460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561130d57600080fd5b505af1158015611321573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113459190614e82565b50505050565b60d154600090610d5483670de0b6b3a7640000615383565b600060d9544210156113b75760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da544211156114095760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031633141561152f5760d05460ff161561146f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b60006114b084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061317692505050565b90506114bd8682876131d1565b60408051868152600060208201526001600160a01b0380841692908916917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf9150506116b0565b611538336130d0565b156116425760ca546001600160a01b03166115bb5760405162461bcd60e51b815260206004820152602a60248201527f54414c20746f6b656e206e6f7420796574207365742e20526566756e64206e6f60448201527f7420706f737369626c650000000000000000000000000000000000000000000060648201526084016107ea565b3360006115c987838861338d565b9050816001600160a01b0316876001600160a01b03167f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c8360405161161091815260200190565b60405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf925050506116b0565b60405162461bcd60e51b815260206004820152602360248201527f556e7265636f676e697a6564204552433133363320746f6b656e20726563656960448201527f766564000000000000000000000000000000000000000000000000000000000060648201526084016107ea565b95945050505050565b60dd546000908390839060ff16156116e0576116d7858560016125c0565b60019250611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb6020908152604080832093851683529290529081205461171e90613059565b905061172c868660016125c0565b600193506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60d65461176e919061516b565b61177891906153e1565b60d6555060dd805460ff191690555b505092915050565b6000828152609760205260408120610f679083613a29565b600054610100900460ff16158080156117c75750600054600160ff909116105b806117e15750303b1580156117e1575060005460ff166001145b6118445760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff191660011790558015611867576000805461ff0019166101001790555b600083116118b75760405162461bcd60e51b815260206004820152601760248201527f5f746f6b656e50726963652063616e6e6f74206265203000000000000000000060448201526064016107ea565b600082116119075760405162461bcd60e51b815260206004820152601860248201527f5f74616c656e7450726963652063616e6e6f742062652030000000000000000060448201526064016107ea565b61190f613a35565b611917613a35565b61191f613a35565b61192885610f6e565b61193061212d565b60d988905560da87905560d786905560d080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0387160217905560d183905560d282905560dc88905561199060003361316c565b80156119d6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600060d954421015611a345760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f74207965742073746172746564000060448201526064016107ea565b60da54421115611a865760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e69736865640060448201526064016107ea565b60ca546001600160a01b031615611adf5760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064016107ea565b60dd543390849060ff1615611c945760008411611b365760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611b895760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611b948561134b565b90508460d36000828254611ba8919061516b565b90915550611bb990503387836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611c0b57600080fd5b505af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190614e82565b5060408051828152600160208201526001600160a01b0388169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a36001935050611787565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054611cd290613059565b905060008511611d1c5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b60d05460ff1615611d6f5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c65640000000000000060448201526064016107ea565b6000611d7a8661134b565b90508560d36000828254611d8e919061516b565b90915550611d9f90503388836131d1565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611df157600080fd5b505af1158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190614e82565b5060408051828152600160208201526001600160a01b0389169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019450506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061176190613059565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b60206040518083038186803b158015611eeb57600080fd5b505afa158015611eff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f239190614fdb565b905090565b600060d55460d85460d754611f3d91906153e1565b611f2391906153e1565b6001600160a01b03808416600090815260cb60209081526040808320938616835292815282822060cf9091529181205490918291829015611fa157506001600160a01b038516600090815260cf6020526040902054611fca565b60d654611fb060dc5487613ab4565b611fba91906151b1565b60db54611fc7919061516b565b90505b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561200557600080fd5b505afa158015612019573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203d9190614d20565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918916906370a082319060240160206040518083038186803b15801561208457600080fd5b505afa158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614fdb565b90506000806120da8660000154876003015487896001015487613b6d565b90985096505050505050505b935093915050565b60006107846104518361134b565b60c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611ed3565b600054610100900460ff161580801561214d5750600054600160ff909116105b806121675750303b158015612167575060005460ff166001145b6121ca5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ea565b6000805460ff1916600117905580156121ed576000805461ff0019166101001790555b8015612233576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600081815260976020526040812061078490613bc7565b6000670de0b6b3a764000060d25483610d549190615383565b60008281526065602052604090206001015461228181612505565b610a98838361259e565b600061229733836116b9565b50600192915050565b60006122ab81612505565b60d05460ff16806122bd575060da5442105b61232f5760405162461bcd60e51b815260206004820152602b60248201527f6e6f742064697361626c65642c20616e64206e6f7420656e64206f662073746160448201527f6b696e672065697468657200000000000000000000000000000000000000000060648201526084016107ea565b60cc54156123cb5760405162461bcd60e51b815260206004820152605060248201527f746865726520617265207374696c6c207374616b657320616363756d756c617460448201527f696e6720726577617264732e2043616c6c2060636c61696d526577617264734f60648201527f6e426568616c6660206f6e207468656d00000000000000000000000000000000608482015260a4016107ea565b60006123d5611f28565b9050600081116124275760405162461bcd60e51b815260206004820152601860248201527f6e6f7468696e67206c65667420746f207769746864726177000000000000000060448201526064016107ea565b60ca5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561247357600080fd5b505af1158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab9190614e82565b508060d560008282546124be919061516b565b90915550505050565b60006001600160e01b031982167f5a05180f000000000000000000000000000000000000000000000000000000001480610784575061078482613bd1565b6122338133613c1f565b600061251a83613c9f565b8015610f675750610f678383613cd2565b6000610f678383613dd0565b60d05460ff161561254457565b60d45461254d57565b60d65461255c60dc5442613ab4565b61256691906151b1565b60db54612573919061516b565b60db554260dc55565b6125868282613df5565b6000828152609760205260409020610a989082613e97565b6125a88282613eac565b6000828152609760205260409020610a989082613f2f565b60dd548390839060ff1615612b00576001600160a01b03808616600090815260cb602090815260408083209388168352929052206125fc612537565b6000856001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561263757600080fd5b505afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f9190614d20565b6001600160a01b038716600090815260cf6020526040812054919250906126985760db546126b2565b6001600160a01b038716600090815260cf60205260409020545b8354600385015460018601546040516370a0823160e01b81526001600160a01b038781166004830152949550600094859461274f949093909288928f16906370a08231906024015b60206040518083038186803b15801561271257600080fd5b505afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190614fdb565b613b6d565b909250905061275e818361516b565b60d8600082825461276f919061516b565b9091555050600385018390554260028601556001600160a01b038916600090815260ce6020526040812080548392906127a990849061516b565b909155505060d05460ff1680156127c55750600485015460ff16155b156127f45760048501805460ff1916600190811790915560cc80546000906127ee9084906153e1565b90915550505b81612803575050505050613052565b600088600181111561281757612817615467565b14156128ff5760ca5460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b15801561286b57600080fd5b505af115801561287f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a39190614e82565b50886001600160a01b03168a6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f384846040516128f2929190918252602082015260400190565b60405180910390a3612af6565b600188600181111561291357612913615467565b1415612aae5760006129248a610e92565b905060008382116129355781612937565b835b9050600061294582866153e1565b90506129528d8d84613f44565b8b6001600160a01b03168d6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd559084876040516129a0929190918252602082015260400190565b60405180910390a36000811180156129c2575060ca546001600160a01b031615155b15612aa65760ca5460405163a9059cbb60e01b81526001600160a01b038f81166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015612a1557600080fd5b505af1158015612a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a4d9190614e82565b508b6001600160a01b03168d6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612a9d929190918252602082015260400190565b60405180910390a35b505050612af6565b60405162461bcd60e51b815260206004820152601e60248201527f556e7265636f676e697a656420636865636b706f696e7420616374696f6e000060448201526064016107ea565b5050505050613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054612b3e90613059565b6001600160a01b03808816600090815260cb60209081526040808320938a16835292905220909150612b6e612537565b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015612ba957600080fd5b505afa158015612bbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be19190614d20565b6001600160a01b038816600090815260cf602052604081205491925090612c0a5760db54612c24565b6001600160a01b038816600090815260cf60205260409020545b9050600080612c77856000015486600301548588600101548e6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016126fa91906001600160a01b0391909116815260200190565b9092509050612c86818361516b565b60d86000828254612c97919061516b565b9091555050600385018390554260028601556001600160a01b038a16600090815260ce602052604081208054839290612cd190849061516b565b909155505060d05460ff168015612ced5750600485015460ff16155b15612d1c5760048501805460ff1916600190811790915560cc8054600090612d169084906153e1565b90915550505b81612d2b575050505050612ffb565b6000896001811115612d3f57612d3f615467565b1415612e275760ca5460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612d9357600080fd5b505af1158015612da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dcb9190614e82565b50896001600160a01b03168b6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051612e1a929190918252602082015260400190565b60405180910390a3612ff5565b6001896001811115612e3b57612e3b615467565b1415612aae576000612e4c8b610e92565b90506000838211612e5d5781612e5f565b835b90506000612e6d82866153e1565b9050612e7a8e8e84613f44565b8c6001600160a01b03168e6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd55908487604051612ec8929190918252602082015260400190565b60405180910390a3600081118015612eea575060ca546001600160a01b031615155b15612ff15760ca60009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb8f836040518363ffffffff1660e01b8152600401612f469291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b158015612f6057600080fd5b505af1158015612f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f989190614e82565b508c6001600160a01b03168e6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612fe8929190918252602082015260400190565b60405180910390a35b5050505b50505050505b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061302c90613059565b60d654613039919061516b565b61304391906153e1565b60d6555060dd805460ff191690555b5050505050565b60008161306857506000919050565b6003821161307857506001919050565b6000600261308784600161516b565b61309191906151b1565b90508291505b818110156130ca579050806002816130af81866151b1565b6130b9919061516b565b6130c391906151b1565b9050613097565b50919050565b60d0546040517f099aba560000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000926101009004169063099aba569060240160206040518083038186803b15801561313457600080fd5b505afa158015613148573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107849190614e82565b610b25828261257c565b600081516014146131c95760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642064617461206c656e67746820666f7220616464726573730060448201526064016107ea565b506014015190565b60dd548390839060ff1615613299576131e9846130d0565b6132355760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6000831161327d5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613289858560016125c0565b613294858585613f44565b613052565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546132d790613059565b90506132e2856130d0565b61332e5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b600084116133765760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b60448201526064016107ea565b613382868660016125c0565b612ffb868686613f44565b60dd546000908490849060ff1615613697576133a8856130d0565b6133f45760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808716600090815260cb6020908152604080832093891683529290522060018101548514801561343757613432888860006125c0565b613443565b613443888860016125c0565b6001600160a01b03808916600090815260cb60209081526040808320938b1683529290522060028101549092506134bc5760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b85826001015410156134cd57600080fd5b60018201546000906134e46402540be40089615383565b6134ee91906151b1565b905060006402540be4008285600001546135089190615383565b61351291906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561355a57600080fd5b505afa15801561356e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135929190614fdb565b10156135ea5760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b878460010160008282546135fe91906153e1565b90915550508354819085906000906136179084906153e1565b925050819055508060d4600082825461363091906153e1565b909155505083541580156136495750600484015460ff16155b156136785760048401805460ff1916600190811790915560cc80546000906136729084906153e1565b90915550505b6136828989613ffc565b61368c8a82614079565b9550613a2092505050565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546136d590613059565b90506136e0866130d0565b61372c5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e000000000000000060448201526064016107ea565b6001600160a01b03808816600090815260cb60209081526040808320938a1683529290522060018101548614801561376f5761376a898960006125c0565b61377b565b61377b898960016125c0565b6001600160a01b03808a16600090815260cb60209081526040808320938c1683529290522060028101549092506137f45760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f7420657869737400000000000000000000000060448201526064016107ea565b868260010154101561380557600080fd5b600182015460009061381c6402540be4008a615383565b61382691906151b1565b905060006402540be4008285600001546138409190615383565b61384a91906151b1565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561389257600080fd5b505afa1580156138a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ca9190614fdb565b10156139225760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b60648201526084016107ea565b8884600101600082825461393691906153e1565b909155505083548190859060009061394f9084906153e1565b925050819055508060d4600082825461396891906153e1565b909155505083541580156139815750600484015460ff16155b156139b05760048401805460ff1916600190811790915560cc80546000906139aa9084906153e1565b90915550505b6139ba8a8a613ffc565b6139c48b82614079565b96505050506001600160a01b03808416600090815260cb602090815260408083209386168352929052205481906139fa90613059565b60d654613a07919061516b565b613a1191906153e1565b60d6555060dd805460ff191690555b50509392505050565b6000610f6783836140ff565b600054610100900460ff16613ab25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016107ea565b565b6000806000613ac38585614129565b91509150600080613ad484846144fc565b915091506000613ae48383614742565b9050306001600160a01b031663d19905386040518163ffffffff1660e01b815260040160206040518083038186803b158015613b1f57600080fd5b505afa158015613b33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b579190614fdb565b613b619082615383565b98975050505050505050565b600080806402540be400613b8188886153e1565b613b8a8a613059565b613b949190615383565b613b9e91906151b1565b90506000613bad8287876147a5565b9050613bb981836153e1565b999098509650505050505050565b6000610784825490565b60006001600160e01b031982167f7965db0b00000000000000000000000000000000000000000000000000000000148061078457506301ffc9a760e01b6001600160e01b0319831614610784565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b2557613c5d816001600160a01b03166014614843565b613c68836020614843565b604051602001613c79929190615078565b60408051601f198184030181529082905262461bcd60e51b82526107ea916004016150f9565b6000613cb2826301ffc9a760e01b613cd2565b80156107845750613ccb826001600160e01b0319613cd2565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613d4e90869061505c565b6000604051808303818686fa925050503d8060008114613d8a576040519150601f19603f3d011682016040523d82523d6000602084013e613d8f565b606091505b5091509150602081511015613daa5760009350505050610784565b818015613dc6575080806020019051810190613dc69190614e82565b9695505050505050565b600081518351148015610f675750508051602091820120825192909101919091201490565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b255760008281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055613e533390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f67836001600160a01b038416614a24565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610b255760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f67836001600160a01b038416614a73565b6000613f4f82610d3c565b6001600160a01b03808616600090815260cb60209081526040808320938816835292905220805491925090613fa357600160cc6000828254613f91919061516b565b909155505060048101805460ff191690555b82816000016000828254613fb7919061516b565b9250508190555081816001016000828254613fd2919061516b565b925050819055508260d46000828254613feb919061516b565b909155506130529050858584614b66565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03831690639dc29fac90604401600060405180830381600087803b15801561405d57600080fd5b505af1158015614071573d6000803e3d6000fd5b505050505050565b60ca5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156140c757600080fd5b505af11580156140db573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a989190614e82565b600082600001828154811061411657614116615493565b9060005260206000200154905092915050565b600080306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561416557600080fd5b505afa158015614179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061419d9190614fdb565b8311158061421b5750306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156141df57600080fd5b505afa1580156141f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142179190614fdb565b8410155b1561430b57306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561425957600080fd5b505afa15801561426d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142919190614fdb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156142ca57600080fd5b505afa1580156142de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143029190614fdb565b915091506144f5565b6000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561434657600080fd5b505afa15801561435a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061437e9190614fdb565b851061438a57846143fb565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156143c357600080fd5b505afa1580156143d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143fb9190614fdb565b90506000306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561443857600080fd5b505afa15801561444c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144709190614fdb565b851161447c57846144ed565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156144b557600080fd5b505afa1580156144c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144ed9190614fdb565b919350909150505b9250929050565b6000806000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561453a57600080fd5b505afa15801561454e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145729190614fdb565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156145ab57600080fd5b505afa1580156145bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145e39190614fdb565b6145ed91906153e1565b905080614602576000600192509250506144f5565b6000816402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561464457600080fd5b505afa158015614658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061467c9190614fdb565b61468690896153e1565b6146909190615383565b61469a91906151b1565b90506000826402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156146de57600080fd5b505afa1580156146f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147169190614fdb565b61472090896153e1565b61472a9190615383565b61473491906151b1565b919791965090945050505050565b60008061474f6000614c9d565b61475d6402540be400614c9d565b61476791906153a2565b9050600061477485614c9d565b61477d85614c9d565b61478791906153a2565b905060008261479b6402540be400846152fc565b613dc69190615183565b6000806147bf6147ba6402540be40086615383565b613059565b905060006147d56147ba6402540be40086615383565b905060006147e3828461516b565b6147f26402540be40084615383565b6147fc91906151b1565b905060006402540be400614810838a615383565b61481a91906151b1565b9050600061482960648a6151b1565b905080821015614837578091505b50979650505050505050565b60606000614852836002615383565b61485d90600261516b565b67ffffffffffffffff811115614875576148756154a9565b6040519080825280601f01601f19166020018201604052801561489f576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106148d6576148d6615493565b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061492157614921615493565b60200101906001600160f81b031916908160001a9053506000614945846002615383565b61495090600161516b565b90505b60018111156149d5577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061499157614991615493565b1a60f81b8282815181106149a7576149a7615493565b60200101906001600160f81b031916908160001a90535060049490941c936149ce81615424565b9050614953565b508315610f675760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107ea565b6000818152600183016020526040812054614a6b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610784565b506000610784565b60008181526001830160205260408120548015614b5c576000614a976001836153e1565b8554909150600090614aab906001906153e1565b9050818114614b10576000866000018281548110614acb57614acb615493565b9060005260206000200154905080876000018481548110614aee57614aee615493565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614b2157614b2161547d565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610784565b6000915050610784565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390528316906340c10f1990604401600060405180830381600087803b158015614bc957600080fd5b505af1158015614bdd573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cf6020526040902054158015614c7757506000826001600160a01b0316633e0075a16040518163ffffffff1660e01b815260040160206040518083038186803b158015614c3d57600080fd5b505afa158015614c51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c759190614fdb565b115b15610a985760db546001600160a01b038316600090815260cf6020526040902055505050565b6000816402540be40081614cb26002836152ed565b614cbc91906152fc565b614cc76002846152ed565b614cd190836152fc565b6003614cdd81866152ed565b614ce79190615183565b614cf191906153a2565b614cfb919061512c565b949350505050565b600060208284031215614d1557600080fd5b8135610f67816154bf565b600060208284031215614d3257600080fd5b8151610f67816154bf565b60008060408385031215614d5057600080fd5b8235614d5b816154bf565b91506020830135614d6b816154bf565b809150509250929050565b600080600060608486031215614d8b57600080fd5b8335614d96816154bf565b92506020840135614da6816154bf565b929592945050506040919091013590565b600080600080600060808688031215614dcf57600080fd5b8535614dda816154bf565b94506020860135614dea816154bf565b935060408601359250606086013567ffffffffffffffff80821115614e0e57600080fd5b818801915088601f830112614e2257600080fd5b813581811115614e3157600080fd5b896020828501011115614e4357600080fd5b9699959850939650602001949392505050565b60008060408385031215614e6957600080fd5b8235614e74816154bf565b946020939093013593505050565b600060208284031215614e9457600080fd5b81518015158114610f6757600080fd5b600060208284031215614eb657600080fd5b5035919050565b60008060408385031215614ed057600080fd5b823591506020830135614d6b816154bf565b60008060408385031215614ef557600080fd5b50508035926020909101359150565b600060208284031215614f1657600080fd5b81356001600160e01b031981168114610f6757600080fd5b600060208284031215614f4057600080fd5b815167ffffffffffffffff80821115614f5857600080fd5b818401915084601f830112614f6c57600080fd5b815181811115614f7e57614f7e6154a9565b604051601f8201601f19908116603f01168101908382118183101715614fa657614fa66154a9565b81604052828152876020848701011115614fbf57600080fd5b614fd08360208301602088016153f8565b979650505050505050565b600060208284031215614fed57600080fd5b5051919050565b600080600080600080600060e0888a03121561500f57600080fd5b873596506020880135955060408801359450606088013561502f816154bf565b9350608088013561503f816154bf565b9699959850939692959460a0840135945060c09093013592915050565b6000825161506e8184602087016153f8565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516150b08160178501602088016153f8565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516150ed8160288401602088016153f8565b01602801949350505050565b60208152600082518060208401526151188160408501602087016153f8565b601f01601f19169190910160400192915050565b6000808212826001600160ff1b030384138115161561514d5761514d61543b565b82600160ff1b0384128116156151655761516561543b565b50500190565b6000821982111561517e5761517e61543b565b500190565b60008261519257615192615451565b600160ff1b8214600019841416156151ac576151ac61543b565b500590565b6000826151c0576151c0615451565b500490565b80825b60018086116151d757506120e6565b816001600160ff1b03048211156151f0576151f061543b565b808616156151fd57918102915b9490941c9380026151c8565b600082801561521f576001811461522957615232565b6001915050610784565b82915050610784565b508161524057506000610784565b5060016000821380821461525957801561527757615290565b826001600160ff1b03048311156152725761527261543b565b615290565b826001600160ff1b03058312156152905761529061543b565b508083161561529c5750805b6152ac8360011c838402836151c5565b806001600160ff1b030482116000831316156152ca576152ca61543b565b80600160ff1b0582126000831216156152e5576152e561543b565b029392505050565b6000610f6760ff841683615209565b60006001600160ff1b036000841360008413858304851182821616156153245761532461543b565b600160ff1b60008712868205881281841616156153435761534361543b565b6000871292508782058712848416161561535f5761535f61543b565b878505871281841616156153755761537561543b565b505050929093029392505050565b600081600019048311821515161561539d5761539d61543b565b500290565b600080831283600160ff1b018312811516156153c0576153c061543b565b836001600160ff1b030183138116156153db576153db61543b565b50500390565b6000828210156153f3576153f361543b565b500390565b60005b838110156154135781810151838201526020016153fb565b838111156113455750506000910152565b6000816154335761543361543b565b506000190190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461223357600080fdfea26469706673582212205ae51ee02aa8729497d62ad100e81b08c81aa731b2beedf622adb7897659f3f164736f6c63430008070033", + "bytecode": "0x608060405234801561001057600080fd5b5061581280620000216000396000f3fe608060405234801561001057600080fd5b50600436106103575760003560e01c806390484673116101c8578063b435842c11610104578063d547741f116100a2578063ef5cfb8c1161007c578063ef5cfb8c14610760578063efbe1c1c14610773578063f18d20be1461077c578063fc0c546a1461078457600080fd5b8063d547741f14610737578063ed2f23691461074a578063ee0708051461075357600080fd5b8063c45a0155116100de578063c45a0155146106f0578063ca15c87314610708578063d19905381461071b578063d4ce57891461072457600080fd5b8063b435842c146106d7578063be9a6555146106df578063bf55bd97146106e857600080fd5b8063a217fddf11610171578063aa0b01791161014b578063aa0b017914610680578063ab88c7b5146106a8578063aef2200d146106bb578063b0e31b2d146106ce57600080fd5b8063a217fddf146105fb578063a4e47b6614610603578063a8bc58f21461067857600080fd5b8063977bee8e116101a2578063977bee8e146105cd578063992642e5146105e05780639e1a4d19146105f357600080fd5b8063904846731461057857806391b70f601461058157806391d148541461059457600080fd5b806342d866931161029757806371f19f94116102405780637ff9b5961161021a5780637ff9b5961461050557806388a7ca5c1461050e5780638ba2855d1461053a5780639010d07c1461054d57600080fd5b806371f19f94146104bf5780637773a92b146104d25780637eefc525146104f257600080fd5b8063683b443011610271578063683b4430146104905780636a0675cf146104a35780636a61e5fc146104ac57600080fd5b806342d866931461046157806343f49d89146104745780634be1c7961461048757600080fd5b80632f2770db116103045780633a98ef39116102de5780633a98ef39146104135780633b039b9e1461041b5780633dbf35631461042e57806342c0e5ef1461044e57600080fd5b80632f2770db146103e55780632f2ff15d146103ed57806336568abe1461040057600080fd5b806322b3a6a11161033557806322b3a6a1146103b0578063248a9ca3146103b957806325b58c87146103dc57600080fd5b806301ffc9a71461035c578063144fa6d7146103845780631ea18fc514610399575b600080fd5b61036f61036a3660046151d9565b610797565b60405190151581526020015b60405180910390f35b610397610392366004614f0d565b6107a8565b005b6103a260d25481565b60405190815260200161037b565b6103a260d65481565b6103a26103c7366004615179565b60009081526065602052604090206001015490565b6103a260d35481565b610397610a1b565b6103976103fb366004615192565b610a91565b61039761040e366004615192565b610abb565b60d4546103a2565b61036f610429366004614f0d565b610b47565b6103a261043c366004614f0d565b60ce6020526000908152604090205481565b6103a261045c366004615179565b610d5e565b61036f61046f366004614f0d565b610d80565b6103a2610482366004614f0d565b610eb4565b6103a260db5481565b61039761049e366004614f0d565b610f90565b6103a260d85481565b6103976104ba366004615179565b611148565b6103976104cd366004615179565b611159565b6103a26104e0366004614f0d565b60cf6020526000908152604090205481565b6103a2610500366004615179565b61136d565b6103a260d15481565b61052161051c366004614fc1565b611385565b6040516001600160e01b0319909116815260200161037b565b61036f610548366004614f47565b6116db565b61056061055b3660046151b7565b6117b1565b6040516001600160a01b03909116815260200161037b565b6103a260dc5481565b61039761058f3660046152b0565b6117c9565b61036f6105a2366004615192565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61036f6105db366004615060565b611a02565b60c954610560906001600160a01b031681565b6103a2611ec8565b6103a2600081565b61064e610611366004614f47565b60cb602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161037b565b6103a2611f4a565b61069361068e366004614f80565b611f69565b6040805192835260208301919091520161037b565b6103976106b636600461508c565b612110565b6103a26106c9366004615179565b6122ed565b6103a260d45481565b6103a26122fb565b6103a260d95481565b61039761232c565b60d0546105609061010090046001600160a01b031681565b6103a2610716366004615179565b612435565b6103a260d75481565b6103a2610732366004615179565b61244c565b610397610745366004615192565b612465565b6103a260cc5481565b60d05461036f9060ff1681565b61036f61076e366004614f0d565b61248a565b6103a260da5481565b61039761249f565b60ca54610560906001600160a01b031681565b60006107a2826126c6565b92915050565b60006107b381612704565b60ca546001600160a01b0316156108115760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166108675760405162461bcd60e51b815260206004820152601360248201527f41646472657373206d75737420626520736574000000000000000000000000006044820152606401610808565b61089a6001600160a01b0383167f36372b070000000000000000000000000000000000000000000000000000000061270e565b6108e65760405162461bcd60e51b815260206004820152601760248201527f6e6f7420612076616c696420455243323020746f6b656e0000000000000000006044820152606401610808565b600082905061099e816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109639190810190615203565b6040518060400160405280600381526020017f54414c000000000000000000000000000000000000000000000000000000000081525061272a565b6109ea5760405162461bcd60e51b815260206004820152601560248201527f746f6b656e206e616d65206973206e6f742054414c00000000000000000000006044820152606401610808565b505060ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a2681612704565b60d05460ff1615610a795760405162461bcd60e51b815260206004820152601060248201527f616c72656164792064697361626c6564000000000000000000000000000000006044820152606401610808565b610a81612736565b5060d0805460ff19166001179055565b600082815260656020526040902060010154610aac81612704565b610ab6838361277b565b505050565b6001600160a01b0381163314610b395760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610808565b610b43828261279d565b5050565b6000610b5d60ca546001600160a01b0316151590565b610ba95760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f74207965742073657400000000000000000000006044820152606401610808565b816001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015610be257600080fd5b505afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614f2a565b6001600160a01b0316336001600160a01b031614610ca05760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652074616c656e742063616e2077697468647261772074686560448201527f6972206f776e20736861726573000000000000000000000000000000000000006064820152608401610808565b6001600160a01b03828116600090815260ce6020526040908190205460ca54915163a9059cbb60e01b8152336004820152602481018290529092919091169063a9059cbb90604401602060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a9190615157565b5050506001600160a01b038116600090815260ce602052604081205560015b919050565b60d254600090610d7683670de0b6b3a7640000615670565b6107a2919061549e565b6000610d9660ca546001600160a01b0316151590565b610de25760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f74207965742073657400000000000000000000006044820152606401610808565b60dd543390839060ff1615610e0657610dfd338560006127bf565b60019250610ead565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054610e4490613258565b9050610e52338660006127bf565b600193506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190610e8790613258565b60d654610e949190615458565b610e9e91906156ce565b60d6555060dd805460ff191690555b5050919050565b6000610ebf826132cf565b610f0b5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6000826001600160a01b031663aafa93716040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4657600080fd5b505afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e9190615297565b9050610f898161244c565b9392505050565b600054610100900460ff1615808015610fb05750600054600160ff909116105b80610fca5750303b158015610fca575060005460ff166001145b61102d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610808565b6000805460ff191660011790558015611050576000805461ff0019166101001790555b6001600160a01b0382166110cc5760405162461bcd60e51b815260206004820152602160248201527f737461626c652d636f696e2061646472657373206d7573742062652076616c6960448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610808565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790556110ff60003361336b565b8015610b43576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061115381612704565b5060d155565b600061116481612704565b60ca546001600160a01b03166111bc5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f74207965742073657400000000000000000000006044820152606401610808565b60d3548211156112345760405162461bcd60e51b815260206004820152602b60248201527f6e6f7420656e6f75676820737461626c6520636f696e206c65667420696e207460448201527f686520636f6e74726163740000000000000000000000000000000000000000006064820152608401610808565b600061123f8361136d565b90508260d3600082825461125391906156ce565b909155505060ca546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e29190615157565b5060c95460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190615157565b50505050565b60d154600090610d7683670de0b6b3a7640000615670565b600060d9544210156113d95760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f7420796574207374617274656400006044820152606401610808565b60da5442111561142b5760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e6973686564006044820152606401610808565b60ca546001600160a01b03163314156115515760d05460ff16156114915760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c6564000000000000006044820152606401610808565b60006114d284848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061337592505050565b90506114df8682876133d0565b60408051868152600060208201526001600160a01b0380841692908916917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf9150506116d2565b61155a336132cf565b156116645760ca546001600160a01b03166115dd5760405162461bcd60e51b815260206004820152602a60248201527f54414c20746f6b656e206e6f7420796574207365742e20526566756e64206e6f60448201527f7420706f737369626c65000000000000000000000000000000000000000000006064820152608401610808565b3360006115eb87838861358c565b9050816001600160a01b0316876001600160a01b03167f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c8360405161163291815260200190565b60405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf925050506116d2565b60405162461bcd60e51b815260206004820152602360248201527f556e7265636f676e697a6564204552433133363320746f6b656e20726563656960448201527f76656400000000000000000000000000000000000000000000000000000000006064820152608401610808565b95945050505050565b60dd546000908390839060ff1615611702576116f9858560016127bf565b600192506117a9565b60dd805460ff191660011790556001600160a01b03808316600090815260cb6020908152604080832093851683529290529081205461174090613258565b905061174e868660016127bf565b600193506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061178390613258565b60d6546117909190615458565b61179a91906156ce565b60d6555060dd805460ff191690555b505092915050565b6000828152609760205260408120610f899083613c28565b600054610100900460ff16158080156117e95750600054600160ff909116105b806118035750303b158015611803575060005460ff166001145b6118665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610808565b6000805460ff191660011790558015611889576000805461ff0019166101001790555b600083116118d95760405162461bcd60e51b815260206004820152601760248201527f5f746f6b656e50726963652063616e6e6f7420626520300000000000000000006044820152606401610808565b600082116119295760405162461bcd60e51b815260206004820152601860248201527f5f74616c656e7450726963652063616e6e6f74206265203000000000000000006044820152606401610808565b611931613c34565b611939613c34565b611941613c34565b61194a85610f90565b61195261232c565b60d988905560da87905560d786905560d080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0387160217905560d183905560d282905560dc8890556119b260003361336b565b80156119f8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600060d954421015611a565760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f7420796574207374617274656400006044820152606401610808565b60da54421115611aa85760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e6973686564006044820152606401610808565b60ca546001600160a01b031615611b015760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c65640000000000000000000000006044820152606401610808565b60dd543390849060ff1615611cb65760008411611b585760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b60d05460ff1615611bab5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c6564000000000000006044820152606401610808565b6000611bb68561136d565b90508460d36000828254611bca9190615458565b90915550611bdb90503387836133d0565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611c2d57600080fd5b505af1158015611c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c659190615157565b5060408051828152600160208201526001600160a01b0388169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019350506117a9565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054611cf490613258565b905060008511611d3e5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b60d05460ff1615611d915760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c6564000000000000006044820152606401610808565b6000611d9c8661136d565b90508560d36000828254611db09190615458565b90915550611dc190503388836133d0565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190615157565b5060408051828152600160208201526001600160a01b0389169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019450506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061178390613258565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b60206040518083038186803b158015611f0d57600080fd5b505afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190615297565b905090565b600060d55460d85460d754611f5f91906156ce565b611f4591906156ce565b6001600160a01b03808416600090815260cb60209081526040808320938616835292815282822060cf9091529181205490918291829015611fc357506001600160a01b038516600090815260cf6020526040902054611fec565b60d654611fd260dc5487613cb3565b611fdc919061549e565b60db54611fe99190615458565b90505b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561202757600080fd5b505afa15801561203b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205f9190614f2a565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918916906370a082319060240160206040518083038186803b1580156120a657600080fd5b505afa1580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190615297565b90506000806120fc8660000154876003015487896001015487613d6c565b90985096505050505050505b935093915050565b60005b8251811015610ab65733600090815260cb60205260408120845182908690859081106121415761214161579b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002090508060cb6000856001600160a01b03166001600160a01b0316815260200190815260200160002060008685815181106121a5576121a561579b565b6020908102919091018101516001600160a01b031682528181019290925260409081016000908120845481556001808601549082015560028086015490820155600380860154908201556004948501549401805460ff191660ff90951615159490941790935533835260cb9091528120855190919086908590811061222c5761222c61579b565b6020908102919091018101516001600160a01b03168252810191909152604001600090812081815560018101829055600281018290556003810191909155600401805460ff1916905583518490839081106122895761228961579b565b60200260200101516001600160a01b0316836001600160a01b0316336001600160a01b03167f5af789319f20f5f529c258bafe3790f76e116026af1e333300d3c910228dcdce60405160405180910390a450806122e581615728565b915050612113565b60006107a261045c8361136d565b60c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611ef5565b600054610100900460ff161580801561234c5750600054600160ff909116105b806123665750303b158015612366575060005460ff166001145b6123c95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610808565b6000805460ff1916600117905580156123ec576000805461ff0019166101001790555b8015612432576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60008181526097602052604081206107a290613dc6565b6000670de0b6b3a764000060d25483610d769190615670565b60008281526065602052604090206001015461248081612704565b610ab6838361279d565b600061249633836116db565b50600192915050565b60006124aa81612704565b60d05460ff16806124bc575060da5442105b61252e5760405162461bcd60e51b815260206004820152602b60248201527f6e6f742064697361626c65642c20616e64206e6f7420656e64206f662073746160448201527f6b696e67206569746865720000000000000000000000000000000000000000006064820152608401610808565b60cc54156125ca5760405162461bcd60e51b815260206004820152605060248201527f746865726520617265207374696c6c207374616b657320616363756d756c617460448201527f696e6720726577617264732e2043616c6c2060636c61696d526577617264734f60648201527f6e426568616c6660206f6e207468656d00000000000000000000000000000000608482015260a401610808565b60006125d4611f4a565b9050600081116126265760405162461bcd60e51b815260206004820152601860248201527f6e6f7468696e67206c65667420746f20776974686472617700000000000000006044820152606401610808565b60ca5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561267257600080fd5b505af1158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190615157565b508060d560008282546126bd9190615458565b90915550505050565b60006001600160e01b031982167f5a05180f0000000000000000000000000000000000000000000000000000000014806107a257506107a282613dd0565b6124328133613e1e565b600061271983613e9e565b8015610f895750610f898383613ed1565b6000610f898383613fcf565b60d05460ff161561274357565b60d45461274c57565b60d65461275b60dc5442613cb3565b612765919061549e565b60db546127729190615458565b60db554260dc55565b6127858282613ff4565b6000828152609760205260409020610ab69082614096565b6127a782826140ab565b6000828152609760205260409020610ab6908261412e565b60dd548390839060ff1615612cff576001600160a01b03808616600090815260cb602090815260408083209388168352929052206127fb612736565b6000856001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190614f2a565b6001600160a01b038716600090815260cf6020526040812054919250906128975760db546128b1565b6001600160a01b038716600090815260cf60205260409020545b8354600385015460018601546040516370a0823160e01b81526001600160a01b038781166004830152949550600094859461294e949093909288928f16906370a08231906024015b60206040518083038186803b15801561291157600080fd5b505afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129499190615297565b613d6c565b909250905061295d8183615458565b60d8600082825461296e9190615458565b9091555050600385018390554260028601556001600160a01b038916600090815260ce6020526040812080548392906129a8908490615458565b909155505060d05460ff1680156129c45750600485015460ff16155b156129f35760048501805460ff1916600190811790915560cc80546000906129ed9084906156ce565b90915550505b81612a02575050505050613251565b6000886001811115612a1657612a1661576f565b1415612afe5760ca5460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612a6a57600080fd5b505af1158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190615157565b50886001600160a01b03168a6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051612af1929190918252602082015260400190565b60405180910390a3612cf5565b6001886001811115612b1257612b1261576f565b1415612cad576000612b238a610eb4565b90506000838211612b345781612b36565b835b90506000612b4482866156ce565b9050612b518d8d84614143565b8b6001600160a01b03168d6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd55908487604051612b9f929190918252602082015260400190565b60405180910390a3600081118015612bc1575060ca546001600160a01b031615155b15612ca55760ca5460405163a9059cbb60e01b81526001600160a01b038f81166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015612c1457600080fd5b505af1158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c9190615157565b508b6001600160a01b03168d6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612c9c929190918252602082015260400190565b60405180910390a35b505050612cf5565b60405162461bcd60e51b815260206004820152601e60248201527f556e7265636f676e697a656420636865636b706f696e7420616374696f6e00006044820152606401610808565b5050505050613251565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054612d3d90613258565b6001600160a01b03808816600090815260cb60209081526040808320938a16835292905220909150612d6d612736565b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015612da857600080fd5b505afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de09190614f2a565b6001600160a01b038816600090815260cf602052604081205491925090612e095760db54612e23565b6001600160a01b038816600090815260cf60205260409020545b9050600080612e76856000015486600301548588600101548e6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016128f991906001600160a01b0391909116815260200190565b9092509050612e858183615458565b60d86000828254612e969190615458565b9091555050600385018390554260028601556001600160a01b038a16600090815260ce602052604081208054839290612ed0908490615458565b909155505060d05460ff168015612eec5750600485015460ff16155b15612f1b5760048501805460ff1916600190811790915560cc8054600090612f159084906156ce565b90915550505b81612f2a5750505050506131fa565b6000896001811115612f3e57612f3e61576f565b14156130265760ca5460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612f9257600080fd5b505af1158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca9190615157565b50896001600160a01b03168b6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051613019929190918252602082015260400190565b60405180910390a36131f4565b600189600181111561303a5761303a61576f565b1415612cad57600061304b8b610eb4565b9050600083821161305c578161305e565b835b9050600061306c82866156ce565b90506130798e8e84614143565b8c6001600160a01b03168e6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd559084876040516130c7929190918252602082015260400190565b60405180910390a36000811180156130e9575060ca546001600160a01b031615155b156131f05760ca60009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb8f836040518363ffffffff1660e01b81526004016131459291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561315f57600080fd5b505af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131979190615157565b508c6001600160a01b03168e6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38360006040516131e7929190918252602082015260400190565b60405180910390a35b5050505b50505050505b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061322b90613258565b60d6546132389190615458565b61324291906156ce565b60d6555060dd805460ff191690555b5050505050565b60008161326757506000919050565b6003821161327757506001919050565b60006002613286846001615458565b613290919061549e565b90508291505b818110156132c9579050806002816132ae818661549e565b6132b89190615458565b6132c2919061549e565b9050613296565b50919050565b60d0546040517f099aba560000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000926101009004169063099aba569060240160206040518083038186803b15801561333357600080fd5b505afa158015613347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a29190615157565b610b43828261277b565b600081516014146133c85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642064617461206c656e67746820666f722061646472657373006044820152606401610808565b506014015190565b60dd548390839060ff1615613498576133e8846132cf565b6134345760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6000831161347c5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b613488858560016127bf565b613493858585614143565b613251565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546134d690613258565b90506134e1856132cf565b61352d5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b600084116135755760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b613581868660016127bf565b6131fa868686614143565b60dd546000908490849060ff1615613896576135a7856132cf565b6135f35760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6001600160a01b03808716600090815260cb6020908152604080832093891683529290522060018101548514801561363657613631888860006127bf565b613642565b613642888860016127bf565b6001600160a01b03808916600090815260cb60209081526040808320938b1683529290522060028101549092506136bb5760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f742065786973740000000000000000000000006044820152606401610808565b85826001015410156136cc57600080fd5b60018201546000906136e36402540be40089615670565b6136ed919061549e565b905060006402540be4008285600001546137079190615670565b613711919061549e565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561375957600080fd5b505afa15801561376d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137919190615297565b10156137e95760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b6064820152608401610808565b878460010160008282546137fd91906156ce565b90915550508354819085906000906138169084906156ce565b925050819055508060d4600082825461382f91906156ce565b909155505083541580156138485750600484015460ff16155b156138775760048401805460ff1916600190811790915560cc80546000906138719084906156ce565b90915550505b61388189896141fb565b61388b8a82614278565b9550613c1f92505050565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546138d490613258565b90506138df866132cf565b61392b5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6001600160a01b03808816600090815260cb60209081526040808320938a1683529290522060018101548614801561396e57613969898960006127bf565b61397a565b61397a898960016127bf565b6001600160a01b03808a16600090815260cb60209081526040808320938c1683529290522060028101549092506139f35760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f742065786973740000000000000000000000006044820152606401610808565b8682600101541015613a0457600080fd5b6001820154600090613a1b6402540be4008a615670565b613a25919061549e565b905060006402540be400828560000154613a3f9190615670565b613a49919061549e565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b158015613a9157600080fd5b505afa158015613aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac99190615297565b1015613b215760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b6064820152608401610808565b88846001016000828254613b3591906156ce565b9091555050835481908590600090613b4e9084906156ce565b925050819055508060d46000828254613b6791906156ce565b90915550508354158015613b805750600484015460ff16155b15613baf5760048401805460ff1916600190811790915560cc8054600090613ba99084906156ce565b90915550505b613bb98a8a6141fb565b613bc38b82614278565b96505050506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190613bf990613258565b60d654613c069190615458565b613c1091906156ce565b60d6555060dd805460ff191690555b50509392505050565b6000610f8983836142fe565b600054610100900460ff16613cb15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610808565b565b6000806000613cc28585614328565b91509150600080613cd384846146fb565b915091506000613ce38383614941565b9050306001600160a01b031663d19905386040518163ffffffff1660e01b815260040160206040518083038186803b158015613d1e57600080fd5b505afa158015613d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d569190615297565b613d609082615670565b98975050505050505050565b600080806402540be400613d8088886156ce565b613d898a613258565b613d939190615670565b613d9d919061549e565b90506000613dac8287876149a4565b9050613db881836156ce565b999098509650505050505050565b60006107a2825490565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a257506301ffc9a760e01b6001600160e01b03198316146107a2565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b4357613e5c816001600160a01b03166014614a42565b613e67836020614a42565b604051602001613e78929190615334565b60408051601f198184030181529082905262461bcd60e51b8252610808916004016153b5565b6000613eb1826301ffc9a760e01b613ed1565b80156107a25750613eca826001600160e01b0319613ed1565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613f4d908690615318565b6000604051808303818686fa925050503d8060008114613f89576040519150601f19603f3d011682016040523d82523d6000602084013e613f8e565b606091505b5091509150602081511015613fa957600093505050506107a2565b818015613fc5575080806020019051810190613fc59190615157565b9695505050505050565b600081518351148015610f895750508051602091820120825192909101919091201490565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b435760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556140523390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f89836001600160a01b038416614c23565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610b435760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f89836001600160a01b038416614c72565b600061414e82610d5e565b6001600160a01b03808616600090815260cb602090815260408083209388168352929052208054919250906141a257600160cc60008282546141909190615458565b909155505060048101805460ff191690555b828160000160008282546141b69190615458565b92505081905550818160010160008282546141d19190615458565b925050819055508260d460008282546141ea9190615458565b909155506132519050858584614d65565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03831690639dc29fac90604401600060405180830381600087803b15801561425c57600080fd5b505af1158015614270573d6000803e3d6000fd5b505050505050565b60ca5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156142c657600080fd5b505af11580156142da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab69190615157565b60008260000182815481106143155761431561579b565b9060005260206000200154905092915050565b600080306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561436457600080fd5b505afa158015614378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439c9190615297565b8311158061441a5750306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156143de57600080fd5b505afa1580156143f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144169190615297565b8410155b1561450a57306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561445857600080fd5b505afa15801561446c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144909190615297565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156144c957600080fd5b505afa1580156144dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145019190615297565b915091506146f4565b6000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561454557600080fd5b505afa158015614559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457d9190615297565b851061458957846145fa565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156145c257600080fd5b505afa1580156145d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fa9190615297565b90506000306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561463757600080fd5b505afa15801561464b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466f9190615297565b851161467b57846146ec565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156146b457600080fd5b505afa1580156146c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146ec9190615297565b919350909150505b9250929050565b6000806000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561473957600080fd5b505afa15801561474d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147719190615297565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147aa57600080fd5b505afa1580156147be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147e29190615297565b6147ec91906156ce565b905080614801576000600192509250506146f4565b6000816402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561484357600080fd5b505afa158015614857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487b9190615297565b61488590896156ce565b61488f9190615670565b614899919061549e565b90506000826402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156148dd57600080fd5b505afa1580156148f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149159190615297565b61491f90896156ce565b6149299190615670565b614933919061549e565b919791965090945050505050565b60008061494e6000614e9c565b61495c6402540be400614e9c565b614966919061568f565b9050600061497385614e9c565b61497c85614e9c565b614986919061568f565b905060008261499a6402540be400846155e9565b613fc59190615470565b6000806149be6149b96402540be40086615670565b613258565b905060006149d46149b96402540be40086615670565b905060006149e28284615458565b6149f16402540be40084615670565b6149fb919061549e565b905060006402540be400614a0f838a615670565b614a19919061549e565b90506000614a2860648a61549e565b905080821015614a36578091505b50979650505050505050565b60606000614a51836002615670565b614a5c906002615458565b67ffffffffffffffff811115614a7457614a746157b1565b6040519080825280601f01601f191660200182016040528015614a9e576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110614ad557614ad561579b565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110614b2057614b2061579b565b60200101906001600160f81b031916908160001a9053506000614b44846002615670565b614b4f906001615458565b90505b6001811115614bd4577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110614b9057614b9061579b565b1a60f81b828281518110614ba657614ba661579b565b60200101906001600160f81b031916908160001a90535060049490941c93614bcd81615711565b9050614b52565b508315610f895760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610808565b6000818152600183016020526040812054614c6a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107a2565b5060006107a2565b60008181526001830160205260408120548015614d5b576000614c966001836156ce565b8554909150600090614caa906001906156ce565b9050818114614d0f576000866000018281548110614cca57614cca61579b565b9060005260206000200154905080876000018481548110614ced57614ced61579b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614d2057614d20615785565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107a2565b60009150506107a2565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390528316906340c10f1990604401600060405180830381600087803b158015614dc857600080fd5b505af1158015614ddc573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cf6020526040902054158015614e7657506000826001600160a01b0316633e0075a16040518163ffffffff1660e01b815260040160206040518083038186803b158015614e3c57600080fd5b505afa158015614e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e749190615297565b115b15610ab65760db546001600160a01b038316600090815260cf6020526040902055505050565b6000816402540be40081614eb16002836155da565b614ebb91906155e9565b614ec66002846155da565b614ed090836155e9565b6003614edc81866155da565b614ee69190615470565b614ef0919061568f565b614efa9190615419565b949350505050565b8035610d59816157c7565b600060208284031215614f1f57600080fd5b8135610f89816157c7565b600060208284031215614f3c57600080fd5b8151610f89816157c7565b60008060408385031215614f5a57600080fd5b8235614f65816157c7565b91506020830135614f75816157c7565b809150509250929050565b600080600060608486031215614f9557600080fd5b8335614fa0816157c7565b92506020840135614fb0816157c7565b929592945050506040919091013590565b600080600080600060808688031215614fd957600080fd5b8535614fe4816157c7565b94506020860135614ff4816157c7565b935060408601359250606086013567ffffffffffffffff8082111561501857600080fd5b818801915088601f83011261502c57600080fd5b81358181111561503b57600080fd5b89602082850101111561504d57600080fd5b9699959850939650602001949392505050565b6000806040838503121561507357600080fd5b823561507e816157c7565b946020939093013593505050565b6000806040838503121561509f57600080fd5b823567ffffffffffffffff808211156150b757600080fd5b818501915085601f8301126150cb57600080fd5b81356020828211156150df576150df6157b1565b8160051b92506150f08184016153e8565b8281528181019085830185870184018b101561510b57600080fd5b600096505b8487101561513a5780359550615125866157c7565b85835260019690960195918301918301615110565b50965061514a9050878201614f02565b9450505050509250929050565b60006020828403121561516957600080fd5b81518015158114610f8957600080fd5b60006020828403121561518b57600080fd5b5035919050565b600080604083850312156151a557600080fd5b823591506020830135614f75816157c7565b600080604083850312156151ca57600080fd5b50508035926020909101359150565b6000602082840312156151eb57600080fd5b81356001600160e01b031981168114610f8957600080fd5b60006020828403121561521557600080fd5b815167ffffffffffffffff8082111561522d57600080fd5b818401915084601f83011261524157600080fd5b815181811115615253576152536157b1565b615266601f8201601f19166020016153e8565b915080825285602082850101111561527d57600080fd5b61528e8160208401602086016156e5565b50949350505050565b6000602082840312156152a957600080fd5b5051919050565b600080600080600080600060e0888a0312156152cb57600080fd5b87359650602088013595506040880135945060608801356152eb816157c7565b935060808801356152fb816157c7565b9699959850939692959460a0840135945060c09093013592915050565b6000825161532a8184602087016156e5565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161536c8160178501602088016156e5565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516153a98160288401602088016156e5565b01602801949350505050565b60208152600082518060208401526153d48160408501602087016156e5565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715615411576154116157b1565b604052919050565b6000808212826001600160ff1b030384138115161561543a5761543a615743565b82600160ff1b03841281161561545257615452615743565b50500190565b6000821982111561546b5761546b615743565b500190565b60008261547f5761547f615759565b600160ff1b82146000198414161561549957615499615743565b500590565b6000826154ad576154ad615759565b500490565b80825b60018086116154c45750612108565b816001600160ff1b03048211156154dd576154dd615743565b808616156154ea57918102915b9490941c9380026154b5565b600082801561550c57600181146155165761551f565b60019150506107a2565b829150506107a2565b508161552d575060006107a2565b506001600082138082146155465780156155645761557d565b826001600160ff1b030483111561555f5761555f615743565b61557d565b826001600160ff1b030583121561557d5761557d615743565b50808316156155895750805b6155998360011c838402836154b2565b806001600160ff1b030482116000831316156155b7576155b7615743565b80600160ff1b0582126000831216156155d2576155d2615743565b029392505050565b6000610f8960ff8416836154f6565b60006001600160ff1b0360008413600084138583048511828216161561561157615611615743565b600160ff1b600087128682058812818416161561563057615630615743565b6000871292508782058712848416161561564c5761564c615743565b8785058712818416161561566257615662615743565b505050929093029392505050565b600081600019048311821515161561568a5761568a615743565b500290565b600080831283600160ff1b018312811516156156ad576156ad615743565b836001600160ff1b030183138116156156c8576156c8615743565b50500390565b6000828210156156e0576156e0615743565b500390565b60005b838110156157005781810151838201526020016156e8565b838111156113675750506000910152565b60008161572057615720615743565b506000190190565b600060001982141561573c5761573c615743565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461243257600080fdfea2646970667358221220dfcb10b83cef7a751a8cd2faa0b3990891a52fb520a58bac91ef7113c211c0aa64736f6c63430008070033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103575760003560e01c806390484673116101c8578063b435842c11610104578063d547741f116100a2578063ef5cfb8c1161007c578063ef5cfb8c14610760578063efbe1c1c14610773578063f18d20be1461077c578063fc0c546a1461078457600080fd5b8063d547741f14610737578063ed2f23691461074a578063ee0708051461075357600080fd5b8063c45a0155116100de578063c45a0155146106f0578063ca15c87314610708578063d19905381461071b578063d4ce57891461072457600080fd5b8063b435842c146106d7578063be9a6555146106df578063bf55bd97146106e857600080fd5b8063a217fddf11610171578063aa0b01791161014b578063aa0b017914610680578063ab88c7b5146106a8578063aef2200d146106bb578063b0e31b2d146106ce57600080fd5b8063a217fddf146105fb578063a4e47b6614610603578063a8bc58f21461067857600080fd5b8063977bee8e116101a2578063977bee8e146105cd578063992642e5146105e05780639e1a4d19146105f357600080fd5b8063904846731461057857806391b70f601461058157806391d148541461059457600080fd5b806342d866931161029757806371f19f94116102405780637ff9b5961161021a5780637ff9b5961461050557806388a7ca5c1461050e5780638ba2855d1461053a5780639010d07c1461054d57600080fd5b806371f19f94146104bf5780637773a92b146104d25780637eefc525146104f257600080fd5b8063683b443011610271578063683b4430146104905780636a0675cf146104a35780636a61e5fc146104ac57600080fd5b806342d866931461046157806343f49d89146104745780634be1c7961461048757600080fd5b80632f2770db116103045780633a98ef39116102de5780633a98ef39146104135780633b039b9e1461041b5780633dbf35631461042e57806342c0e5ef1461044e57600080fd5b80632f2770db146103e55780632f2ff15d146103ed57806336568abe1461040057600080fd5b806322b3a6a11161033557806322b3a6a1146103b0578063248a9ca3146103b957806325b58c87146103dc57600080fd5b806301ffc9a71461035c578063144fa6d7146103845780631ea18fc514610399575b600080fd5b61036f61036a3660046151d9565b610797565b60405190151581526020015b60405180910390f35b610397610392366004614f0d565b6107a8565b005b6103a260d25481565b60405190815260200161037b565b6103a260d65481565b6103a26103c7366004615179565b60009081526065602052604090206001015490565b6103a260d35481565b610397610a1b565b6103976103fb366004615192565b610a91565b61039761040e366004615192565b610abb565b60d4546103a2565b61036f610429366004614f0d565b610b47565b6103a261043c366004614f0d565b60ce6020526000908152604090205481565b6103a261045c366004615179565b610d5e565b61036f61046f366004614f0d565b610d80565b6103a2610482366004614f0d565b610eb4565b6103a260db5481565b61039761049e366004614f0d565b610f90565b6103a260d85481565b6103976104ba366004615179565b611148565b6103976104cd366004615179565b611159565b6103a26104e0366004614f0d565b60cf6020526000908152604090205481565b6103a2610500366004615179565b61136d565b6103a260d15481565b61052161051c366004614fc1565b611385565b6040516001600160e01b0319909116815260200161037b565b61036f610548366004614f47565b6116db565b61056061055b3660046151b7565b6117b1565b6040516001600160a01b03909116815260200161037b565b6103a260dc5481565b61039761058f3660046152b0565b6117c9565b61036f6105a2366004615192565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61036f6105db366004615060565b611a02565b60c954610560906001600160a01b031681565b6103a2611ec8565b6103a2600081565b61064e610611366004614f47565b60cb602090815260009283526040808420909152908252902080546001820154600283015460038401546004909401549293919290919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a00161037b565b6103a2611f4a565b61069361068e366004614f80565b611f69565b6040805192835260208301919091520161037b565b6103976106b636600461508c565b612110565b6103a26106c9366004615179565b6122ed565b6103a260d45481565b6103a26122fb565b6103a260d95481565b61039761232c565b60d0546105609061010090046001600160a01b031681565b6103a2610716366004615179565b612435565b6103a260d75481565b6103a2610732366004615179565b61244c565b610397610745366004615192565b612465565b6103a260cc5481565b60d05461036f9060ff1681565b61036f61076e366004614f0d565b61248a565b6103a260da5481565b61039761249f565b60ca54610560906001600160a01b031681565b60006107a2826126c6565b92915050565b60006107b381612704565b60ca546001600160a01b0316156108115760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0382166108675760405162461bcd60e51b815260206004820152601360248201527f41646472657373206d75737420626520736574000000000000000000000000006044820152606401610808565b61089a6001600160a01b0383167f36372b070000000000000000000000000000000000000000000000000000000061270e565b6108e65760405162461bcd60e51b815260206004820152601760248201527f6e6f7420612076616c696420455243323020746f6b656e0000000000000000006044820152606401610808565b600082905061099e816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561092757600080fd5b505afa15801561093b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109639190810190615203565b6040518060400160405280600381526020017f54414c000000000000000000000000000000000000000000000000000000000081525061272a565b6109ea5760405162461bcd60e51b815260206004820152601560248201527f746f6b656e206e616d65206973206e6f742054414c00000000000000000000006044820152606401610808565b505060ca805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000610a2681612704565b60d05460ff1615610a795760405162461bcd60e51b815260206004820152601060248201527f616c72656164792064697361626c6564000000000000000000000000000000006044820152606401610808565b610a81612736565b5060d0805460ff19166001179055565b600082815260656020526040902060010154610aac81612704565b610ab6838361277b565b505050565b6001600160a01b0381163314610b395760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610808565b610b43828261279d565b5050565b6000610b5d60ca546001600160a01b0316151590565b610ba95760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f74207965742073657400000000000000000000006044820152606401610808565b816001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015610be257600080fd5b505afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190614f2a565b6001600160a01b0316336001600160a01b031614610ca05760405162461bcd60e51b815260206004820152602d60248201527f6f6e6c79207468652074616c656e742063616e2077697468647261772074686560448201527f6972206f776e20736861726573000000000000000000000000000000000000006064820152608401610808565b6001600160a01b03828116600090815260ce6020526040908190205460ca54915163a9059cbb60e01b8152336004820152602481018290529092919091169063a9059cbb90604401602060405180830381600087803b158015610d0257600080fd5b505af1158015610d16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3a9190615157565b5050506001600160a01b038116600090815260ce602052604081205560015b919050565b60d254600090610d7683670de0b6b3a7640000615670565b6107a2919061549e565b6000610d9660ca546001600160a01b0316151590565b610de25760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f74207965742073657400000000000000000000006044820152606401610808565b60dd543390839060ff1615610e0657610dfd338560006127bf565b60019250610ead565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054610e4490613258565b9050610e52338660006127bf565b600193506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190610e8790613258565b60d654610e949190615458565b610e9e91906156ce565b60d6555060dd805460ff191690555b5050919050565b6000610ebf826132cf565b610f0b5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6000826001600160a01b031663aafa93716040518163ffffffff1660e01b815260040160206040518083038186803b158015610f4657600080fd5b505afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e9190615297565b9050610f898161244c565b9392505050565b600054610100900460ff1615808015610fb05750600054600160ff909116105b80610fca5750303b158015610fca575060005460ff166001145b61102d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610808565b6000805460ff191660011790558015611050576000805461ff0019166101001790555b6001600160a01b0382166110cc5760405162461bcd60e51b815260206004820152602160248201527f737461626c652d636f696e2061646472657373206d7573742062652076616c6960448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610808565b60c9805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790556110ff60003361336b565b8015610b43576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b600061115381612704565b5060d155565b600061116481612704565b60ca546001600160a01b03166111bc5760405162461bcd60e51b815260206004820152601560248201527f54414c20746f6b656e206e6f74207965742073657400000000000000000000006044820152606401610808565b60d3548211156112345760405162461bcd60e51b815260206004820152602b60248201527f6e6f7420656e6f75676820737461626c6520636f696e206c65667420696e207460448201527f686520636f6e74726163740000000000000000000000000000000000000000006064820152608401610808565b600061123f8361136d565b90508260d3600082825461125391906156ce565b909155505060ca546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd90606401602060405180830381600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e29190615157565b5060c95460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561132f57600080fd5b505af1158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190615157565b50505050565b60d154600090610d7683670de0b6b3a7640000615670565b600060d9544210156113d95760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f7420796574207374617274656400006044820152606401610808565b60da5442111561142b5760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e6973686564006044820152606401610808565b60ca546001600160a01b03163314156115515760d05460ff16156114915760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c6564000000000000006044820152606401610808565b60006114d284848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061337592505050565b90506114df8682876133d0565b60408051868152600060208201526001600160a01b0380841692908916917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf9150506116d2565b61155a336132cf565b156116645760ca546001600160a01b03166115dd5760405162461bcd60e51b815260206004820152602a60248201527f54414c20746f6b656e206e6f7420796574207365742e20526566756e64206e6f60448201527f7420706f737369626c65000000000000000000000000000000000000000000006064820152608401610808565b3360006115eb87838861358c565b9050816001600160a01b0316876001600160a01b03167f390b1276974b9463e5d66ab10df69b6f3d7b930eb066a0e66df327edd2cc811c8360405161163291815260200190565b60405180910390a37f88a7ca5c75456956db1e96e88ee87aca8bdad85895835c2dc76fcc96396569cf925050506116d2565b60405162461bcd60e51b815260206004820152602360248201527f556e7265636f676e697a6564204552433133363320746f6b656e20726563656960448201527f76656400000000000000000000000000000000000000000000000000000000006064820152608401610808565b95945050505050565b60dd546000908390839060ff1615611702576116f9858560016127bf565b600192506117a9565b60dd805460ff191660011790556001600160a01b03808316600090815260cb6020908152604080832093851683529290529081205461174090613258565b905061174e868660016127bf565b600193506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061178390613258565b60d6546117909190615458565b61179a91906156ce565b60d6555060dd805460ff191690555b505092915050565b6000828152609760205260408120610f899083613c28565b600054610100900460ff16158080156117e95750600054600160ff909116105b806118035750303b158015611803575060005460ff166001145b6118665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610808565b6000805460ff191660011790558015611889576000805461ff0019166101001790555b600083116118d95760405162461bcd60e51b815260206004820152601760248201527f5f746f6b656e50726963652063616e6e6f7420626520300000000000000000006044820152606401610808565b600082116119295760405162461bcd60e51b815260206004820152601860248201527f5f74616c656e7450726963652063616e6e6f74206265203000000000000000006044820152606401610808565b611931613c34565b611939613c34565b611941613c34565b61194a85610f90565b61195261232c565b60d988905560da87905560d786905560d080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b0387160217905560d183905560d282905560dc8890556119b260003361336b565b80156119f8576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b600060d954421015611a565760405162461bcd60e51b815260206004820152601e60248201527f7374616b696e6720706572696f64206e6f7420796574207374617274656400006044820152606401610808565b60da54421115611aa85760405162461bcd60e51b815260206004820152601f60248201527f7374616b696e6720706572696f6420616c72656164792066696e6973686564006044820152606401610808565b60ca546001600160a01b031615611b015760405162461bcd60e51b815260206004820152601460248201527f537461626c6520636f696e2064697361626c65640000000000000000000000006044820152606401610808565b60dd543390849060ff1615611cb65760008411611b585760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b60d05460ff1615611bab5760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c6564000000000000006044820152606401610808565b6000611bb68561136d565b90508460d36000828254611bca9190615458565b90915550611bdb90503387836133d0565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018790526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611c2d57600080fd5b505af1158015611c41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c659190615157565b5060408051828152600160208201526001600160a01b0388169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019350506117a9565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054611cf490613258565b905060008511611d3e5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b60d05460ff1615611d915760405162461bcd60e51b815260206004820152601960248201527f7374616b696e6720686173206265656e2064697361626c6564000000000000006044820152606401610808565b6000611d9c8661136d565b90508560d36000828254611db09190615458565b90915550611dc190503388836133d0565b60c9546040516323b872dd60e01b8152336004820152306024820152604481018890526001600160a01b03909116906323b872dd90606401602060405180830381600087803b158015611e1357600080fd5b505af1158015611e27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4b9190615157565b5060408051828152600160208201526001600160a01b0389169133917f929ad80cfbf532d1e879107de0553ee80942d13c8043f2b2615f9b15b87d10da910160405180910390a360019450506001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061178390613258565b60ca546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a08231906024015b60206040518083038186803b158015611f0d57600080fd5b505afa158015611f21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f459190615297565b905090565b600060d55460d85460d754611f5f91906156ce565b611f4591906156ce565b6001600160a01b03808416600090815260cb60209081526040808320938616835292815282822060cf9091529181205490918291829015611fc357506001600160a01b038516600090815260cf6020526040902054611fec565b60d654611fd260dc5487613cb3565b611fdc919061549e565b60db54611fe99190615458565b90505b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561202757600080fd5b505afa15801561203b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205f9190614f2a565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918916906370a082319060240160206040518083038186803b1580156120a657600080fd5b505afa1580156120ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120de9190615297565b90506000806120fc8660000154876003015487896001015487613d6c565b90985096505050505050505b935093915050565b60005b8251811015610ab65733600090815260cb60205260408120845182908690859081106121415761214161579b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002090508060cb6000856001600160a01b03166001600160a01b0316815260200190815260200160002060008685815181106121a5576121a561579b565b6020908102919091018101516001600160a01b031682528181019290925260409081016000908120845481556001808601549082015560028086015490820155600380860154908201556004948501549401805460ff191660ff90951615159490941790935533835260cb9091528120855190919086908590811061222c5761222c61579b565b6020908102919091018101516001600160a01b03168252810191909152604001600090812081815560018101829055600281018290556003810191909155600401805460ff1916905583518490839081106122895761228961579b565b60200260200101516001600160a01b0316836001600160a01b0316336001600160a01b03167f5af789319f20f5f529c258bafe3790f76e116026af1e333300d3c910228dcdce60405160405180910390a450806122e581615728565b915050612113565b60006107a261045c8361136d565b60c9546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401611ef5565b600054610100900460ff161580801561234c5750600054600160ff909116105b806123665750303b158015612366575060005460ff166001145b6123c95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610808565b6000805460ff1916600117905580156123ec576000805461ff0019166101001790555b8015612432576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60008181526097602052604081206107a290613dc6565b6000670de0b6b3a764000060d25483610d769190615670565b60008281526065602052604090206001015461248081612704565b610ab6838361279d565b600061249633836116db565b50600192915050565b60006124aa81612704565b60d05460ff16806124bc575060da5442105b61252e5760405162461bcd60e51b815260206004820152602b60248201527f6e6f742064697361626c65642c20616e64206e6f7420656e64206f662073746160448201527f6b696e67206569746865720000000000000000000000000000000000000000006064820152608401610808565b60cc54156125ca5760405162461bcd60e51b815260206004820152605060248201527f746865726520617265207374696c6c207374616b657320616363756d756c617460448201527f696e6720726577617264732e2043616c6c2060636c61696d526577617264734f60648201527f6e426568616c6660206f6e207468656d00000000000000000000000000000000608482015260a401610808565b60006125d4611f4a565b9050600081116126265760405162461bcd60e51b815260206004820152601860248201527f6e6f7468696e67206c65667420746f20776974686472617700000000000000006044820152606401610808565b60ca5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb90604401602060405180830381600087803b15801561267257600080fd5b505af1158015612686573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126aa9190615157565b508060d560008282546126bd9190615458565b90915550505050565b60006001600160e01b031982167f5a05180f0000000000000000000000000000000000000000000000000000000014806107a257506107a282613dd0565b6124328133613e1e565b600061271983613e9e565b8015610f895750610f898383613ed1565b6000610f898383613fcf565b60d05460ff161561274357565b60d45461274c57565b60d65461275b60dc5442613cb3565b612765919061549e565b60db546127729190615458565b60db554260dc55565b6127858282613ff4565b6000828152609760205260409020610ab69082614096565b6127a782826140ab565b6000828152609760205260409020610ab6908261412e565b60dd548390839060ff1615612cff576001600160a01b03808616600090815260cb602090815260408083209388168352929052206127fb612736565b6000856001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b15801561283657600080fd5b505afa15801561284a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286e9190614f2a565b6001600160a01b038716600090815260cf6020526040812054919250906128975760db546128b1565b6001600160a01b038716600090815260cf60205260409020545b8354600385015460018601546040516370a0823160e01b81526001600160a01b038781166004830152949550600094859461294e949093909288928f16906370a08231906024015b60206040518083038186803b15801561291157600080fd5b505afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129499190615297565b613d6c565b909250905061295d8183615458565b60d8600082825461296e9190615458565b9091555050600385018390554260028601556001600160a01b038916600090815260ce6020526040812080548392906129a8908490615458565b909155505060d05460ff1680156129c45750600485015460ff16155b156129f35760048501805460ff1916600190811790915560cc80546000906129ed9084906156ce565b90915550505b81612a02575050505050613251565b6000886001811115612a1657612a1661576f565b1415612afe5760ca5460405163a9059cbb60e01b81526001600160a01b038c81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612a6a57600080fd5b505af1158015612a7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aa29190615157565b50886001600160a01b03168a6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051612af1929190918252602082015260400190565b60405180910390a3612cf5565b6001886001811115612b1257612b1261576f565b1415612cad576000612b238a610eb4565b90506000838211612b345781612b36565b835b90506000612b4482866156ce565b9050612b518d8d84614143565b8b6001600160a01b03168d6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd55908487604051612b9f929190918252602082015260400190565b60405180910390a3600081118015612bc1575060ca546001600160a01b031615155b15612ca55760ca5460405163a9059cbb60e01b81526001600160a01b038f81166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b158015612c1457600080fd5b505af1158015612c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c4c9190615157565b508b6001600160a01b03168d6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f3836000604051612c9c929190918252602082015260400190565b60405180910390a35b505050612cf5565b60405162461bcd60e51b815260206004820152601e60248201527f556e7265636f676e697a656420636865636b706f696e7420616374696f6e00006044820152606401610808565b5050505050613251565b60dd805460ff191660011790556001600160a01b03808316600090815260cb60209081526040808320938516835292905290812054612d3d90613258565b6001600160a01b03808816600090815260cb60209081526040808320938a16835292905220909150612d6d612736565b6000866001600160a01b031663c4daa5936040518163ffffffff1660e01b815260040160206040518083038186803b158015612da857600080fd5b505afa158015612dbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612de09190614f2a565b6001600160a01b038816600090815260cf602052604081205491925090612e095760db54612e23565b6001600160a01b038816600090815260cf60205260409020545b9050600080612e76856000015486600301548588600101548e6001600160a01b03166370a082318a6040518263ffffffff1660e01b81526004016128f991906001600160a01b0391909116815260200190565b9092509050612e858183615458565b60d86000828254612e969190615458565b9091555050600385018390554260028601556001600160a01b038a16600090815260ce602052604081208054839290612ed0908490615458565b909155505060d05460ff168015612eec5750600485015460ff16155b15612f1b5760048501805460ff1916600190811790915560cc8054600090612f159084906156ce565b90915550505b81612f2a5750505050506131fa565b6000896001811115612f3e57612f3e61576f565b14156130265760ca5460405163a9059cbb60e01b81526001600160a01b038d81166004830152602482018590529091169063a9059cbb90604401602060405180830381600087803b158015612f9257600080fd5b505af1158015612fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fca9190615157565b50896001600160a01b03168b6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38484604051613019929190918252602082015260400190565b60405180910390a36131f4565b600189600181111561303a5761303a61576f565b1415612cad57600061304b8b610eb4565b9050600083821161305c578161305e565b835b9050600061306c82866156ce565b90506130798e8e84614143565b8c6001600160a01b03168e6001600160a01b03167f661cda9d247039eabdcc72b8fed0de4ce46c907660a504c7e40889080fbd559084876040516130c7929190918252602082015260400190565b60405180910390a36000811180156130e9575060ca546001600160a01b031615155b156131f05760ca60009054906101000a90046001600160a01b03166001600160a01b031663a9059cbb8f836040518363ffffffff1660e01b81526004016131459291906001600160a01b03929092168252602082015260400190565b602060405180830381600087803b15801561315f57600080fd5b505af1158015613173573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131979190615157565b508c6001600160a01b03168e6001600160a01b03167f013ceff621e16e2f96e454db0b811d5e35d3be38beab8a6bf4be6a3dc8cd23f38360006040516131e7929190918252602082015260400190565b60405180910390a35b5050505b50505050505b6001600160a01b03808416600090815260cb6020908152604080832093861683529290522054819061322b90613258565b60d6546132389190615458565b61324291906156ce565b60d6555060dd805460ff191690555b5050505050565b60008161326757506000919050565b6003821161327757506001919050565b60006002613286846001615458565b613290919061549e565b90508291505b818110156132c9579050806002816132ae818661549e565b6132b89190615458565b6132c2919061549e565b9050613296565b50919050565b60d0546040517f099aba560000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526000926101009004169063099aba569060240160206040518083038186803b15801561333357600080fd5b505afa158015613347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a29190615157565b610b43828261277b565b600081516014146133c85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642064617461206c656e67746820666f722061646472657373006044820152606401610808565b506014015190565b60dd548390839060ff1615613498576133e8846132cf565b6134345760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6000831161347c5760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b613488858560016127bf565b613493858585614143565b613251565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546134d690613258565b90506134e1856132cf565b61352d5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b600084116135755760405162461bcd60e51b8152602060048201526015602482015274616d6f756e742063616e6e6f74206265207a65726f60581b6044820152606401610808565b613581868660016127bf565b6131fa868686614143565b60dd546000908490849060ff1615613896576135a7856132cf565b6135f35760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6001600160a01b03808716600090815260cb6020908152604080832093891683529290522060018101548514801561363657613631888860006127bf565b613642565b613642888860016127bf565b6001600160a01b03808916600090815260cb60209081526040808320938b1683529290522060028101549092506136bb5760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f742065786973740000000000000000000000006044820152606401610808565b85826001015410156136cc57600080fd5b60018201546000906136e36402540be40089615670565b6136ed919061549e565b905060006402540be4008285600001546137079190615670565b613711919061549e565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b15801561375957600080fd5b505afa15801561376d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137919190615297565b10156137e95760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b6064820152608401610808565b878460010160008282546137fd91906156ce565b90915550508354819085906000906138169084906156ce565b925050819055508060d4600082825461382f91906156ce565b909155505083541580156138485750600484015460ff16155b156138775760048401805460ff1916600190811790915560cc80546000906138719084906156ce565b90915550505b61388189896141fb565b61388b8a82614278565b9550613c1f92505050565b60dd805460ff191660011790556001600160a01b03808316600090815260cb602090815260408083209385168352929052908120546138d490613258565b90506138df866132cf565b61392b5760405162461bcd60e51b815260206004820152601860248201527f6e6f7420612076616c69642074616c656e7420746f6b656e00000000000000006044820152606401610808565b6001600160a01b03808816600090815260cb60209081526040808320938a1683529290522060018101548614801561396e57613969898960006127bf565b61397a565b61397a898960016127bf565b6001600160a01b03808a16600090815260cb60209081526040808320938c1683529290522060028101549092506139f35760405162461bcd60e51b815260206004820152601460248201527f7374616b6520646f6573206e6f742065786973740000000000000000000000006044820152606401610808565b8682600101541015613a0457600080fd5b6001820154600090613a1b6402540be4008a615670565b613a25919061549e565b905060006402540be400828560000154613a3f9190615670565b613a49919061549e565b60ca546040516370a0823160e01b815230600482015291925082916001600160a01b03909116906370a082319060240160206040518083038186803b158015613a9157600080fd5b505afa158015613aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac99190615297565b1015613b215760405162461bcd60e51b815260206004820152602160248201527f6e6f7420656e6f7567682054414c20746f2066756c66696c6c207265717565736044820152601d60fa1b6064820152608401610808565b88846001016000828254613b3591906156ce565b9091555050835481908590600090613b4e9084906156ce565b925050819055508060d46000828254613b6791906156ce565b90915550508354158015613b805750600484015460ff16155b15613baf5760048401805460ff1916600190811790915560cc8054600090613ba99084906156ce565b90915550505b613bb98a8a6141fb565b613bc38b82614278565b96505050506001600160a01b03808416600090815260cb60209081526040808320938616835292905220548190613bf990613258565b60d654613c069190615458565b613c1091906156ce565b60d6555060dd805460ff191690555b50509392505050565b6000610f8983836142fe565b600054610100900460ff16613cb15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610808565b565b6000806000613cc28585614328565b91509150600080613cd384846146fb565b915091506000613ce38383614941565b9050306001600160a01b031663d19905386040518163ffffffff1660e01b815260040160206040518083038186803b158015613d1e57600080fd5b505afa158015613d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d569190615297565b613d609082615670565b98975050505050505050565b600080806402540be400613d8088886156ce565b613d898a613258565b613d939190615670565b613d9d919061549e565b90506000613dac8287876149a4565b9050613db881836156ce565b999098509650505050505050565b60006107a2825490565b60006001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107a257506301ffc9a760e01b6001600160e01b03198316146107a2565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b4357613e5c816001600160a01b03166014614a42565b613e67836020614a42565b604051602001613e78929190615334565b60408051601f198184030181529082905262461bcd60e51b8252610808916004016153b5565b6000613eb1826301ffc9a760e01b613ed1565b80156107a25750613eca826001600160e01b0319613ed1565b1592915050565b604080516001600160e01b0319831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b179052905160009190829081906001600160a01b0387169061753090613f4d908690615318565b6000604051808303818686fa925050503d8060008114613f89576040519150601f19603f3d011682016040523d82523d6000602084013e613f8e565b606091505b5091509150602081511015613fa957600093505050506107a2565b818015613fc5575080806020019051810190613fc59190615157565b9695505050505050565b600081518351148015610f895750508051602091820120825192909101919091201490565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff16610b435760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556140523390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f89836001600160a01b038416614c23565b60008281526065602090815260408083206001600160a01b038516845290915290205460ff1615610b435760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f89836001600160a01b038416614c72565b600061414e82610d5e565b6001600160a01b03808616600090815260cb602090815260408083209388168352929052208054919250906141a257600160cc60008282546141909190615458565b909155505060048101805460ff191690555b828160000160008282546141b69190615458565b92505081905550818160010160008282546141d19190615458565b925050819055508260d460008282546141ea9190615458565b909155506132519050858584614d65565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290526001600160a01b03831690639dc29fac90604401600060405180830381600087803b15801561425c57600080fd5b505af1158015614270573d6000803e3d6000fd5b505050505050565b60ca5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156142c657600080fd5b505af11580156142da573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab69190615157565b60008260000182815481106143155761431561579b565b9060005260206000200154905092915050565b600080306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561436457600080fd5b505afa158015614378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061439c9190615297565b8311158061441a5750306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156143de57600080fd5b505afa1580156143f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144169190615297565b8410155b1561450a57306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561445857600080fd5b505afa15801561446c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144909190615297565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156144c957600080fd5b505afa1580156144dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145019190615297565b915091506146f4565b6000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561454557600080fd5b505afa158015614559573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457d9190615297565b851061458957846145fa565b306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156145c257600080fd5b505afa1580156145d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145fa9190615297565b90506000306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b15801561463757600080fd5b505afa15801561464b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061466f9190615297565b851161467b57846146ec565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156146b457600080fd5b505afa1580156146c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146ec9190615297565b919350909150505b9250929050565b6000806000306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561473957600080fd5b505afa15801561474d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147719190615297565b306001600160a01b031663efbe1c1c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156147aa57600080fd5b505afa1580156147be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147e29190615297565b6147ec91906156ce565b905080614801576000600192509250506146f4565b6000816402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b15801561484357600080fd5b505afa158015614857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061487b9190615297565b61488590896156ce565b61488f9190615670565b614899919061549e565b90506000826402540be400306001600160a01b031663be9a65556040518163ffffffff1660e01b815260040160206040518083038186803b1580156148dd57600080fd5b505afa1580156148f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149159190615297565b61491f90896156ce565b6149299190615670565b614933919061549e565b919791965090945050505050565b60008061494e6000614e9c565b61495c6402540be400614e9c565b614966919061568f565b9050600061497385614e9c565b61497c85614e9c565b614986919061568f565b905060008261499a6402540be400846155e9565b613fc59190615470565b6000806149be6149b96402540be40086615670565b613258565b905060006149d46149b96402540be40086615670565b905060006149e28284615458565b6149f16402540be40084615670565b6149fb919061549e565b905060006402540be400614a0f838a615670565b614a19919061549e565b90506000614a2860648a61549e565b905080821015614a36578091505b50979650505050505050565b60606000614a51836002615670565b614a5c906002615458565b67ffffffffffffffff811115614a7457614a746157b1565b6040519080825280601f01601f191660200182016040528015614a9e576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110614ad557614ad561579b565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110614b2057614b2061579b565b60200101906001600160f81b031916908160001a9053506000614b44846002615670565b614b4f906001615458565b90505b6001811115614bd4577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110614b9057614b9061579b565b1a60f81b828281518110614ba657614ba661579b565b60200101906001600160f81b031916908160001a90535060049490941c93614bcd81615711565b9050614b52565b508315610f895760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610808565b6000818152600183016020526040812054614c6a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107a2565b5060006107a2565b60008181526001830160205260408120548015614d5b576000614c966001836156ce565b8554909150600090614caa906001906156ce565b9050818114614d0f576000866000018281548110614cca57614cca61579b565b9060005260206000200154905080876000018481548110614ced57614ced61579b565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614d2057614d20615785565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107a2565b60009150506107a2565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018390528316906340c10f1990604401600060405180830381600087803b158015614dc857600080fd5b505af1158015614ddc573d6000803e3d6000fd5b505050506001600160a01b038216600090815260cf6020526040902054158015614e7657506000826001600160a01b0316633e0075a16040518163ffffffff1660e01b815260040160206040518083038186803b158015614e3c57600080fd5b505afa158015614e50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e749190615297565b115b15610ab65760db546001600160a01b038316600090815260cf6020526040902055505050565b6000816402540be40081614eb16002836155da565b614ebb91906155e9565b614ec66002846155da565b614ed090836155e9565b6003614edc81866155da565b614ee69190615470565b614ef0919061568f565b614efa9190615419565b949350505050565b8035610d59816157c7565b600060208284031215614f1f57600080fd5b8135610f89816157c7565b600060208284031215614f3c57600080fd5b8151610f89816157c7565b60008060408385031215614f5a57600080fd5b8235614f65816157c7565b91506020830135614f75816157c7565b809150509250929050565b600080600060608486031215614f9557600080fd5b8335614fa0816157c7565b92506020840135614fb0816157c7565b929592945050506040919091013590565b600080600080600060808688031215614fd957600080fd5b8535614fe4816157c7565b94506020860135614ff4816157c7565b935060408601359250606086013567ffffffffffffffff8082111561501857600080fd5b818801915088601f83011261502c57600080fd5b81358181111561503b57600080fd5b89602082850101111561504d57600080fd5b9699959850939650602001949392505050565b6000806040838503121561507357600080fd5b823561507e816157c7565b946020939093013593505050565b6000806040838503121561509f57600080fd5b823567ffffffffffffffff808211156150b757600080fd5b818501915085601f8301126150cb57600080fd5b81356020828211156150df576150df6157b1565b8160051b92506150f08184016153e8565b8281528181019085830185870184018b101561510b57600080fd5b600096505b8487101561513a5780359550615125866157c7565b85835260019690960195918301918301615110565b50965061514a9050878201614f02565b9450505050509250929050565b60006020828403121561516957600080fd5b81518015158114610f8957600080fd5b60006020828403121561518b57600080fd5b5035919050565b600080604083850312156151a557600080fd5b823591506020830135614f75816157c7565b600080604083850312156151ca57600080fd5b50508035926020909101359150565b6000602082840312156151eb57600080fd5b81356001600160e01b031981168114610f8957600080fd5b60006020828403121561521557600080fd5b815167ffffffffffffffff8082111561522d57600080fd5b818401915084601f83011261524157600080fd5b815181811115615253576152536157b1565b615266601f8201601f19166020016153e8565b915080825285602082850101111561527d57600080fd5b61528e8160208401602086016156e5565b50949350505050565b6000602082840312156152a957600080fd5b5051919050565b600080600080600080600060e0888a0312156152cb57600080fd5b87359650602088013595506040880135945060608801356152eb816157c7565b935060808801356152fb816157c7565b9699959850939692959460a0840135945060c09093013592915050565b6000825161532a8184602087016156e5565b9190910192915050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161536c8160178501602088016156e5565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516153a98160288401602088016156e5565b01602801949350505050565b60208152600082518060208401526153d48160408501602087016156e5565b601f01601f19169190910160400192915050565b604051601f8201601f1916810167ffffffffffffffff81118282101715615411576154116157b1565b604052919050565b6000808212826001600160ff1b030384138115161561543a5761543a615743565b82600160ff1b03841281161561545257615452615743565b50500190565b6000821982111561546b5761546b615743565b500190565b60008261547f5761547f615759565b600160ff1b82146000198414161561549957615499615743565b500590565b6000826154ad576154ad615759565b500490565b80825b60018086116154c45750612108565b816001600160ff1b03048211156154dd576154dd615743565b808616156154ea57918102915b9490941c9380026154b5565b600082801561550c57600181146155165761551f565b60019150506107a2565b829150506107a2565b508161552d575060006107a2565b506001600082138082146155465780156155645761557d565b826001600160ff1b030483111561555f5761555f615743565b61557d565b826001600160ff1b030583121561557d5761557d615743565b50808316156155895750805b6155998360011c838402836154b2565b806001600160ff1b030482116000831316156155b7576155b7615743565b80600160ff1b0582126000831216156155d2576155d2615743565b029392505050565b6000610f8960ff8416836154f6565b60006001600160ff1b0360008413600084138583048511828216161561561157615611615743565b600160ff1b600087128682058812818416161561563057615630615743565b6000871292508782058712848416161561564c5761564c615743565b8785058712818416161561566257615662615743565b505050929093029392505050565b600081600019048311821515161561568a5761568a615743565b500290565b600080831283600160ff1b018312811516156156ad576156ad615743565b836001600160ff1b030183138116156156c8576156c8615743565b50500390565b6000828210156156e0576156e0615743565b500390565b60005b838110156157005781810151838201526020016156e8565b838111156113675750506000910152565b60008161572057615720615743565b506000190190565b600060001982141561573c5761573c615743565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461243257600080fdfea2646970667358221220dfcb10b83cef7a751a8cd2faa0b3990891a52fb520a58bac91ef7113c211c0aa64736f6c63430008070033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/src/mapping.ts b/src/mapping.ts index 64a3742..1053747 100644 --- a/src/mapping.ts +++ b/src/mapping.ts @@ -4,7 +4,7 @@ import * as TalentTokenTemplates from "../generated/templates/TalentToken/Talent import * as Templates from "../generated/templates" import { TalentCreated } from "../generated/TalentFactory/TalentFactory" import { Transfer } from "../generated/templates/TalentToken/TalentToken" -import { Stake, Unstake, RewardClaim } from "../generated/Staking/Staking" +import { Stake, Unstake, RewardClaim, StakeTransferred } from "../generated/Staking/Staking" const FACTORY_ADDRESS = '0xa902DA7a40a671B84bA3Dd0BdBA6FD9d2D888246' const ADDRESS_ZERO = '0x0000000000000000000000000000000000000000' @@ -216,3 +216,65 @@ function updateTalentDayData(event: Transfer): void { talentDayData.dailySupply = talentToken.totalSupply; talentDayData.save(); } + +export function handleStakeOwnershipChange(event: StakeTransferred): void { + let talentToken = TalentToken.load(event.params.talent.toHex()) + let supporter = Supporter.load(event.params.owner.toHex()); + let newSupporter = Supporter.load(event.params.newOwner.toHex()); + + if (newSupporter == null) { + newSupporter = new Supporter(event.params.newOwner.toHex()) + newSupporter.totalAmount = ZERO_BD + newSupporter.rewardsClaimed = ZERO_BD + } + + if (talentToken === null) { + talentToken = new TalentToken(event.params.talent.toHex()) + talentToken.supporterCounter = ONE_BI + talentToken.totalValueLocked = INITIAL_SUPPLY_BI + talentToken.rewardsReady = ZERO_BD + talentToken.rewardsClaimed = ZERO_BD + } + + if (supporter === null) { + supporter = new Supporter(event.params.owner.toHex()) + supporter.totalAmount = ZERO_BD + supporter.rewardsClaimed = ZERO_BD + } + + let relationshipID = event.params.owner.toHexString() + "-" + event.params.talent.toHexString(); + let ownerTalentRelationship = SupporterTalentToken.load(relationshipID) + + if (ownerTalentRelationship === null) { + ownerTalentRelationship = new SupporterTalentToken(relationshipID) + ownerTalentRelationship.supporter = supporter.id + ownerTalentRelationship.talent = talentToken.id + ownerTalentRelationship.amount = ZERO_BD + } + + let newRelationshipID = event.params.newOwner.toHexString() + "-" + event.params.talent.toHexString(); + let newOwnerTalentRelationship = SupporterTalentToken.load(newRelationshipID) + + if (newOwnerTalentRelationship == null) { + newOwnerTalentRelationship = new SupporterTalentToken(newRelationshipID) + newOwnerTalentRelationship.supporter = newSupporter.id + newOwnerTalentRelationship.talent = talentToken.id + newOwnerTalentRelationship.amount = ownerTalentRelationship.amount + newOwnerTalentRelationship.talAmount = ownerTalentRelationship.talAmount + newOwnerTalentRelationship.firstTimeBoughtAt = ownerTalentRelationship.firstTimeBoughtAt + newOwnerTalentRelationship.lastTimeBoughtAt = ownerTalentRelationship.lastTimeBoughtAt + } else { + newOwnerTalentRelationship.amount = newOwnerTalentRelationship.amount.plus(ownerTalentRelationship.amount) + newOwnerTalentRelationship.talAmount = newOwnerTalentRelationship.talAmount.plus(ownerTalentRelationship.talAmount) + talentToken.supporterCounter = talentToken.supporterCounter.minus(ONE_BI) + } + + newSupporter.totalAmount = newSupporter.totalAmount.plus(ownerTalentRelationship.talAmount) + supporter.totalAmount = supporter.totalAmount.minus(ownerTalentRelationship.talAmount) + + newSupporter.save() + newOwnerTalentRelationship.save() + talentToken.save() + supporter.save() + ownerTalentRelationship.unset(relationshipID) +} diff --git a/subgraph.yaml b/subgraph.yaml index 38bbdd1..f7a1d42 100644 --- a/subgraph.yaml +++ b/subgraph.yaml @@ -45,6 +45,8 @@ dataSources: handler: handleUnstake - event: RewardClaim(indexed address,indexed address,uint256,uint256) handler: handleRewardClaim + - event: StakeTransferred(indexed address,indexed address,indexed address) + handler: handleStakeOwnershipChange file: ./src/mapping.ts templates: - name: TalentToken