0x6080604052600436106104695760003560e01c80636386c1c711610243578063b421626c11610143578063ee5d9c2d116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610d9b578063fe575a8714610dba578063feadde9c14610dda57600080fd5b8063f94aa1b414610d5b578063fb78680d14610d7b57600080fd5b8063ee5d9c2d14610cf7578063eec2744e14610d0c578063efe7dc9014610d2c578063f7c245ea14610d4657600080fd5b8063cf84770611610112578063dd62ed3e116100f7578063dd62ed3e14610c71578063eafb5a3c14610cb7578063eb50e70e14610cd757600080fd5b8063cf84770614610be6578063d0b1449d14610c5157600080fd5b8063b421626c14610b53578063b7df8b3614610b73578063c0488b5614610b8d578063c705c56914610bad57600080fd5b80638a63bd9b116101d6578063a9059cbb116101a5578063ab5cb5a61161018a578063ab5cb5a614610b33578063b1b08f711461071c578063b3d514fb1461071c57600080fd5b8063a9059cbb14610af3578063aa22b17214610b1357600080fd5b80638a63bd9b14610a6e5780638a8c523c14610a8357806395d89b4114610a985780639dc6761514610ade57600080fd5b806370a082311161021257806370a08231146109e5578063715018a614610a1b57806380c581d114610a30578063893d20e814610a5057600080fd5b80636386c1c7146109605780636505079a146109905780636ab86dc1146109b05780636b639a25146109c557600080fd5b80632b28fc7a116103695780634ada218b116102e15780634fbee193116102b0578063590ffdce11610295578063590ffdce146108e75780635cce86cd146109075780636372c68f1461094057600080fd5b80634fbee1931461088e57806350a8e016146108c757600080fd5b80634ada218b1461081a5780634be6ca13146108395780634e718e481461084e5780634fb2e45d1461086e57600080fd5b806333251a0b1161033857806340f83bf71161031d57806340f83bf7146107cf578063452ed4f1146107e457806346ea7ac81461080457600080fd5b806333251a0b1461078f57806336fddb04146107af57600080fd5b80632b28fc7a1461071c5780632e8fa82114610732578063313ce5671461074857806332cde6641461076f57600080fd5b80630dcbcf1c116103fc57806323b872dd116103cb5780632610eaca116103b05780632610eaca146106c657806328577751146106e657806329dd8798146106fc57600080fd5b806323b872dd1461068657806326003957146106a657600080fd5b80630dcbcf1c146106035780630fa604e41461063c57806318160ddd14610651578063218950bc1461066657600080fd5b806306fdde031161043857806306fdde03146105445780630758d9241461059357806309231602146105b3578063095ea7b3146105d357600080fd5b806303fd2a45146104755780630445b667146104a857806305bbedb6146104cc578063069d955f146104ee57600080fd5b3661047057005b600080fd5b34801561048157600080fd5b5061048b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104b457600080fd5b506104be60155481565b60405190815260200161049f565b3480156104d857600080fd5b506104ec6104e736600461485e565b610dfa565b005b3480156104fa57600080fd5b50600a5461051f9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161049f565b34801561055057600080fd5b5060408051808201909152600a81527f416e696d6556657273650000000000000000000000000000000000000000000060208201525b60405161049f9190614908565b34801561059f57600080fd5b50600c5461048b906001600160a01b031681565b3480156105bf57600080fd5b506104ec6105ce36600461491b565b610f10565b3480156105df57600080fd5b506105f36105ee366004614934565b61102b565b604051901515815260200161049f565b34801561060f57600080fd5b506105f361061e366004614960565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561064857600080fd5b506104be611098565b34801561065d57600080fd5b506104be6110b8565b34801561067257600080fd5b506104ec61068136600461497d565b6110fc565b34801561069257600080fd5b506105f36106a13660046149ab565b611203565b3480156106b257600080fd5b506104ec6106c13660046149ec565b61127b565b3480156106d257600080fd5b506104ec6106e1366004614a0e565b6113c8565b3480156106f257600080fd5b506104be60185481565b34801561070857600080fd5b506104ec610717366004614ac9565b61152a565b34801561072857600080fd5b506104be6107d081565b34801561073e57600080fd5b506104be60165481565b34801561075457600080fd5b5061075d61160e565b60405160ff909116815260200161049f565b34801561077b57600080fd5b506104ec61078a366004614b3c565b61163d565b34801561079b57600080fd5b506104ec6107aa366004614960565b61179d565b3480156107bb57600080fd5b506104ec6107ca366004614b7f565b611838565b3480156107db57600080fd5b506104be6118ab565b3480156107f057600080fd5b50600d5461048b906001600160a01b031681565b34801561081057600080fd5b506104be610bb881565b34801561082657600080fd5b506019546105f390610100900460ff1681565b34801561084557600080fd5b506104be6118c6565b34801561085a57600080fd5b506104ec61086936600461491b565b6118e1565b34801561087a57600080fd5b506104ec610889366004614960565b61197f565b34801561089a57600080fd5b506105f36108a9366004614960565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108d357600080fd5b506019546105f39062010000900460ff1681565b3480156108f357600080fd5b506104ec610902366004614b7f565b611bd9565b34801561091357600080fd5b506105f3610922366004614960565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094c57600080fd5b506104be61095b366004614960565b611c4c565b34801561096c57600080fd5b5061098061097b366004614960565b611cd5565b60405161049f9493929190614bad565b34801561099c57600080fd5b506104ec6109ab366004614bfa565b611d76565b3480156109bc57600080fd5b506104ec611e2d565b3480156109d157600080fd5b506104ec6109e0366004614b7f565b611eda565b3480156109f157600080fd5b506104be610a00366004614960565b6001600160a01b031660009081526001602052604090205490565b348015610a2757600080fd5b506104ec612037565b348015610a3c57600080fd5b506104ec610a4b366004614b7f565b612109565b348015610a5c57600080fd5b506000546001600160a01b031661048b565b348015610a7a57600080fd5b506105f36122b0565b348015610a8f57600080fd5b506104ec612319565b348015610aa457600080fd5b5060408051808201909152600581527f416e696d650000000000000000000000000000000000000000000000000000006020820152610586565b348015610aea57600080fd5b506104ec6125d8565b348015610aff57600080fd5b506105f3610b0e366004614934565b612650565b348015610b1f57600080fd5b506104ec610b2e366004614b3c565b612664565b348015610b3f57600080fd5b506104be610b4e366004614960565b6127d6565b348015610b5f57600080fd5b506104ec610b6e366004614c45565b612822565b348015610b7f57600080fd5b506017546105f39060ff1681565b348015610b9957600080fd5b506104ec610ba8366004614c71565b612903565b348015610bb957600080fd5b506105f3610bc8366004614960565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610bf257600080fd5b50600b54610c239061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161049f565b348015610c5d57600080fd5b506104ec610c6c36600461491b565b612b53565b348015610c7d57600080fd5b506104be610c8c36600461497d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610cc357600080fd5b506104ec610cd2366004614960565b612baf565b348015610ce357600080fd5b506104ec610cf2366004614960565b612f58565b348015610d0357600080fd5b506104ec612fcf565b348015610d1857600080fd5b506104ec610d27366004614b7f565b6130aa565b348015610d3857600080fd5b506019546105f39060ff1681565b348015610d5257600080fd5b506104be613184565b348015610d6757600080fd5b50600e5461048b906001600160a01b031681565b348015610d8757600080fd5b506104ec610d96366004614c71565b61320b565b348015610da757600080fd5b506014546105f390610100900460ff1681565b348015610dc657600080fd5b506105f3610dd5366004614960565b613334565b348015610de657600080fd5b506104ec610df5366004614b7f565b6133c3565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260206004820181905260248201526000805160206150f783398151915260448201526064015b60405180910390fd5b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610e989085908590600401614ce7565b600060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b5050505060005b8251811015610f0b57610ef9838281518110610eeb57610eeb614d0b565b602002602001015183611eda565b80610f0381614d37565b915050610ecd565b505050565b6000546001600160a01b03163314610f585760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61012c811015610faa5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610e3e565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561101057600080fd5b505af1158015611024573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110869086815260200190565b60405180910390a35060015b92915050565b60006110a66009600a614e35565b6011546110b39190614e44565b905090565b60006110c66009600a614e35565b6110d59064e8d4a51000614e66565b6000036110e157600080fd5b6110ed6009600a614e35565b6110b39064e8d4a51000614e66565b6000546001600160a01b031633146111445760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff161561115957600080fd5b6001600160a01b038116301480159061117b57506001600160a01b0382163014155b80156111995750816001600160a01b0316816001600160a01b031614155b6111a257600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611268576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611262908490614e85565b90915550505b611273848484613436565b949350505050565b6000546001600160a01b031633146112c35760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e86112d26009600a614e35565b6112e19064e8d4a51000614e66565b6112eb9190614e44565b81836112f96009600a614e35565b6113089064e8d4a51000614e66565b6113129190614e66565b61131c9190614e44565b10156113905760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610e3e565b808261139e6009600a614e35565b6113ad9064e8d4a51000614e66565b6113b79190614e66565b6113c19190614e44565b6011555050565b6000546001600160a01b031633146114105760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b80518251146114615760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e3e565b60005b82518160ff161015610f0b57818160ff168151811061148557611485614d0b565b60200260200101516114ac336001600160a01b031660009081526001602052604090205490565b10156114b757600080fd5b61151733848360ff16815181106114d0576114d0614d0b565b60200260200101516009600a6114e69190614e35565b858560ff16815181106114fb576114fb614d0b565b602002602001015161150d9190614e66565b6000806001613936565b508061152281614e9c565b915050611464565b6000546001600160a01b031633146115725760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b5050505050505050565b600061161c6009600a614e35565b61162b9064e8d4a51000614e66565b60000361163757600080fd5b50600990565b6000546001600160a01b031633146116855760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6107d08361ffff16111580156116a157506107d08261ffff1611155b80156116b357506107d08161ffff1611155b6116ff5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e3e565b610bb861170c8385614ebb565b61ffff16111561175e5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e3e565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b031633146117e55760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401610ff6565b6000546001600160a01b031633146118805760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006118b96009600a614e35565b6010546110b39190614e44565b60006118d46009600a614e35565b600f546110b39190614e44565b6000546001600160a01b031633146119295760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60c881111561197a5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610e3e565b601855565b6000546001600160a01b031633146119c75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b038116611a435760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611ae15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611b7c57600080546001600160a01b03168082526001602052604090912054611b7a9190839061150d565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611c215760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6012546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190614ee1565b6012546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d679190810190614f5e565b93509350935093509193509193565b6000546001600160a01b03163314611dbe5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6014805461ff001916610100851515908102919091179091556019805460ff1990811685151517909155601780549091168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1505050565b6000546001600160a01b03163314611e755760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ec557600080fd5b505af193505050508015611ed7575060015b50565b6000546001600160a01b03163314611f225760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b0382163014801590611f495750600d546001600160a01b03838116911614155b611f5257600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611fea57601254604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b505050505050565b6012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401611fb4565b5050565b6000546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600080546001600160a01b039081168252600660209081526040808420805460ff1990811690915584548416855260089092528084208054909216909155825473ffffffffffffffffffffffffffffffffffffffff198116845590519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146121515760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b8015156000036121ce576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401611fb4565b60035415612235576203f480600354426121e89190614e85565b116122355760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e3e565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401611fb4565b600080546001600160a01b031633146122f95760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600c546123139030906001600160a01b0316600019613c1a565b50600190565b6000546001600160a01b031633146123615760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff16156123b95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e3e565b60195462010000900460ff166124115760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e3e565b601954630100000090046001600160a01b031661245957601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156124e557600080fd5b505af19250505080156124f6575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561254757600080fd5b505af1925050508015612558575060015b506019805461ff001916610100179055600d546001600160a01b03166000908152600160205260409020546127109061259290600a614e66565b61259c9190614e44565b601555600d546001600160a01b0316600090815260016020526040902054612710906125c9906019614e66565b6125d39190614e44565b601655565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b50505050565b600061265d338484613436565b9392505050565b6000546001600160a01b031633146126ac5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600b805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055806126f08385614ebb565b6126fa9190614ebb565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600a5460009161274b9162010000810482169116614ebb565b600b5461ffff9182169250660100000000000090041681101561264a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e3e565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611c94565b6000546001600160a01b0316331461286a5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61287581600a61500b565b61287f9083614e66565b6012546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156128e657600080fd5b505af11580156128fa573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461294b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e861295a6009600a614e35565b6129699064e8d4a51000614e66565b6129739190614e44565b83856129816009600a614e35565b6129909064e8d4a51000614e66565b61299a9190614e66565b6129a49190614e44565b1015612a185760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b6103e8612a276009600a614e35565b612a369064e8d4a51000614e66565b612a409190614e44565b8183612a4e6009600a614e35565b612a5d9064e8d4a51000614e66565b612a679190614e66565b612a719190614e44565b1015612ae55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b8284612af36009600a614e35565b612b029064e8d4a51000614e66565b612b0c9190614e66565b612b169190614e44565b600f558082612b276009600a614e35565b612b369064e8d4a51000614e66565b612b409190614e66565b612b4a9190614e44565b60105550505050565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b620b71b08110612baa57600080fd5b601355565b6000546001600160a01b03163314612bf75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c609190615017565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd19190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d589190615017565b90506001600160a01b038116612ef657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca9190615017565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3b9190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190615017565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612f1f565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f0b903090600019613c1a565b6000546001600160a01b03163314612fa05760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146130175760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60195462010000900460ff16156130705760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e3e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611ed7573d6000803e3d6000fd5b6000546001600160a01b031633146130f25760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561316257600080fd5b505af1158015613176573d6000803e3d6000fd5b505050506120338282611eda565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa1580156131e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190614ee1565b6000546001600160a01b031633146132535760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b82846132616009600a614e35565b6132709064e8d4a51000614e66565b61327a9190614e66565b6132849190614e44565b60155580826132956009600a614e35565b6132a49064e8d4a51000614e66565b6132ae9190614e66565b6132b89190614e44565b6016819055601554111561264a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561339f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190615034565b6000546001600160a01b0316331461340b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006001600160a01b0384166134b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383166135305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b600082116135a65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135d45760019250613602565b6001600160a01b03861660009081526002602052604090205460ff16156135fe5760019150613602565b5060015b61360c8787613d72565b1561388657601954610100900460ff166136685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e3e565b8215613706576001600160a01b03861660009081526007602052604090205460ff1661370657600f548511156137065760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b81156137a4576001600160a01b03871660009081526007602052604090205460ff166137a4576010548511156137a45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b600c546001600160a01b038781169116148015906137c0575081155b15613886576001600160a01b03861660009081526007602052604090205460ff166138865760115485613808886001600160a01b031660009081526001602052604090205490565b6138129190615051565b11156138865760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e3e565b811561391d5760145460ff1661391d57601454610100900460ff161561391d5730600090815260016020526040902054601554811061391b5760165460175460ff161561390557601854600d546001600160a01b0316600090815260016020526040902054612710916138f891614e66565b6139029190614e44565b90505b808210613910578091505b61391982613e43565b505b505b61392b878787868686613936565b979650505050505050565b60195460009062010000900460ff16613a38576139538787614313565b60195462010000900460ff1615801561397157506139718787613d72565b801561399657506001600160a01b03871660009081526005602052604090205460ff16155b80156139bb57506001600160a01b03861660009081526005602052604090205460ff16155b80156139c5575081155b15613a385760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b613a428787613d72565b15613af6576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301526044820188905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613adf575060408051601f3d908101601f19168201909252613adc91810190615034565b60015b613ae857600080fd5b905080613af457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b3857506001600160a01b03871660009081526006602052604090205460ff165b15613b41575060005b6001600160a01b03881660009081526001602052604081208054889290613b69908490614e85565b909155508690508115613b8657613b8389888888886144c2565b90505b6001600160a01b03881660009081526001602052604081208054839290613bae908490615051565b90915550613bbe905089896145ad565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c0391815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b038316613c955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b038216613d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613d9f57506000546001600160a01b03838116911614155b8015613db657506000546001600160a01b03163214155b8015613ddb57506001600160a01b03821660009081526009602052604090205460ff16155b8015613e0057506001600160a01b03831660009081526009602052604090205460ff16155b8015613e1757506001600160a01b03821661dead14155b8015613e2b57506001600160a01b03821615155b801561265d575050506001600160a01b031630141590565b6014805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613ea45750614306565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613efd57306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836020015161ffff1685613f1e9190614e66565b613f289190614e44565b613f329190614e44565b90506000613f408285614e85565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613f7a57613f7a614d0b565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140109190615017565b8160018151811061402357614023614d0b565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614082908590600090869030904290600401615069565b600060405180830381600087803b15801561409c57600080fd5b505af11580156140b0573d6000803e3d6000fd5b50479250600091508490506140c58684614e66565b6140cf9190614e44565b905084156141c057600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561415e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418391906150a5565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6141ca8183614e85565b91508560200151866060018181516141e291906150d3565b61ffff9081169091526060880151885160009350839291821691614207911686614e66565b6142119190614e44565b9050600061421f8286614e85565b895190915061ffff161561429157601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561427d57600080fd5b505af19350505050801561428f575060015b505b604089015161ffff16156142fc57600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b50909350505b5050505050505050505b506014805460ff19169055565b60195462010000900460ff16156143925760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b61439c8282613d72565b1580156143b65750600d546001600160a01b038281169116145b15612033576001600160a01b038083166000908152600960205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790819055630100000090041661444b57601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b031661447b576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156144d85750600a5461ffff16614502565b83156144f15750600a5462010000900461ffff16614502565b50600a54640100000000900461ffff165b8060000361451357859150506145a4565b60006127106145228389614e66565b61452c9190614e44565b30600090815260016020526040812080549293508392909190614550908490615051565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361459f8188614e85565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff1661463e576012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561462b57600080fd5b505af192505050801561463c575060015b505b6001600160a01b03811660009081526008602052604090205460ff166146cf576012546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156146bc57600080fd5b505af19250505080156146cd575060015b505b60195460ff1615612033576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916147289160040190815260200190565b600060405180830381600087803b15801561474257600080fd5b505af1925050508015614753575060015b15612033575050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561479b5761479b61475c565b604052919050565b600067ffffffffffffffff8211156147bd576147bd61475c565b5060051b60200190565b6001600160a01b0381168114611ed757600080fd5b600082601f8301126147ed57600080fd5b813560206148026147fd836147a3565b614772565b82815260059290921b8401810191818101908684111561482157600080fd5b8286015b84811015614845578035614838816147c7565b8352918301918301614825565b509695505050505050565b8015158114611ed757600080fd5b6000806040838503121561487157600080fd5b823567ffffffffffffffff81111561488857600080fd5b614894858286016147dc565b92505060208301356148a581614850565b809150509250929050565b60005b838110156148cb5781810151838201526020016148b3565b8381111561264a5750506000910152565b600081518084526148f48160208601602086016148b0565b601f01601f19169290920160200192915050565b60208152600061265d60208301846148dc565b60006020828403121561492d57600080fd5b5035919050565b6000806040838503121561494757600080fd5b8235614952816147c7565b946020939093013593505050565b60006020828403121561497257600080fd5b813561265d816147c7565b6000806040838503121561499057600080fd5b823561499b816147c7565b915060208301356148a5816147c7565b6000806000606084860312156149c057600080fd5b83356149cb816147c7565b925060208401356149db816147c7565b929592945050506040919091013590565b600080604083850312156149ff57600080fd5b50508035926020909101359150565b60008060408385031215614a2157600080fd5b823567ffffffffffffffff80821115614a3957600080fd5b614a45868387016147dc565b9350602091508185013581811115614a5c57600080fd5b85019050601f81018613614a6f57600080fd5b8035614a7d6147fd826147a3565b81815260059190911b82018301908381019088831115614a9c57600080fd5b928401925b82841015614aba57833582529284019290840190614aa1565b80955050505050509250929050565b60008060008060808587031215614adf57600080fd5b8435614aea81614850565b93506020850135614afa81614850565b92506040850135614b0a81614850565b91506060850135614b1a81614850565b939692955090935050565b803561ffff81168114614b3757600080fd5b919050565b600080600060608486031215614b5157600080fd5b614b5a84614b25565b9250614b6860208501614b25565b9150614b7660408501614b25565b90509250925092565b60008060408385031215614b9257600080fd5b8235614b9d816147c7565b915060208301356148a581614850565b608081526000614bc060808301876148dc565b8281036020840152614bd281876148dc565b90508281036040840152614be681866148dc565b9050828103606084015261392b81856148dc565b600080600060608486031215614c0f57600080fd5b8335614c1a81614850565b92506020840135614c2a81614850565b91506040840135614c3a81614850565b809150509250925092565b600080600060608486031215614c5a57600080fd5b505081359360208301359350604090920135919050565b60008060008060808587031215614c8757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614cdc5781516001600160a01b031687529582019590820190600101614cb7565b509495945050505050565b604081526000614cfa6040830185614ca3565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203614d4a57614d4a614d21565b5060010190565b600181815b80851115614d8c578160001904821115614d7257614d72614d21565b80851615614d7f57918102915b93841c9390800290614d56565b509250929050565b600082614da357506001611092565b81614db057506000611092565b8160018114614dc65760028114614dd057614dec565b6001915050611092565b60ff841115614de157614de1614d21565b50506001821b611092565b5060208310610133831016604e8410600b8410161715614e0f575081810a611092565b614e198383614d51565b8060001904821115614e2d57614e2d614d21565b029392505050565b600061265d60ff841683614d94565b600082614e6157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e8057614e80614d21565b500290565b600082821015614e9757614e97614d21565b500390565b600060ff821660ff8103614eb257614eb2614d21565b60010192915050565b600061ffff808316818516808303821115614ed857614ed8614d21565b01949350505050565b600060208284031215614ef357600080fd5b5051919050565b600082601f830112614f0b57600080fd5b815167ffffffffffffffff811115614f2557614f2561475c565b614f386020601f19601f84011601614772565b818152846020838601011115614f4d57600080fd5b6112738260208301602087016148b0565b60008060008060808587031215614f7457600080fd5b845167ffffffffffffffff80821115614f8c57600080fd5b614f9888838901614efa565b95506020870151915080821115614fae57600080fd5b614fba88838901614efa565b94506040870151915080821115614fd057600080fd5b614fdc88838901614efa565b93506060870151915080821115614ff257600080fd5b50614fff87828801614efa565b91505092959194509250565b600061265d8383614d94565b60006020828403121561502957600080fd5b815161265d816147c7565b60006020828403121561504657600080fd5b815161265d81614850565b6000821982111561506457615064614d21565b500190565b85815284602082015260a06040820152600061508860a0830186614ca3565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156150ba57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156150ee576150ee614d21565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200547f5059cfd9303319f5c6fe69f07cb4a1eefe5b10614756a0be1f343bcb50564736f6c634300080e0033
0x60006003556103d4608081905261264860a05260c052600a805465ffffffffffff19166503d4264803d417815561032060e05261025861010052610a1461012052610f8c61014052600b80546001600160401b031916670f8c0a140258032017905561018060405273a7e83dba467a88caff9fde901c2a6a6553e92a58610160819052600e80546001600160a01b03191690911790556103e890620000a79060099062000881565b620000b89064e8d4a5100062000899565b620000c590600f62000899565b620000d19190620008bb565b600f55612710620000e56009600a62000881565b620000f69064e8d4a5100062000899565b6200010390604b62000899565b6200010f9190620008bb565b6010556103e8620001236009600a62000881565b620001349064e8d4a5100062000899565b6200014190600f62000899565b6200014d9190620008bb565b601155620493e06013556014805461ff00191690556019805462ffffff19169055600080546001600160a01b031916331790556200018e6009600a62000881565b6200019f9064e8d4a5100062000899565b600080546001600160a01b039081168252600160205260408220929092558054909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001f26009600a62000881565b620002039064e8d4a5100062000899565b60405190815260200160405180910390a3600080546040516001600160a01b0390911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3466038036200028257600c80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000369565b46606103620002b757600c80546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000369565b4660011480620002c75750466004145b15620002f957600c80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000369565b4661a86a036200032f57600c80546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000369565b4660fa036200036457600c80546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000369565b600080fd5b600c60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e39190620008de565b6001600160a01b031663c9c65396600c60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b9190620008de565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620004b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004de9190620008de565b600d80546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260408120805460ff1916600117905554600c546200052d92918216911660001962000640565b600c54620005499030906001600160a01b031660001962000640565b600080546001600160a01b0390811682526006602090815260408084208054600160ff1991821681179092553080875283872080548316841790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805483168417905586548616875260089094528286208054821683179055600d5490941685528185208054851682179055918452832080548316821790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548316821790559180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909116909117905562000909565b6001600160a01b038316620006a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200070b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200069f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007c3578160001904821115620007a757620007a76200076c565b80851615620007b557918102915b93841c939080029062000787565b509250929050565b600082620007dc575060016200087b565b81620007eb575060006200087b565b81600181146200080457600281146200080f576200082f565b60019150506200087b565b60ff8411156200082357620008236200076c565b50506001821b6200087b565b5060208310610133831016604e8410600b841016171562000854575081810a6200087b565b62000860838362000782565b80600019048211156200087757620008776200076c565b0290505b92915050565b60006200089260ff841683620007cb565b9392505050565b6000816000190483118215151615620008b657620008b66200076c565b500290565b600082620008d957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008f157600080fd5b81516001600160a01b03811681146200089257600080fd5b61514c80620009196000396000f3fe6080604052600436106104695760003560e01c80636386c1c711610243578063b421626c11610143578063ee5d9c2d116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610d9b578063fe575a8714610dba578063feadde9c14610dda57600080fd5b8063f94aa1b414610d5b578063fb78680d14610d7b57600080fd5b8063ee5d9c2d14610cf7578063eec2744e14610d0c578063efe7dc9014610d2c578063f7c245ea14610d4657600080fd5b8063cf84770611610112578063dd62ed3e116100f7578063dd62ed3e14610c71578063eafb5a3c14610cb7578063eb50e70e14610cd757600080fd5b8063cf84770614610be6578063d0b1449d14610c5157600080fd5b8063b421626c14610b53578063b7df8b3614610b73578063c0488b5614610b8d578063c705c56914610bad57600080fd5b80638a63bd9b116101d6578063a9059cbb116101a5578063ab5cb5a61161018a578063ab5cb5a614610b33578063b1b08f711461071c578063b3d514fb1461071c57600080fd5b8063a9059cbb14610af3578063aa22b17214610b1357600080fd5b80638a63bd9b14610a6e5780638a8c523c14610a8357806395d89b4114610a985780639dc6761514610ade57600080fd5b806370a082311161021257806370a08231146109e5578063715018a614610a1b57806380c581d114610a30578063893d20e814610a5057600080fd5b80636386c1c7146109605780636505079a146109905780636ab86dc1146109b05780636b639a25146109c557600080fd5b80632b28fc7a116103695780634ada218b116102e15780634fbee193116102b0578063590ffdce11610295578063590ffdce146108e75780635cce86cd146109075780636372c68f1461094057600080fd5b80634fbee1931461088e57806350a8e016146108c757600080fd5b80634ada218b1461081a5780634be6ca13146108395780634e718e481461084e5780634fb2e45d1461086e57600080fd5b806333251a0b1161033857806340f83bf71161031d57806340f83bf7146107cf578063452ed4f1146107e457806346ea7ac81461080457600080fd5b806333251a0b1461078f57806336fddb04146107af57600080fd5b80632b28fc7a1461071c5780632e8fa82114610732578063313ce5671461074857806332cde6641461076f57600080fd5b80630dcbcf1c116103fc57806323b872dd116103cb5780632610eaca116103b05780632610eaca146106c657806328577751146106e657806329dd8798146106fc57600080fd5b806323b872dd1461068657806326003957146106a657600080fd5b80630dcbcf1c146106035780630fa604e41461063c57806318160ddd14610651578063218950bc1461066657600080fd5b806306fdde031161043857806306fdde03146105445780630758d9241461059357806309231602146105b3578063095ea7b3146105d357600080fd5b806303fd2a45146104755780630445b667146104a857806305bbedb6146104cc578063069d955f146104ee57600080fd5b3661047057005b600080fd5b34801561048157600080fd5b5061048b61dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104b457600080fd5b506104be60155481565b60405190815260200161049f565b3480156104d857600080fd5b506104ec6104e736600461485e565b610dfa565b005b3480156104fa57600080fd5b50600a5461051f9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff9485168152928416602084015292169181019190915260600161049f565b34801561055057600080fd5b5060408051808201909152600a81527f416e696d6556657273650000000000000000000000000000000000000000000060208201525b60405161049f9190614908565b34801561059f57600080fd5b50600c5461048b906001600160a01b031681565b3480156105bf57600080fd5b506104ec6105ce36600461491b565b610f10565b3480156105df57600080fd5b506105f36105ee366004614934565b61102b565b604051901515815260200161049f565b34801561060f57600080fd5b506105f361061e366004614960565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561064857600080fd5b506104be611098565b34801561065d57600080fd5b506104be6110b8565b34801561067257600080fd5b506104ec61068136600461497d565b6110fc565b34801561069257600080fd5b506105f36106a13660046149ab565b611203565b3480156106b257600080fd5b506104ec6106c13660046149ec565b61127b565b3480156106d257600080fd5b506104ec6106e1366004614a0e565b6113c8565b3480156106f257600080fd5b506104be60185481565b34801561070857600080fd5b506104ec610717366004614ac9565b61152a565b34801561072857600080fd5b506104be6107d081565b34801561073e57600080fd5b506104be60165481565b34801561075457600080fd5b5061075d61160e565b60405160ff909116815260200161049f565b34801561077b57600080fd5b506104ec61078a366004614b3c565b61163d565b34801561079b57600080fd5b506104ec6107aa366004614960565b61179d565b3480156107bb57600080fd5b506104ec6107ca366004614b7f565b611838565b3480156107db57600080fd5b506104be6118ab565b3480156107f057600080fd5b50600d5461048b906001600160a01b031681565b34801561081057600080fd5b506104be610bb881565b34801561082657600080fd5b506019546105f390610100900460ff1681565b34801561084557600080fd5b506104be6118c6565b34801561085a57600080fd5b506104ec61086936600461491b565b6118e1565b34801561087a57600080fd5b506104ec610889366004614960565b61197f565b34801561089a57600080fd5b506105f36108a9366004614960565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156108d357600080fd5b506019546105f39062010000900460ff1681565b3480156108f357600080fd5b506104ec610902366004614b7f565b611bd9565b34801561091357600080fd5b506105f3610922366004614960565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561094c57600080fd5b506104be61095b366004614960565b611c4c565b34801561096c57600080fd5b5061098061097b366004614960565b611cd5565b60405161049f9493929190614bad565b34801561099c57600080fd5b506104ec6109ab366004614bfa565b611d76565b3480156109bc57600080fd5b506104ec611e2d565b3480156109d157600080fd5b506104ec6109e0366004614b7f565b611eda565b3480156109f157600080fd5b506104be610a00366004614960565b6001600160a01b031660009081526001602052604090205490565b348015610a2757600080fd5b506104ec612037565b348015610a3c57600080fd5b506104ec610a4b366004614b7f565b612109565b348015610a5c57600080fd5b506000546001600160a01b031661048b565b348015610a7a57600080fd5b506105f36122b0565b348015610a8f57600080fd5b506104ec612319565b348015610aa457600080fd5b5060408051808201909152600581527f416e696d650000000000000000000000000000000000000000000000000000006020820152610586565b348015610aea57600080fd5b506104ec6125d8565b348015610aff57600080fd5b506105f3610b0e366004614934565b612650565b348015610b1f57600080fd5b506104ec610b2e366004614b3c565b612664565b348015610b3f57600080fd5b506104be610b4e366004614960565b6127d6565b348015610b5f57600080fd5b506104ec610b6e366004614c45565b612822565b348015610b7f57600080fd5b506017546105f39060ff1681565b348015610b9957600080fd5b506104ec610ba8366004614c71565b612903565b348015610bb957600080fd5b506105f3610bc8366004614960565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610bf257600080fd5b50600b54610c239061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff9586168152938516602085015291841691830191909152909116606082015260800161049f565b348015610c5d57600080fd5b506104ec610c6c36600461491b565b612b53565b348015610c7d57600080fd5b506104be610c8c36600461497d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610cc357600080fd5b506104ec610cd2366004614960565b612baf565b348015610ce357600080fd5b506104ec610cf2366004614960565b612f58565b348015610d0357600080fd5b506104ec612fcf565b348015610d1857600080fd5b506104ec610d27366004614b7f565b6130aa565b348015610d3857600080fd5b506019546105f39060ff1681565b348015610d5257600080fd5b506104be613184565b348015610d6757600080fd5b50600e5461048b906001600160a01b031681565b348015610d8757600080fd5b506104ec610d96366004614c71565b61320b565b348015610da757600080fd5b506014546105f390610100900460ff1681565b348015610dc657600080fd5b506105f3610dd5366004614960565b613334565b348015610de657600080fd5b506104ec610df5366004614b7f565b6133c3565b6000546001600160a01b03163314610e475760405162461bcd60e51b815260206004820181905260248201526000805160206150f783398151915260448201526064015b60405180910390fd5b6019546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610e989085908590600401614ce7565b600060405180830381600087803b158015610eb257600080fd5b505af1158015610ec6573d6000803e3d6000fd5b5050505060005b8251811015610f0b57610ef9838281518110610eeb57610eeb614d0b565b602002602001015183611eda565b80610f0381614d37565b915050610ecd565b505050565b6000546001600160a01b03163314610f585760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61012c811015610faa5760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610e3e565b6019546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561101057600080fd5b505af1158015611024573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906110869086815260200190565b60405180910390a35060015b92915050565b60006110a66009600a614e35565b6011546110b39190614e44565b905090565b60006110c66009600a614e35565b6110d59064e8d4a51000614e66565b6000036110e157600080fd5b6110ed6009600a614e35565b6110b39064e8d4a51000614e66565b6000546001600160a01b031633146111445760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff161561115957600080fd5b6001600160a01b038116301480159061117b57506001600160a01b0382163014155b80156111995750816001600160a01b0316816001600160a01b031614155b6111a257600080fd5b6012805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611268576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611262908490614e85565b90915550505b611273848484613436565b949350505050565b6000546001600160a01b031633146112c35760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e86112d26009600a614e35565b6112e19064e8d4a51000614e66565b6112eb9190614e44565b81836112f96009600a614e35565b6113089064e8d4a51000614e66565b6113129190614e66565b61131c9190614e44565b10156113905760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610e3e565b808261139e6009600a614e35565b6113ad9064e8d4a51000614e66565b6113b79190614e66565b6113c19190614e44565b6011555050565b6000546001600160a01b031633146114105760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b80518251146114615760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e3e565b60005b82518160ff161015610f0b57818160ff168151811061148557611485614d0b565b60200260200101516114ac336001600160a01b031660009081526001602052604090205490565b10156114b757600080fd5b61151733848360ff16815181106114d0576114d0614d0b565b60200260200101516009600a6114e69190614e35565b858560ff16815181106114fb576114fb614d0b565b602002602001015161150d9190614e66565b6000806001613936565b508061152281614e9c565b915050611464565b6000546001600160a01b031633146115725760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b1580156115f057600080fd5b505af1158015611604573d6000803e3d6000fd5b5050505050505050565b600061161c6009600a614e35565b61162b9064e8d4a51000614e66565b60000361163757600080fd5b50600990565b6000546001600160a01b031633146116855760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6107d08361ffff16111580156116a157506107d08261ffff1611155b80156116b357506107d08161ffff1611155b6116ff5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e3e565b610bb861170c8385614ebb565b61ffff16111561175e5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e3e565b600a805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b031633146117e55760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401610ff6565b6000546001600160a01b031633146118805760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b60006118b96009600a614e35565b6010546110b39190614e44565b60006118d46009600a614e35565b600f546110b39190614e44565b6000546001600160a01b031633146119295760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60c881111561197a5760405162461bcd60e51b815260206004820152601460248201527f43616e6e6f74207365742061626f76652032252e0000000000000000000000006044820152606401610e3e565b601855565b6000546001600160a01b031633146119c75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b038116611a435760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21536001600160a01b03821601611ae15760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e3e565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611b7c57600080546001600160a01b03168082526001602052604090912054611b7a9190839061150d565b505b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611c215760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6012546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611cb1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190614ee1565b6012546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015611d3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d679190810190614f5e565b93509350935093509193509193565b6000546001600160a01b03163314611dbe5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6014805461ff001916610100851515908102919091179091556019805460ff1990811685151517909155601780549091168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1505050565b6000546001600160a01b03163314611e755760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ec557600080fd5b505af193505050508015611ed7575060015b50565b6000546001600160a01b03163314611f225760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b0382163014801590611f495750600d546001600160a01b03838116911614155b611f5257600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611fea57601254604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b158015611fce57600080fd5b505af1158015611fe2573d6000803e3d6000fd5b505050505050565b6012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401611fb4565b5050565b6000546001600160a01b0316331461207f5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600080546001600160a01b039081168252600660209081526040808420805460ff1990811690915584548416855260089092528084208054909216909155825473ffffffffffffffffffffffffffffffffffffffff198116845590519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b031633146121515760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b8015156000036121ce576001600160a01b03828116600081815260026020526040808220805460ff1916905560195490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401611fb4565b60035415612235576203f480600354426121e89190614e85565b116122355760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e3e565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560195491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401611fb4565b600080546001600160a01b031633146122f95760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600c546123139030906001600160a01b0316600019613c1a565b50600190565b6000546001600160a01b031633146123615760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b601954610100900460ff16156123b95760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e3e565b60195462010000900460ff166124115760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e3e565b601954630100000090046001600160a01b031661245957601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601954600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015263ffffffff4316602482015267ffffffffffffffff421660448201526009606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156124e557600080fd5b505af19250505080156124f6575060015b50601260009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561254757600080fd5b505af1925050508015612558575060015b506019805461ff001916610100179055600d546001600160a01b03166000908152600160205260409020546127109061259290600a614e66565b61259c9190614e44565b601555600d546001600160a01b0316600090815260016020526040902054612710906125c9906019614e66565b6125d39190614e44565b601655565b6012546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561263657600080fd5b505af115801561264a573d6000803e3d6000fd5b50505050565b600061265d338484613436565b9392505050565b6000546001600160a01b031633146126ac5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600b805461ffff8381166401000000000265ffff0000000019868316620100000263ffffffff19909416928816929092179290921716179055806126f08385614ebb565b6126fa9190614ebb565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff16660100000000000061ffff93841602179055600a5460009161274b9162010000810482169116614ebb565b600b5461ffff9182169250660100000000000090041681101561264a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e3e565b6012546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611c94565b6000546001600160a01b0316331461286a5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b61287581600a61500b565b61287f9083614e66565b6012546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156128e657600080fd5b505af11580156128fa573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461294b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6103e861295a6009600a614e35565b6129699064e8d4a51000614e66565b6129739190614e44565b83856129816009600a614e35565b6129909064e8d4a51000614e66565b61299a9190614e66565b6129a49190614e44565b1015612a185760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b6103e8612a276009600a614e35565b612a369064e8d4a51000614e66565b612a409190614e44565b8183612a4e6009600a614e35565b612a5d9064e8d4a51000614e66565b612a679190614e66565b612a719190614e44565b1015612ae55760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e3e565b8284612af36009600a614e35565b612b029064e8d4a51000614e66565b612b0c9190614e66565b612b169190614e44565b600f558082612b276009600a614e35565b612b369064e8d4a51000614e66565b612b409190614e66565b612b4a9190614e44565b60105550505050565b6000546001600160a01b03163314612b9b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b620b71b08110612baa57600080fd5b601355565b6000546001600160a01b03163314612bf75760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c609190615017565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd19190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d589190615017565b90506001600160a01b038116612ef657816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612da6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dca9190615017565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3b9190615017565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec49190615017565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612f1f565b600d805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600c805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155610f0b903090600019613c1a565b6000546001600160a01b03163314612fa05760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b600e805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b6000546001600160a01b031633146130175760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b60195462010000900460ff16156130705760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e3e565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611ed7573d6000803e3d6000fd5b6000546001600160a01b031633146130f25760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6019546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561316257600080fd5b505af1158015613176573d6000803e3d6000fd5b505050506120338282611eda565b601254604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa1580156131e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b39190614ee1565b6000546001600160a01b031633146132535760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b82846132616009600a614e35565b6132709064e8d4a51000614e66565b61327a9190614e66565b6132849190614e44565b60155580826132956009600a614e35565b6132a49064e8d4a51000614e66565b6132ae9190614e66565b6132b89190614e44565b6016819055601554111561264a5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6019546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561339f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110929190615034565b6000546001600160a01b0316331461340b5760405162461bcd60e51b815260206004820181905260248201526000805160206150f78339815191526044820152606401610e3e565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b60006001600160a01b0384166134b45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383166135305760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b600082116135a65760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0384166000908152600260205260408120548190819060ff16156135d45760019250613602565b6001600160a01b03861660009081526002602052604090205460ff16156135fe5760019150613602565b5060015b61360c8787613d72565b1561388657601954610100900460ff166136685760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e3e565b8215613706576001600160a01b03861660009081526007602052604090205460ff1661370657600f548511156137065760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b81156137a4576001600160a01b03871660009081526007602052604090205460ff166137a4576010548511156137a45760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610e3e565b600c546001600160a01b038781169116148015906137c0575081155b15613886576001600160a01b03861660009081526007602052604090205460ff166138865760115485613808886001600160a01b031660009081526001602052604090205490565b6138129190615051565b11156138865760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e3e565b811561391d5760145460ff1661391d57601454610100900460ff161561391d5730600090815260016020526040902054601554811061391b5760165460175460ff161561390557601854600d546001600160a01b0316600090815260016020526040902054612710916138f891614e66565b6139029190614e44565b90505b808210613910578091505b61391982613e43565b505b505b61392b878787868686613936565b979650505050505050565b60195460009062010000900460ff16613a38576139538787614313565b60195462010000900460ff1615801561397157506139718787613d72565b801561399657506001600160a01b03871660009081526005602052604090205460ff16155b80156139bb57506001600160a01b03861660009081526005602052604090205460ff16155b80156139c5575081155b15613a385760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b613a428787613d72565b15613af6576019546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301526044820188905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613adf575060408051601f3d908101601f19168201909252613adc91810190615034565b60015b613ae857600080fd5b905080613af457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff1680613b3857506001600160a01b03871660009081526006602052604090205460ff165b15613b41575060005b6001600160a01b03881660009081526001602052604081208054889290613b69908490614e85565b909155508690508115613b8657613b8389888888886144c2565b90505b6001600160a01b03881660009081526001602052604081208054839290613bae908490615051565b90915550613bbe905089896145ad565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613c0391815260200190565b60405180910390a350600198975050505050505050565b6001600160a01b038316613c955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b038216613d115760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613d9f57506000546001600160a01b03838116911614155b8015613db657506000546001600160a01b03163214155b8015613ddb57506001600160a01b03821660009081526009602052604090205460ff16155b8015613e0057506001600160a01b03831660009081526009602052604090205460ff16155b8015613e1757506001600160a01b03821661dead14155b8015613e2b57506001600160a01b03821615155b801561265d575050506001600160a01b031630141590565b6014805460ff1916600117905560408051608081018252600b5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000900490911660608201819052600003613ea45750614306565b306000908152600460209081526040808320600c546001600160a01b0316845290915290205460001914613efd57306000908152600460209081526040808320600c546001600160a01b03168452909152902060001990555b60006002826060015161ffff16836020015161ffff1685613f1e9190614e66565b613f289190614e44565b613f329190614e44565b90506000613f408285614e85565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110613f7a57613f7a614d0b565b6001600160a01b03928316602091820292909201810191909152600c54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140109190615017565b8160018151811061402357614023614d0b565b6001600160a01b039283166020918202929092010152600c546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614082908590600090869030904290600401615069565b600060405180830381600087803b15801561409c57600080fd5b505af11580156140b0573d6000803e3d6000fd5b50479250600091508490506140c58684614e66565b6140cf9190614e44565b905084156141c057600c546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801561415e573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418391906150a5565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b6141ca8183614e85565b91508560200151866060018181516141e291906150d3565b61ffff9081169091526060880151885160009350839291821691614207911686614e66565b6142119190614e44565b9050600061421f8286614e85565b895190915061ffff161561429157601260009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561427d57600080fd5b505af19350505050801561428f575060015b505b604089015161ffff16156142fc57600e546040516001600160a01b03909116906188b89083906000818181858888f193505050503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b50909350505b5050505050505050505b506014805460ff19169055565b60195462010000900460ff16156143925760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e3e565b61439c8282613d72565b1580156143b65750600d546001600160a01b038281169116145b15612033576001600160a01b038083166000908152600960205260409020805460ff19166001179055601980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790819055630100000090041661444b57601980547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6012546001600160a01b031661447b576012805473ffffffffffffffffffffffffffffffffffffffff1916301790555b6014805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b60008084156144d85750600a5461ffff16614502565b83156144f15750600a5462010000900461ffff16614502565b50600a54640100000000900461ffff165b8060000361451357859150506145a4565b60006127106145228389614e66565b61452c9190614e44565b30600090815260016020526040812080549293508392909190614550908490615051565b909155505060405181815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361459f8188614e85565b925050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff1661463e576012546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b15801561462b57600080fd5b505af192505050801561463c575060015b505b6001600160a01b03811660009081526008602052604090205460ff166146cf576012546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156146bc57600080fd5b505af19250505080156146cd575060015b505b60195460ff1615612033576012546013546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916147289160040190815260200190565b600060405180830381600087803b15801561474257600080fd5b505af1925050508015614753575060015b15612033575050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561479b5761479b61475c565b604052919050565b600067ffffffffffffffff8211156147bd576147bd61475c565b5060051b60200190565b6001600160a01b0381168114611ed757600080fd5b600082601f8301126147ed57600080fd5b813560206148026147fd836147a3565b614772565b82815260059290921b8401810191818101908684111561482157600080fd5b8286015b84811015614845578035614838816147c7565b8352918301918301614825565b509695505050505050565b8015158114611ed757600080fd5b6000806040838503121561487157600080fd5b823567ffffffffffffffff81111561488857600080fd5b614894858286016147dc565b92505060208301356148a581614850565b809150509250929050565b60005b838110156148cb5781810151838201526020016148b3565b8381111561264a5750506000910152565b600081518084526148f48160208601602086016148b0565b601f01601f19169290920160200192915050565b60208152600061265d60208301846148dc565b60006020828403121561492d57600080fd5b5035919050565b6000806040838503121561494757600080fd5b8235614952816147c7565b946020939093013593505050565b60006020828403121561497257600080fd5b813561265d816147c7565b6000806040838503121561499057600080fd5b823561499b816147c7565b915060208301356148a5816147c7565b6000806000606084860312156149c057600080fd5b83356149cb816147c7565b925060208401356149db816147c7565b929592945050506040919091013590565b600080604083850312156149ff57600080fd5b50508035926020909101359150565b60008060408385031215614a2157600080fd5b823567ffffffffffffffff80821115614a3957600080fd5b614a45868387016147dc565b9350602091508185013581811115614a5c57600080fd5b85019050601f81018613614a6f57600080fd5b8035614a7d6147fd826147a3565b81815260059190911b82018301908381019088831115614a9c57600080fd5b928401925b82841015614aba57833582529284019290840190614aa1565b80955050505050509250929050565b60008060008060808587031215614adf57600080fd5b8435614aea81614850565b93506020850135614afa81614850565b92506040850135614b0a81614850565b91506060850135614b1a81614850565b939692955090935050565b803561ffff81168114614b3757600080fd5b919050565b600080600060608486031215614b5157600080fd5b614b5a84614b25565b9250614b6860208501614b25565b9150614b7660408501614b25565b90509250925092565b60008060408385031215614b9257600080fd5b8235614b9d816147c7565b915060208301356148a581614850565b608081526000614bc060808301876148dc565b8281036020840152614bd281876148dc565b90508281036040840152614be681866148dc565b9050828103606084015261392b81856148dc565b600080600060608486031215614c0f57600080fd5b8335614c1a81614850565b92506020840135614c2a81614850565b91506040840135614c3a81614850565b809150509250925092565b600080600060608486031215614c5a57600080fd5b505081359360208301359350604090920135919050565b60008060008060808587031215614c8757600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b83811015614cdc5781516001600160a01b031687529582019590820190600101614cb7565b509495945050505050565b604081526000614cfa6040830185614ca3565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198203614d4a57614d4a614d21565b5060010190565b600181815b80851115614d8c578160001904821115614d7257614d72614d21565b80851615614d7f57918102915b93841c9390800290614d56565b509250929050565b600082614da357506001611092565b81614db057506000611092565b8160018114614dc65760028114614dd057614dec565b6001915050611092565b60ff841115614de157614de1614d21565b50506001821b611092565b5060208310610133831016604e8410600b8410161715614e0f575081810a611092565b614e198383614d51565b8060001904821115614e2d57614e2d614d21565b029392505050565b600061265d60ff841683614d94565b600082614e6157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e8057614e80614d21565b500290565b600082821015614e9757614e97614d21565b500390565b600060ff821660ff8103614eb257614eb2614d21565b60010192915050565b600061ffff808316818516808303821115614ed857614ed8614d21565b01949350505050565b600060208284031215614ef357600080fd5b5051919050565b600082601f830112614f0b57600080fd5b815167ffffffffffffffff811115614f2557614f2561475c565b614f386020601f19601f84011601614772565b818152846020838601011115614f4d57600080fd5b6112738260208301602087016148b0565b60008060008060808587031215614f7457600080fd5b845167ffffffffffffffff80821115614f8c57600080fd5b614f9888838901614efa565b95506020870151915080821115614fae57600080fd5b614fba88838901614efa565b94506040870151915080821115614fd057600080fd5b614fdc88838901614efa565b93506060870151915080821115614ff257600080fd5b50614fff87828801614efa565b91505092959194509250565b600061265d8383614d94565b60006020828403121561502957600080fd5b815161265d816147c7565b60006020828403121561504657600080fd5b815161265d81614850565b6000821982111561506457615064614d21565b500190565b85815284602082015260a06040820152600061508860a0830186614ca3565b6001600160a01b0394909416606083015250608001529392505050565b6000806000606084860312156150ba57600080fd5b8351925060208401519150604084015190509250925092565b600061ffff838116908316818110156150ee576150ee614d21565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200547f5059cfd9303319f5c6fe69f07cb4a1eefe5b10614756a0be1f343bcb50564736f6c634300080e0033