0x608060405234801561001057600080fd5b5061001a3361002c565b6000805460ff60a01b1916905561007c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612c58806200008c6000396000f3fe6080604052600436106100e85760003560e01c806384d623f71161008a578063e83aa3a811610059578063e83aa3a8146102c7578063f1ad74a8146102e7578063f2fde38b14610314578063f9338d181461033457600080fd5b806384d623f71461023557806388f4950f1461026a5780638da5cb5b1461028a5780639dd39239146102b257600080fd5b80636d44a3b2116100c65780636d44a3b2146101815780637083772f146101a3578063715018a6146101e057806381a1ca64146101f557600080fd5b80630633b14a146100ed57806313e7c9d8146101325780635c975abb14610162575b600080fd5b3480156100f957600080fd5b5061011d6101083660046124e2565b60026020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561013e57600080fd5b5061011d61014d3660046124e2565b60016020526000908152604090205460ff1681565b34801561016e57600080fd5b50600054600160a01b900460ff1661011d565b34801561018d57600080fd5b506101a161019c366004612518565b610349565b005b3480156101af57600080fd5b506101c36101be36600461259a565b6103e0565b604080519384526020840192909252151590820152606001610129565b3480156101ec57600080fd5b506101a1610571565b34801561020157600080fd5b5061021561021036600461259a565b6105a7565b604080519485526020850193909352918301526060820152608001610129565b610248610243366004612639565b610763565b6040805182518152602080840151908201529181015190820152606001610129565b34801561027657600080fd5b506101a1610285366004612518565b610d32565b34801561029657600080fd5b506000546040516001600160a01b039091168152602001610129565b3480156102be57600080fd5b506101a1610db8565b3480156102d357600080fd5b506101a16102e23660046126fe565b610e1f565b3480156102f357600080fd5b50610307610302366004612740565b610f9d565b60405161012991906127ae565b34801561032057600080fd5b506101a161032f3660046124e2565b611393565b34801561034057600080fd5b506101a161142e565b6000546001600160a01b0316331461037c5760405162461bcd60e51b815260040161037390612835565b60405180910390fd5b6001600160a01b038216600081815260016020908152604091829020805460ff19168515159081179091558251938452908301527f2ee52be9d342458b3d25e07faada7ff9bc06723b4aa24edb6321ac1316b8a9dd91015b60405180910390a15050565b6000806000856020015184028660400151860211156104b3575060208501516040860151606087015160a088015160019387810293890293909303929181039160009163ffffffff600285028116929185011602816104415761044161286a565b049050600061046f848b60a0015163ffffffff168c60200151028563ffffffff168b8e604001510102611460565b8283020190508161047f82611580565b039650866000146104aa576104a7878b602001518c604001518d606001518e60a001516115de565b95505b50505050610568565b5060408501516020860151606087015160a0880151600093888102938802939093039291810391849163ffffffff600285028116929185011602816104fa576104fa61286a565b0490506000610528848b60a0015163ffffffff168c60400151028563ffffffff168c8e602001510102611460565b8283020190508161053882611580565b0396508660001461056357610560878b604001518c602001518d606001518e60a001516115de565b95505b505050505b93509350939050565b6000546001600160a01b0316331461059b5760405162461bcd60e51b815260040161037390612835565b6105a560006116a3565b565b60008080808515806105b7575084155b156105cd5750508451915060009050808061075a565b60006105e28789602001518a604001516116f3565b90508581116105f657869250905080610633565b600061060b878a604001518b602001516116f3565b90508781111561062d5760405162461bcd60e51b815260040161037390612880565b92508591505b602088015160408901519084019083016001600160701b03821180159061066157506001600160701b038111155b61067d5760405162461bcd60e51b815260040161037390612880565b895160808b015190975063ffffffff161580159061069e575060c08a015115155b1561071c5760006106b88b604001518c6020015102611580565b905060006106c98c60c00151611580565b9050808211156107195760808c015160608d015163ffffffff8083168486038d0281029390850292031684020160008183816107075761070761286a565b0490508015610715579a8b019a5b5050505b50505b6107508a60200151888702816107345761073461286a565b048b604001518987028161074a5761074a61286a565b04611798565b9687019695505050505b93509350935093565b61078760405180606001604052806000815260200160008152602001600081525090565b600061079585870187612956565b905061079f61247e565b600082600001519050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156107e457600080fd5b505afa1580156107f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081c9190612a08565b50915091506040518060e00160405280846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561086557600080fd5b505afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190612a44565b8152602001836001600160701b03168152602001826001600160701b031681526020018660a001516040015163ffffffff1681526020018660a001516060015163ffffffff1681526020018660a001516080015163ffffffff168152602001846001600160a01b0316637464fc3d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561093557600080fd5b505afa158015610949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096d9190612a44565b815250935050505061097e826117ae565b6040850181905260208501829052610998919084846118e3565b604080870191909152602086018290529185529083015160801c10806109ce575081604001516001600160801b03168360400151115b15610b9b57600082600001519050806001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a1557600080fd5b505afa158015610a29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4d9190612a44565b826000018181525050806001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610a8f57600080fd5b505afa158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac79190612a08565b506001600160701b0390811660408086019190915291166020808501919091528151637464fc3d60e01b815291516001600160a01b03841692637464fc3d926004808301939192829003018186803b158015610b2257600080fd5b505afa158015610b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5a9190612a44565b60c08301525060208301516040840151600091610b789185856118e3565b60408701526020860152845190915081908590610b96908390612a73565b905250505b81608001516001600160801b031683600001511015610c065760405162461bcd60e51b815260206004820152602160248201527f5a61704578656375746f723a206e6f7420656e6f756768206c697175696469746044820152607960f81b6064820152608401610373565b600060808360600151901c905080846020015110158015610c2b575060008460200151115b15610c55576020808401519085015160a085015151610c55926001600160a01b0390911691611a41565b50600082606001516001600160801b0316905080846040015110158015610c80575060008460400151115b15610cb357610cb3836020015185604001518560a00151602001516001600160a01b0316611a419092919063ffffffff16565b5081602001516001600160a01b031682600001516001600160a01b03167f0f356c3a6ebaddf7704212f556f354c3562e9aee7b006eb762d35d8909af03af856000015186602001518760400151604051610d20939291909283526020830191909152604082015260600190565b60405180910390a35050949350505050565b6000546001600160a01b03163314610d5c5760405162461bcd60e51b815260040161037390612835565b6001600160a01b038216600081815260026020908152604091829020805460ff19168515159081179091558251938452908301527f25d7ce8d7e0b3990938766275ee2d54fbe81347d287bfbf0429838409a889fdc91016103d4565b3360009081526002602052604090205460ff16610e175760405162461bcd60e51b815260206004820152601b60248201527f4b7962657253776170526f6c653a206e6f7420677561726469616e00000000006044820152606401610373565b6105a5611a93565b6000546001600160a01b03163314610e495760405162461bcd60e51b815260040161037390612835565b6001600160a01b038116610e9f5760405162461bcd60e51b815260206004820152601b60248201527f4b535265736375653a20696e76616c696420726563697069656e7400000000006044820152606401610373565b81610eb057610ead83611b38565b91505b8115610f985773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0384161415610f84576000816001600160a01b03168360405160006040518083038185875af1925050503d8060008114610f28576040519150601f19603f3d011682016040523d82523d6000602084013e610f2d565b606091505b5050905080610f7e5760405162461bcd60e51b815260206004820152601d60248201527f4b535265736375653a204554485f5452414e534645525f4641494c45440000006044820152606401610373565b50505050565b610f986001600160a01b0384168284611bf5565b505050565b610ffc604051806101600160405280600081526020016000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160701b03831180159061101a57506001600160701b038211155b6110365760405162461bcd60e51b815260040161037390612880565b61103e61247e565b600080896001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561107a57600080fd5b505afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b29190612a08565b50915091506040518060e001604052808b6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156110fb57600080fd5b505afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111339190612a44565b8152602001836001600160701b03168152602001826001600160701b031681526020018a63ffffffff1681526020018963ffffffff1681526020018863ffffffff1681526020018b6001600160a01b0316637464fc3d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156111b357600080fd5b505afa1580156111c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111eb9190612a44565b905280519093501515915061124490505760405162461bcd60e51b815260206004820152601c60248201527f5a6170556e6956323a20554e494e495449414c495a45445f504f4f4c000000006044820152606401610373565b61124f8185856103e0565b1515604085018190526020850191909152908352600090819061127f57836020015186018460000151860361128e565b83600001518603846020015186015b604086015191935091506112ac5783602001518360200151036112b5565b83516020840151015b6001600160701b031660208401526040840151156112dd5783602001518360400151036112e6565b83516040840151015b6001600160701b0390811660408501526020840151830111801590611319575060408301516001600160701b0390820111155b6113355760405162461bcd60e51b815260040161037390612880565b6113408383836105a7565b60a088018190526080880182905260608801929092526101008701929092526020850151820161012087015260409490940151840161014086015290910360c08401520360e08201529695505050505050565b6000546001600160a01b031633146113bd5760405162461bcd60e51b815260040161037390612835565b6001600160a01b0381166114225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610373565b61142b816116a3565b50565b6000546001600160a01b031633146114585760405162461bcd60e51b815260040161037390612835565b6105a5611c47565b6000808060001985870985870292508281108382030391505080600014156114c757600084116114bc5760405162461bcd60e51b8152602060048201526007602482015266302064656e6f6d60c81b6044820152606401610373565b508290049050611579565b8084116115075760405162461bcd60e51b815260206004820152600e60248201526d64656e6f6d203c3d2070726f643160901b6044820152606401610373565b600084868809808403938111909203919050600061152786196001612a73565b8616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030260008290038290046001019490940294049390931791909102925050505b9392505050565b600060038211156115cf575080600160028204015b818110156115c9578091506002818285816115b2576115b261286a565b0401816115c1576115c161286a565b049050611595565b50919050565b81156115d9575060015b919050565b60008086116116435760405162461bcd60e51b815260206004820152602b60248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4960448201526a1394155517d05353d5539560aa1b6064820152608401610373565b6000851180156116535750600084115b61166f5760405162461bcd60e51b815260040161037390612a8b565b63ffffffff8383038116870290858202908416870282018082816116955761169561286a565b049998505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008084116117525760405162461bcd60e51b815260206004820152602560248201527f556e697377617056324c6962726172793a20494e53554646494349454e545f416044820152641353d5539560da1b6064820152608401610373565b6000831180156117625750600082115b61177e5760405162461bcd60e51b815260040161037390612a8b565b828285028161178f5761178f61286a565b04949350505050565b60008183106117a75781611579565b5090919050565b60a0810151516040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a082319060240160206040518083038186803b1580156117f957600080fd5b505afa15801561180d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118319190612a44565b60a0840151602001516040516370a0823160e01b81523060048201529193506001600160a01b0316906370a082319060240160206040518083038186803b15801561187b57600080fd5b505afa15801561188f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b39190612a44565b9050816118c057816118c9565b60001990910190815b9150806118d657806118dc565b60001901805b9050915091565b6000806000806000806118f88a8a8a8a611ccb565b9250925092508760c00151156119aa57611911886117ae565b809a50819b50505087600001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561195657600080fd5b505afa15801561196a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198e9190612a08565b506001600160701b0390811660408a0152166020880152611a21565b806119b757818a016119bb565b828a035b995080156119cb578189016119cf565b8289035b9850806119e257818760200151036119ea565b828760200151015b6001600160701b031660208801528015611a0a5781876040015103611a12565b828760400151015b6001600160701b031660408801525b611a2d8a8a898b611f93565b9550955095505050505b9450945094915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f989084906120bd565b600054600160a01b900460ff1615611ae05760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610373565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611b1b3390565b6040516001600160a01b03909116815260200160405180910390a1565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b0383161415611b66575047611be0565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a082319060240160206040518083038186803b158015611ba557600080fd5b505afa158015611bb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612a44565b90505b80156115d957611bef81612ad3565b92915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f98908490612192565b600054600160a01b900460ff16611c975760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610373565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b1b565b6000806000611cdb8488886103e0565b919450925090508215801590611cf057508115155b15611f855760008082611d0e5760a087015160208101519051611d1c565b60a087015180516020909101515b88519193509150611d38906001600160a01b0384169087611a41565b8660c0015115611e8d5760008088600001516001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611d8257600080fd5b505afa158015611d96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dba9190612a08565b506001600160701b031691506001600160701b0316915084611ddd578082611de0565b81815b8a516040516370a0823160e01b81526001600160a01b03918216600482015292945090925060009184918716906370a082319060240160206040518083038186803b158015611e2e57600080fd5b505afa158015611e42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e669190612a44565b611e709190612aea565b9050611e878184848c606001518d60a001516115de565b96505050505b8315611f7e5760008084611ea357856000611ea7565b6000865b8a516040805160008152602081019182905263022c0d9f60e01b9091529294509092506001600160a01b03169063022c0d9f90611eed9085908590309060248101612b59565b600060405180830381600087803b158015611f0757600080fd5b505af1158015611f1b573d6000803e3d6000fd5b50508a51604080516001600160a01b039283168152888316602082015291871682820152606082018b9052608082018a9052517f4a1b2727b9ab14f07f88fa453a174b49152e0b75a86380fc8dbdc0161730bd7493509081900360a0019150a150505b5050611a37565b506000915081905080611a37565b600080600080600080611fa7888b8b6105a7565b93509350935050826000146120a557865160a088015151611fd4916001600160a01b039091169084611a41565b865160a088015160200151611ff5916001600160a01b039091169083611a41565b865160208801516040516335313c2160e11b81526001600160a01b039182166004820152911690636a62784290602401602060405180830381600087803b15801561203f57600080fd5b505af1158015612053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120779190612a44565b95508660c00151156120965761208c876117ae565b90955093506120b0565b818a03945080890393506120b0565b600095508994508893505b5050509450945094915050565b6000612112826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122059092919063ffffffff16565b90508051600014806121335750808060200190518101906121339190612b90565b610f985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610373565b60006121e7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661221c9092919063ffffffff16565b805190915015610f9857808060200190518101906121339190612b90565b6060612214848460008561222b565b949350505050565b606061221484846000856122c7565b60608247101561224d5760405162461bcd60e51b815260040161037390612bad565b600080866001600160a01b031685876040516122699190612bf3565b60006040518083038185875af1925050503d80600081146122a6576040519150601f19603f3d011682016040523d82523d6000602084013e6122ab565b606091505b50915091506122bc878383876123a5565b979650505050505050565b6060824710156122e95760405162461bcd60e51b815260040161037390612bad565b843b6123375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610373565b600080866001600160a01b031685876040516123539190612bf3565b60006040518083038185875af1925050503d8060008114612390576040519150601f19603f3d011682016040523d82523d6000602084013e612395565b606091505b50915091506122bc82828661241b565b6060831561241157825161240a576001600160a01b0385163b61240a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610373565b5081612214565b6122148383612454565b6060831561242a575081611579565b82511561243a5782518084602001fd5b8160405162461bcd60e51b81526004016103739190612c0f565b8151156124645781518083602001fd5b8060405162461bcd60e51b81526004016103739190612c0f565b6040518060e00160405280600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600081525090565b6001600160a01b038116811461142b57600080fd5b6000602082840312156124f457600080fd5b8135611579816124cd565b801515811461142b57600080fd5b80356115d9816124ff565b6000806040838503121561252b57600080fd5b8235612536816124cd565b91506020830135612546816124ff565b809150509250929050565b60405160e0810167ffffffffffffffff8111828210171561258257634e487b7160e01b600052604160045260246000fd5b60405290565b63ffffffff8116811461142b57600080fd5b60008060008385036101208112156125b157600080fd5b60e08112156125bf57600080fd5b506125c8612551565b84358152602085013560208201526040850135604082015260608501356125ee81612588565b6060820152608085013561260181612588565b608082015260a085013561261481612588565b60a082015260c085810135908201529560e08501359550610100909401359392505050565b6000806000806040858703121561264f57600080fd5b843567ffffffffffffffff8082111561266757600080fd5b818701915087601f83011261267b57600080fd5b81358181111561268a57600080fd5b88602082850101111561269c57600080fd5b6020928301965094509086013590808211156126b757600080fd5b818701915087601f8301126126cb57600080fd5b8135818111156126da57600080fd5b8860208260051b85010111156126ef57600080fd5b95989497505060200194505050565b60008060006060848603121561271357600080fd5b833561271e816124cd565b9250602084013591506040840135612735816124cd565b809150509250925092565b60008060008060008060c0878903121561275957600080fd5b8635612764816124cd565b9550602087013561277481612588565b9450604087013561278481612588565b9350606087013561279481612588565b9598949750929560808101359460a0909101359350915050565b600061016082019050825182526020830151602083015260408301516127d8604084018215159052565b50606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151818401525061014080840151818401525092915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601260045260246000fd5b6020808252601290820152715a6170556e6956323a204f564552464c4f5760701b604082015260600190565b600060a082840312156128be57600080fd5b60405160a0810181811067ffffffffffffffff821117156128ef57634e487b7160e01b600052604160045260246000fd5b6040529050808235612900816124cd565b81526020830135612910816124cd565b6020820152604083013561292381612588565b6040820152606083013561293681612588565b6060820152608083013561294981612588565b6080919091015292915050565b6000610160828403121561296957600080fd5b612971612551565b823561297c816124cd565b8152602083013561298c816124cd565b80602083015250604083013560408201526060830135606082015260808301356001600160801b03811681146129c157600080fd5b60808201526129d38460a085016128ac565b60a08201526129e5610140840161250d565b60c08201529392505050565b80516001600160701b03811681146115d957600080fd5b600080600060608486031215612a1d57600080fd5b612a26846129f1565b9250612a34602085016129f1565b9150604084015161273581612588565b600060208284031215612a5657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115612a8657612a86612a5d565b500190565b60208082526028908201527f556e697377617056324c6962726172793a20494e53554646494349454e545f4c604082015267495155494449545960c01b606082015260800190565b600081612ae257612ae2612a5d565b506000190190565b600082821015612afc57612afc612a5d565b500390565b60005b83811015612b1c578181015183820152602001612b04565b83811115610f7e5750506000910152565b60008151808452612b45816020860160208601612b01565b601f01601f19169290920160200192915050565b84815283602082015260018060a01b0383166040820152608060608201526000612b866080830184612b2d565b9695505050505050565b600060208284031215612ba257600080fd5b8151611579816124ff565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60008251612c05818460208701612b01565b9190910192915050565b6020815260006115796020830184612b2d56fea2646970667358221220b03895c6847961277d5988ffefdd01e258775dcfae758aeac181b722870cd7fc64736f6c63430008090033