60806040526103e8600a908155670dbd2fc137a30000600b556709935f581f050000600c556806c6b935b8bbd40000600d5568056bc75e2d63100000600e556010819055601155600360125560056013556014805460ff19169055601880546001600160a01b0319167380e4929c869102140e69550bbecc20bed61b080c1790553480156200008d57600080fd5b506040518060400160405280600f81526020016e466f756e64696e67204167656e747360881b81525060405180604001604052806002815260200161464160f01b815250620000eb620000e56200017a60201b60201c565b6200017e565b815162000100906002906020850190620001ce565b50805162000116906003906020840190620001ce565b50506001600955506040805160608101909152603580825262003fc5602083013980516200014d91601591602090910190620001ce565b50600f80546001600160a01b031916737d647b1a0dcd5525e9c6b3d14be58f27674f8c95179055620002b1565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001dc9062000274565b90600052602060002090601f0160209004810192826200020057600085556200024b565b82601f106200021b57805160ff19168380011785556200024b565b828001600101855582156200024b579182015b828111156200024b5782518255916020019190600101906200022e565b50620002599291506200025d565b5090565b5b808211156200025957600081556001016200025e565b600181811c908216806200028957607f821691505b60208210811415620002ab57634e487b7160e01b600052602260045260246000fd5b50919050565b613d0480620002c16000396000f3fe6080604052600436106103605760003560e01c806370a08231116101c6578063b0a1c1c4116100f7578063e88343e611610095578063f2fde38b1161006f578063f2fde38b14610991578063f480fc70146109b1578063fae96571146109c4578063fb7265ff146109e457600080fd5b8063e88343e614610908578063e985e9c514610928578063eccc7b3b1461097157600080fd5b8063b88d4fde116100d1578063b88d4fde14610888578063c87b56dd146108a8578063cd2c7052146108c8578063df127056146108e857600080fd5b8063b0a1c1c41461083f578063b220a61714610852578063b3912a4c1461086857600080fd5b80638da5cb5b11610164578063a22cb4651161013e578063a22cb465146107c9578063a58b34f8146107e9578063a58bb27a14610809578063a694d9b31461082957600080fd5b80638da5cb5b146107805780638eeadb611461079e57806395d89b41146107b457600080fd5b8063746847d4116101a0578063746847d41461070d5780637de55fe1146107235780637de69d5f1461074357806385209ee01461075957600080fd5b806370a08231146106c3578063715018a6146106e35780637313cba9146106f857600080fd5b80633574a2dd116102a05780635a4855991161023e57806366d003ac1161021857806366d003ac146106625780636a573c1e146106825780636c0360eb146106985780636cced8b7146106ad57600080fd5b80635a485599146105d35780635fc10214146106225780636352211e1461064257600080fd5b806342842e0e1161027a57806342842e0e146105535780634528ee9a146105735780634f6ccce71461059357806355f804b3146105b357600080fd5b80633574a2dd146104fe5780633bbed4a01461051e5780633ccfd60b1461053e57600080fd5b806318160ddd1161030d5780632567d5f2116102e75780632567d5f2146104a557806329f04d1a146104b85780632f745c59146104cb57806333935e5c146104eb57600080fd5b806318160ddd1461045a57806321f8b0da1461046f57806323b872dd1461048557600080fd5b806308290dc51161033e57806308290dc5146103f4578063095ea7b31461041657806315092ed21461043657600080fd5b806301ffc9a71461036557806306fdde031461039a578063081812fc146103bc575b600080fd5b34801561037157600080fd5b50610385610380366004613601565b610a04565b60405190151581526020015b60405180910390f35b3480156103a657600080fd5b506103af610b35565b604051610391919061367d565b3480156103c857600080fd5b506103dc6103d7366004613690565b610bc7565b6040516001600160a01b039091168152602001610391565b34801561040057600080fd5b5061041461040f366004613690565b610c67565b005b34801561042257600080fd5b506104146104313660046136c5565b610d27565b34801561044257600080fd5b5061044c600d5481565b604051908152602001610391565b34801561046657600080fd5b5060015461044c565b34801561047b57600080fd5b5061044c600e5481565b34801561049157600080fd5b506104146104a03660046136ef565b610e5a565b6104146104b336600461373c565b610e65565b6104146104c6366004613785565b61107e565b3480156104d757600080fd5b5061044c6104e63660046136c5565b611361565b6104146104f936600461373c565b611504565b34801561050a57600080fd5b50610414610519366004613841565b61168a565b34801561052a57600080fd5b5061041461053936600461388a565b6116fb565b34801561054a57600080fd5b506104146117e5565b34801561055f57600080fd5b5061041461056e3660046136ef565b6118cc565b34801561057f57600080fd5b5061041461058e36600461388a565b6118e7565b34801561059f57600080fd5b5061044c6105ae366004613690565b6119d1565b3480156105bf57600080fd5b506104146105ce366004613841565b611a54565b3480156105df57600080fd5b5061044c6105ee366004613690565b60009081526004602052604090205474010000000000000000000000000000000000000000900467ffffffffffffffff1690565b34801561062e57600080fd5b5061038561063d3660046138a5565b611ac1565b34801561064e57600080fd5b506103dc61065d366004613690565b611be6565b34801561066e57600080fd5b506017546103dc906001600160a01b031681565b34801561068e57600080fd5b5061044c600a5481565b3480156106a457600080fd5b506103af611bf8565b3480156106b957600080fd5b5061044c60105481565b3480156106cf57600080fd5b5061044c6106de36600461388a565b611c86565b3480156106ef57600080fd5b50610414611d32565b34801561070457600080fd5b506103af611d98565b34801561071957600080fd5b5061044c60125481565b34801561072f57600080fd5b5061041461073e3660046136c5565b611da5565b34801561074f57600080fd5b5061044c600b5481565b34801561076557600080fd5b506014546107739060ff1681565b6040516103919190613908565b34801561078c57600080fd5b506000546001600160a01b03166103dc565b3480156107aa57600080fd5b5061044c60115481565b3480156107c057600080fd5b506103af611e6e565b3480156107d557600080fd5b506104146107e4366004613930565b611e7d565b3480156107f557600080fd5b5061041461080436600461388a565b611f42565b34801561081557600080fd5b50610414610824366004613690565b611fd6565b34801561083557600080fd5b5061044c60135481565b34801561084b57600080fd5b504761044c565b34801561085e57600080fd5b5061044c600c5481565b34801561087457600080fd5b506008546103dc906001600160a01b031681565b34801561089457600080fd5b506104146108a336600461395c565b612035565b3480156108b457600080fd5b506103af6108c3366004613690565b6120be565b3480156108d457600080fd5b506104146108e3366004613690565b6121f2565b3480156108f457600080fd5b50610414610903366004613690565b612251565b34801561091457600080fd5b50600f546103dc906001600160a01b031681565b34801561093457600080fd5b506103856109433660046139d8565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b34801561097d57600080fd5b5061041461098c366004613690565b6122b0565b34801561099d57600080fd5b506104146109ac36600461388a565b61230f565b6104146109bf366004613a0b565b6123ee565b3480156109d057600080fd5b5061044c6109df36600461388a565b6126f5565b3480156109f057600080fd5b506104146109ff366004613690565b612700565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a9757507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610ae357507fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000145b80610b2f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060028054610b4490613a5b565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7090613a5b565b8015610bbd5780601f10610b9257610100808354040283529160200191610bbd565b820191906000526020600020905b815481529060010190602001808311610ba057829003601f168201915b5050505050905090565b6000610bd4826001541190565b610c4b5760405162461bcd60e51b815260206004820152602d60248201527f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560448201527f78697374656e7420746f6b656e0000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000546001600160a01b03163314610cc15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b6000610cce826001613aac565b9050600a548110610d215760405162461bcd60e51b815260206004820152601660248201527f43616e206f6e6c792072656475636520737570706c79000000000000000000006044820152606401610c42565b600a5550565b6000610d3282611be6565b9050806001600160a01b0316836001600160a01b03161415610dbc5760405162461bcd60e51b815260206004820152602260248201527f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610c42565b336001600160a01b0382161480610dd85750610dd88133610943565b610e4a5760405162461bcd60e51b815260206004820152603960248201527f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656420666f7220616c6c000000000000006064820152608401610c42565b610e558383836127f3565b505050565b610e55838383612867565b333214610eb45760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f7473210000000000000000000000000000000000000000000000006044820152606401610c42565b60018060145460ff166002811115610ece57610ece6138f2565b14610f1b5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207374617465000000000000000000000000000000000000006044820152606401610c42565b84600a5481610f2960015490565b610f339190613aac565b10610f805760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520746f6b656e7300000000000000006044820152606401610c42565b8484846003610f923385858585611ac1565b610fde5760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964205369676e61747572650000000000000000000000000000006044820152606401610c42565b6013548a610feb33612cdb565b610ff59190613aac565b106110685760405162461bcd60e51b815260206004820152602f60248201527f4d6178696d756d206e756d626572206f66204e46547320616c6c6f776564207460448201527f6f204d696e7420726561636865642100000000000000000000000000000000006064820152608401610c42565b611072338b612d9b565b50505050505050505050565b3332146110cd5760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f7473210000000000000000000000000000000000000000000000006044820152606401610c42565b60028060145460ff1660028111156110e7576110e76138f2565b146111345760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207374617465000000000000000000000000000000000000006044820152606401610c42565b82600a548161114260015490565b61114c9190613aac565b106111995760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520746f6b656e7300000000000000006044820152606401610c42565b601054846111a633612cdb565b6111b09190613aac565b106112235760405162461bcd60e51b815260206004820152602f60248201527f4d6178696d756d206e756d626572206f66204e46547320616c6c6f776564207460448201527f6f204d696e7420726561636865642100000000000000000000000000000000006064820152608401610c42565b82156112f457600f54600d546001600160a01b03909116906323b872dd903390309061124f9089613ac4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b1580156112b657600080fd5b505af11580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190613ae3565b50611351565b83600b546113029190613ac4565b3410156113515760405162461bcd60e51b815260206004820152601360248201527f496e73756666696369656e742046756e647321000000000000000000000000006044820152606401610c42565b61135b3385612d9b565b50505050565b600061136c83611c86565b82106113e05760405162461bcd60e51b815260206004820152602260248201527f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60448201527f64730000000000000000000000000000000000000000000000000000000000006064820152608401610c42565b60006113eb60015490565b905060008060005b83811015611495576000818152600460209081526040918290208251808401909352546001600160a01b0381168084527401000000000000000000000000000000000000000090910467ffffffffffffffff16918301919091521561145757805192505b876001600160a01b0316836001600160a01b0316141561148c578684141561148557509350610b2f92505050565b6001909301925b506001016113f3565b5060405162461bcd60e51b815260206004820152602e60248201527f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060448201527f6f776e657220627920696e6465780000000000000000000000000000000000006064820152608401610c42565b3332146115535760405162461bcd60e51b815260206004820152600860248201527f4e6f20626f7473210000000000000000000000000000000000000000000000006044820152606401610c42565b60018060145460ff16600281111561156d5761156d6138f2565b146115ba5760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207374617465000000000000000000000000000000000000006044820152606401610c42565b84600a54816115c860015490565b6115d29190613aac565b1061161f5760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520746f6b656e7300000000000000006044820152606401610c42565b84848460026116313385858585611ac1565b61167d5760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964205369676e61747572650000000000000000000000000000006044820152606401610c42565b6012548a610feb33612cdb565b6000546001600160a01b031633146116e45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b80516116f7906015906020840190613543565b5050565b6000546001600160a01b031633146117555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b6001600160a01b0381166117ab5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420626520746865203020616464726573732100000000000000006044820152606401610c42565b601780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461183f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b47806118b35760405162461bcd60e51b815260206004820152602260248201527f4e6f2046756e647320746f2077697468647261772c2042616c616e636520697360448201527f20300000000000000000000000000000000000000000000000000000000000006064820152608401610c42565b6017546118c9906001600160a01b031682612db5565b50565b610e5583838360405180602001604052806000815250612035565b6000546001600160a01b031633146119415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b6001600160a01b0381166119975760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420626520746865203020616464726573732100000000000000006044820152606401610c42565b600f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60006119dc60015490565b8210611a505760405162461bcd60e51b815260206004820152602360248201527f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560448201527f6e647300000000000000000000000000000000000000000000000000000000006064820152608401610c42565b5090565b6000546001600160a01b03163314611aae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b80516116f7906016906020840190613543565b6040517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000030606090811b8216602084015287901b166034820152604881018290526000908190606801604051602081830303815290604052805190602001209050600181604051602001611b6191907f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152601c810191909152603c0190565b60408051601f198184030181528282528051602091820120600084529083018083525260ff891690820152606081018790526080810186905260a0016020604051602081039080840390855afa158015611bbf573d6000803e3d6000fd5b5050604051601f1901516018546001600160a01b0391821691161498975050505050505050565b6000611bf182612e58565b5192915050565b60168054611c0590613a5b565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3190613a5b565b8015611c7e5780601f10611c5357610100808354040283529160200191611c7e565b820191906000526020600020905b815481529060010190602001808311611c6157829003601f168201915b505050505081565b60006001600160a01b038216611d045760405162461bcd60e51b815260206004820152602b60248201527f455243373231413a2062616c616e636520717565727920666f7220746865207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610c42565b506001600160a01b03166000908152600560205260409020546fffffffffffffffffffffffffffffffff1690565b6000546001600160a01b03163314611d8c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b611d966000612f53565b565b60158054611c0590613a5b565b6000546001600160a01b03163314611dff5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b80600a5481611e0d60015490565b611e179190613aac565b10611e645760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520746f6b656e7300000000000000006044820152606401610c42565b610e558383612d9b565b606060038054610b4490613a5b565b6001600160a01b038216331415611ed65760405162461bcd60e51b815260206004820152601a60248201527f455243373231413a20617070726f766520746f2063616c6c65720000000000006044820152606401610c42565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000546001600160a01b03163314611f9c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b600880547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000546001600160a01b031633146120305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b600c55565b612040848484612867565b61204c84848484612fbb565b61135b5760405162461bcd60e51b815260206004820152603360248201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260448201527f6563656976657220696d706c656d656e746572000000000000000000000000006064820152608401610c42565b60606120cf8261ffff166001541190565b61211b5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610c42565b60006016805461212a90613a5b565b9050116121c1576015805461213e90613a5b565b80601f016020809104026020016040519081016040528092919081815260200182805461216a90613a5b565b80156121b75780601f1061218c576101008083540402835291602001916121b7565b820191906000526020600020905b81548152906001019060200180831161219a57829003601f168201915b5050505050610b2f565b60166121cc83613169565b6040516020016121dd929190613b1c565b60405160208183030381529060405292915050565b6000546001600160a01b0316331461224c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b600b55565b6000546001600160a01b031633146122ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b600d55565b6000546001600160a01b0316331461230a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b600e55565b6000546001600160a01b031633146123695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b6001600160a01b0381166123e55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c42565b6118c981612f53565b60018060145460ff166002811115612408576124086138f2565b146124555760405162461bcd60e51b815260206004820152600d60248201527f496e76616c6964207374617465000000000000000000000000000000000000006044820152606401610c42565b85600a548161246360015490565b61246d9190613aac565b106124ba5760405162461bcd60e51b815260206004820152601860248201527f4578636565647320617661696c61626c6520746f6b656e7300000000000000006044820152606401610c42565b84848460016124cc3385858585611ac1565b6125185760405162461bcd60e51b815260206004820152601160248201527f496e76616c6964205369676e61747572650000000000000000000000000000006044820152606401610c42565b6011548b61252533612cdb565b61252f9190613aac565b106125a25760405162461bcd60e51b815260206004820152602f60248201527f4d6178696d756d206e756d626572206f66204e46547320616c6c6f776564207460448201527f6f204d696e7420726561636865642100000000000000000000000000000000006064820152608401610c42565b891561268157600f60009054906101000a90046001600160a01b03166001600160a01b03166323b872dd3330600e548f6125dc9190613ac4565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1681526001600160a01b0393841660048201529290911660248301526044820152606401602060405180830381600087803b15801561264357600080fd5b505af1158015612657573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267b9190613ae3565b506126de565b8a600c5461268f9190613ac4565b3410156126de5760405162461bcd60e51b815260206004820152601360248201527f496e73756666696369656e742046756e647321000000000000000000000000006044820152606401610c42565b6126e8338c612d9b565b5050505050505050505050565b6000610b2f82612cdb565b6000546001600160a01b0316331461275a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c42565b600381106127aa5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420436f6e7472616374205374617465210000000000000000006044820152606401610c42565b806127c757601480546000919060ff19166001835b021790555050565b80600114156127e357601480546001919060ff191682806127bf565b506014805460ff19166002179055565b60008281526006602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546040517fbaa51f86000000000000000000000000000000000000000000000000000000008152600481018390526001600160a01b039091169063baa51f869060240160206040518083038186803b1580156128c457600080fd5b505afa1580156128d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fc9190613ae3565b156129495760405162461bcd60e51b815260206004820152601060248201527f546f6b656e206973205374616b656421000000000000000000000000000000006044820152606401610c42565b600061295482612e58565b80519091506000906001600160a01b0316336001600160a01b0316148061298b57503361298084610bc7565b6001600160a01b0316145b8061299d5750815161299d9033610943565b905080612a125760405162461bcd60e51b815260206004820152603260248201527f455243373231413a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f76656400000000000000000000000000006064820152608401610c42565b846001600160a01b031682600001516001600160a01b031614612a9d5760405162461bcd60e51b815260206004820152602660248201527f455243373231413a207472616e736665722066726f6d20696e636f727265637460448201527f206f776e657200000000000000000000000000000000000000000000000000006064820152608401610c42565b6001600160a01b038416612b195760405162461bcd60e51b815260206004820152602560248201527f455243373231413a207472616e7366657220746f20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610c42565b612b2960008484600001516127f3565b6001600160a01b03858116600090815260056020908152604080832080547fffffffffffffffffffffffffffffffff000000000000000000000000000000008082166fffffffffffffffffffffffffffffffff928316600019018316179092558986168086528386208054938416938316600190810190931693909317909255888552600490935281842080547fffffffff0000000000000000000000000000000000000000000000000000000016909117740100000000000000000000000000000000000000004267ffffffffffffffff1602179055908601808352912054909116612c9157612c1b816001541190565b15612c91578251600082815260046020908152604090912080549186015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009092166001600160a01b03909316929092171790555b5082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b60006001600160a01b038216612d595760405162461bcd60e51b815260206004820152603160248201527f455243373231413a206e756d626572206d696e74656420717565727920666f7260448201527f20746865207a65726f20616464726573730000000000000000000000000000006064820152608401610c42565b506001600160a01b031660009081526005602052604090205470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1690565b6116f782826040518060200160405280600081525061329b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612e02576040519150601f19603f3d011682016040523d82523d6000602084013e612e07565b606091505b5050905080610e555760405162461bcd60e51b815260206004820152601460248201527f4661696c656420746f2073656e642045746865720000000000000000000000006044820152606401610c42565b6040805180820190915260008082526020820152612e77826001541190565b612ee95760405162461bcd60e51b815260206004820152602a60248201527f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360448201527f74656e7420746f6b656e000000000000000000000000000000000000000000006064820152608401610c42565b815b6000818152600460209081526040918290208251808401909352546001600160a01b0381168084527401000000000000000000000000000000000000000090910467ffffffffffffffff169183019190915215612f49579392505050565b5060001901612eeb565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0384163b1561315d576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290613018903390899088908890600401613bef565b602060405180830381600087803b15801561303257600080fd5b505af1925050508015613062575060408051601f3d908101601f1916820190925261305f91810190613c2b565b60015b613112573d808015613090576040519150601f19603f3d011682016040523d82523d6000602084013e613095565b606091505b50805161310a5760405162461bcd60e51b815260206004820152603360248201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260448201527f6563656976657220696d706c656d656e746572000000000000000000000000006064820152608401610c42565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050613161565b5060015b949350505050565b6060816131a957505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156131d357806131bd81613c48565b91506131cc9050600a83613c79565b91506131ad565b60008167ffffffffffffffff8111156131ee576131ee6137b5565b6040519080825280601f01601f191660200182016040528015613218576020820181803683370190505b5090505b84156131615761322d600183613c8d565b915061323a600a86613ca4565b613245906030613aac565b60f81b81838151811061325a5761325a613cb8565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613294600a86613c79565b945061321c565b610e55838383600180546001600160a01b0385166133215760405162461bcd60e51b815260206004820152602160248201527f455243373231413a206d696e7420746f20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610c42565b836133945760405162461bcd60e51b815260206004820152602860248201527f455243373231413a207175616e74697479206d7573742062652067726561746560448201527f72207468616e20300000000000000000000000000000000000000000000000006064820152608401610c42565b6001600160a01b038516600081815260056020908152604080832080547001000000000000000000000000000000007fffffffffffffffffffffffffffffffff0000000000000000000000000000000082166fffffffffffffffffffffffffffffffff9283168c01831690811782900483168c01909216021790558483526004909152812080547fffffffff0000000000000000000000000000000000000000000000000000000016909217740100000000000000000000000000000000000000004267ffffffffffffffff16021790915581905b8581101561353a5760405182906001600160a01b038916906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4831561352e576134bc6000888488612fbb565b61352e5760405162461bcd60e51b815260206004820152603360248201527f455243373231413a207472616e7366657220746f206e6f6e204552433732315260448201527f6563656976657220696d706c656d656e746572000000000000000000000000006064820152608401610c42565b60019182019101613469565b50600155612cd4565b82805461354f90613a5b565b90600052602060002090601f01602090048101928261357157600085556135b7565b82601f1061358a57805160ff19168380011785556135b7565b828001600101855582156135b7579182015b828111156135b757825182559160200191906001019061359c565b50611a509291505b80821115611a5057600081556001016135bf565b7fffffffff00000000000000000000000000000000000000000000000000000000811681146118c957600080fd5b60006020828403121561361357600080fd5b813561361e816135d3565b9392505050565b60005b83811015613640578181015183820152602001613628565b8381111561135b5750506000910152565b60008151808452613669816020860160208601613625565b601f01601f19169290920160200192915050565b60208152600061361e6020830184613651565b6000602082840312156136a257600080fd5b5035919050565b80356001600160a01b03811681146136c057600080fd5b919050565b600080604083850312156136d857600080fd5b6136e1836136a9565b946020939093013593505050565b60008060006060848603121561370457600080fd5b61370d846136a9565b925061371b602085016136a9565b9150604084013590509250925092565b803560ff811681146136c057600080fd5b6000806000806080858703121561375257600080fd5b843593506137626020860161372b565b93969395505050506040820135916060013590565b80151581146118c957600080fd5b6000806040838503121561379857600080fd5b8235915060208301356137aa81613777565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137e6576137e66137b5565b604051601f8501601f19908116603f0116810190828211818310171561380e5761380e6137b5565b8160405280935085815286868601111561382757600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561385357600080fd5b813567ffffffffffffffff81111561386a57600080fd5b8201601f8101841361387b57600080fd5b613161848235602084016137cb565b60006020828403121561389c57600080fd5b61361e826136a9565b600080600080600060a086880312156138bd57600080fd5b6138c6866136a9565b94506138d46020870161372b565b94979496505050506040830135926060810135926080909101359150565b634e487b7160e01b600052602160045260246000fd5b602081016003831061392a57634e487b7160e01b600052602160045260246000fd5b91905290565b6000806040838503121561394357600080fd5b61394c836136a9565b915060208301356137aa81613777565b6000806000806080858703121561397257600080fd5b61397b856136a9565b9350613989602086016136a9565b925060408501359150606085013567ffffffffffffffff8111156139ac57600080fd5b8501601f810187136139bd57600080fd5b6139cc878235602084016137cb565b91505092959194509250565b600080604083850312156139eb57600080fd5b6139f4836136a9565b9150613a02602084016136a9565b90509250929050565b600080600080600060a08688031215613a2357600080fd5b853594506020860135613a3581613777565b9350613a436040870161372b565b94979396509394606081013594506080013592915050565b600181811c90821680613a6f57607f821691505b60208210811415613a9057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115613abf57613abf613a96565b500190565b6000816000190483118215151615613ade57613ade613a96565b500290565b600060208284031215613af557600080fd5b815161361e81613777565b60008151613b12818560208601613625565b9290920192915050565b600080845481600182811c915080831680613b3857607f831692505b6020808410821415613b5857634e487b7160e01b86526022600452602486fd5b818015613b6c5760018114613b7d57613baa565b60ff19861689528489019650613baa565b60008b81526020902060005b86811015613ba25781548b820152908501908301613b89565b505084890196505b505050505050613be6613bbd8286613b00565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000815260050190565b95945050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152613c216080830184613651565b9695505050505050565b600060208284031215613c3d57600080fd5b815161361e816135d3565b6000600019821415613c5c57613c5c613a96565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613c8857613c88613c63565b500490565b600082821015613c9f57613c9f613a96565b500390565b600082613cb357613cb3613c63565b500690565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220f673b8031b373287e38caebb1d70794c25678d3709da5cad52abb4b590f867c264736f6c63430008090033697066733a2f2f516d65374c614e6d4a38374a785639515277796252567836747734664b335352355152424c546a6768754339444e