6080604052620000126012600a620004f1565b6200002290633b9aca0062000502565b6003556200005c6064620000486005600354620002c160201b620012521790919060201c565b6200035860201b620012d41790919060201c565b600455620000826064620000486005600354620002c160201b620012521790919060201c565b6005556000600a819055600b8190556001600c819055600d829055600e82905581620000af81806200051c565b620000bb91906200051c565b620000c791906200051c565b620000d391906200051c565b600f5560646010819055601181905560128190556013819055601e601955601a55601d805461ffff60a01b1916600160a81b1790556003546103e8906200011c90600762000502565b62000128919062000532565b601e553480156200013857600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601480546001600160a01b0319908116339081179092556015805482167330b417dfac62fc6bee99bbc82bff5f04b2e5078d17815560168054831684179055601780548316841790556018805490921661dead179091556000828152600860209081526040808320805460ff19908116600190811790925530808652838620805483168417905586546001600160a01b0390811687528487208054841685179055888752600986528487208054841685179055601d5481168752848720805484168517905590865283862080548316841790559554909516845281842080549095161790935560035484835260068252838320819055925192835290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3620005a5565b600082600003620002d55750600062000352565b6000620002e3838562000502565b905082620002f2858362000532565b146200034f5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60006200034f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620003a260201b60201c565b60008183620003c65760405162461bcd60e51b815260040162000346919062000555565b506000620003d5848662000532565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000435578160001904821115620004195762000419620003de565b808516156200042757918102915b93841c9390800290620003f9565b509250929050565b6000826200044e5750600162000352565b816200045d5750600062000352565b81600181146200047657600281146200048157620004a1565b600191505062000352565b60ff841115620004955762000495620003de565b50506001821b62000352565b5060208310610133831016604e8410600b8410161715620004c6575081810a62000352565b620004d28383620003f4565b8060001904821115620004e957620004e9620003de565b029392505050565b60006200034f60ff8416836200043d565b8082028115828204841417620003525762000352620003de565b80820180821115620003525762000352620003de565b6000826200055057634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015620005845785810183015185820160400152820162000566565b506000604082860101526040601f19601f8301168501019250505092915050565b61244c80620005b56000396000f3fe60806040526004361061021e5760003560e01c806377b54bad11610123578063a8aa1b31116100ab578063ded1e4381161006f578063ded1e43814610642578063df20fd4914610662578063f2fde38b14610682578063f4293890146106a2578063f887ea40146106b757600080fd5b8063a8aa1b311461057c578063a9059cbb1461059c578063b2bdfa7b146105bc578063c0cbdea4146105dc578063dd62ed3e146105fc57600080fd5b8063893d20e8116100f2578063893d20e8146104de5780638da5cb5b1461051057806395d89b411461052e578063a28a4d861461055f578063a70419d21461056757600080fd5b806377b54bad1461047257806378109e54146104925780637d1db4a5146104a857806382528791146104be57600080fd5b806330c9a6a0116101a65780635d83e1d5116101755780635d83e1d5146103d15780636ddd1713146103f157806370a0823114610412578063715018a614610448578063751039fc1461045d57600080fd5b806330c9a6a014610360578063313ce56714610380578063552656691461039c578063571ac8b0146103b157600080fd5b806318160ddd116101ed57806318160ddd146102de5780631df4ccfc146102f357806323b872dd14610309578063282c874914610329578063293230b81461034b57600080fd5b80630445b6671461022a57806306fdde031461025357806308fd3d051461028d578063095ea7b3146102be57600080fd5b3661022557005b600080fd5b34801561023657600080fd5b50610240601e5481565b6040519081526020015b60405180910390f35b34801561025f57600080fd5b506040805180820190915260088152674d61726c626f726f60c01b60208201525b60405161024a9190611f9c565b34801561029957600080fd5b50601d546102ae90600160a01b900460ff1681565b604051901515815260200161024a565b3480156102ca57600080fd5b506102ae6102d9366004611fff565b6106d7565b3480156102ea57600080fd5b50600354610240565b3480156102ff57600080fd5b50610240600f5481565b34801561031557600080fd5b506102ae61032436600461202b565b610744565b34801561033557600080fd5b5061034961034436600461206c565b610806565b005b34801561035757600080fd5b506103496108dd565b34801561036c57600080fd5b5061024061037b3660046120af565b61092b565b34801561038c57600080fd5b506040516012815260200161024a565b3480156103a857600080fd5b50610240610972565b3480156103bd57600080fd5b506102ae6103cc3660046120c8565b6109e3565b3480156103dd57600080fd5b506103496103ec3660046120af565b6109f1565b3480156103fd57600080fd5b50601d546102ae90600160a81b900460ff1681565b34801561041e57600080fd5b5061024061042d3660046120c8565b6001600160a01b031660009081526006602052604090205490565b34801561045457600080fd5b50610349610a7f565b34801561046957600080fd5b50610349610af3565b34801561047e57600080fd5b506102ae61048d366004611fff565b610b2a565b34801561049e57600080fd5b5061024060055481565b3480156104b457600080fd5b5061024060045481565b3480156104ca57600080fd5b506103496104d93660046120e5565b610c58565b3480156104ea57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161024a565b34801561051c57600080fd5b506000546001600160a01b03166104f8565b34801561053a57600080fd5b506040805180820190915260088152674d41524c424f524f60c01b6020820152610280565b610349610d30565b34801561057357600080fd5b50610349611002565b34801561058857600080fd5b50601d546104f8906001600160a01b031681565b3480156105a857600080fd5b506102ae6105b7366004611fff565b61103d565b3480156105c857600080fd5b506000546104f8906001600160a01b031681565b3480156105e857600080fd5b506103496105f7366004612156565b61104a565b34801561060857600080fd5b50610240610617366004612182565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b34801561064e57600080fd5b506102ae61065d3660046121bb565b611085565b34801561066e57600080fd5b5061034961067d3660046121eb565b611099565b34801561068e57600080fd5b5061034961069d3660046120c8565b61112c565b3480156106ae57600080fd5b50610349611216565b3480156106c357600080fd5b50601b546104f8906001600160a01b031681565b3360008181526007602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906107329086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383166000908152600760209081526040808320338452909152812054600019146107f1576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03871660009081526007825283812033825290915291909120546107cc918490611316565b6001600160a01b03851660009081526007602090815260408083203384529091529020555b6107fc848484611350565b90505b9392505050565b6000546001600160a01b031633146108395760405162461bcd60e51b815260040161083090612209565b60405180910390fd5b600a869055600d859055600b849055600c839055600e82905561086a82610864858188818c8c6116f5565b906116f5565b600f55601081905561087d600282612254565b600f54106108cd5760405162461bcd60e51b815260206004820152601d60248201527f466565732063616e206e6f74206265206d6f7265207468616e203530250000006044820152606401610830565b6108d5611754565b505050505050565b6000546001600160a01b031633146109075760405162461bcd60e51b815260040161083090612209565b601d805460ff60a01b1916600160a01b179055606460128190556011819055601355565b600061073e610938610972565b601d546001600160a01b031660009081526006602052604090205461096c90610965906002905b90611252565b8590611252565b906112d4565b60066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f85461dead60009081527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e225460035491926109de9290916109d891906117ef565b906117ef565b905090565b600061073e826000196106d7565b6000546001600160a01b03163314610a1b5760405162461bcd60e51b815260040161083090612209565b6001811015610a2957600080fd5b6103e881600354610a3a9190612276565b610a449190612254565b60058190556040519081527f1273be876d6df5e39545188e5f5d2d930e30e383f2fb2dc9dfaae2643901be519060200160405180910390a150565b6000546001600160a01b03163314610aa95760405162461bcd60e51b815260040161083090612209565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610b1d5760405162461bcd60e51b815260040161083090612209565b6003546004819055600555565b600081600003610b9f576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9c919061228d565b91505b604080516001600160a01b0385168152602081018490527fda2bc2bedd1f85b5a59d5dbbd6684ff877ef916994a16ec08813101e99ace65f910160405180910390a160145460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff91906122a6565b6000546001600160a01b03163314610c825760405162461bcd60e51b815260040161083090612209565b601480546001600160a01b038781166001600160a01b031992831617909255601580548784169083168117909155601680548785169084168117909155601880548786169085168117909155601780549587169590941685179093556040805192835260208301949094529281019190915260608101919091527f06cd79b5e338fdebb51e28f829f3333e4fda9663d4732f262d97dbbacf748b159060800160405180910390a15050505050565b6000546001600160a01b03163314610d5a5760405162461bcd60e51b815260040161083090612209565b601d805460ff60a01b1916600160a01b179055606460128190556011819055601355601b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0491906122c3565b600280546001600160a01b0319166001600160a01b03928316179055601b546040805163c45a015560e01b81529051919092169163c45a01559160048083019260209291908290030181865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8691906122c3565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb91906122c3565b601d80546001600160a01b039283166001600160a01b031991821681178355601c8054909216179055306000818152600760209081526040808320601b80548816855292529091206000199055825460ff60a81b191690925590549091169063f305d719903490610f81816001600160a01b031660009081526006602052604090205490565b60008033426040518863ffffffff1660e01b8152600401610fa7969594939291906122e0565b60606040518083038185885af1158015610fc5573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fea919061231b565b5050601d805460ff60a81b1916600160a81b17905550565b6000546001600160a01b0316331461102c5760405162461bcd60e51b815260040161083090612209565b606460128190556011819055601355565b60006107ff338484611350565b6000546001600160a01b031633146110745760405162461bcd60e51b815260040161083090612209565b601191909155601291909155601355565b6000826110918361092b565b119392505050565b6000546001600160a01b031633146110c35760405162461bcd60e51b815260040161083090612209565b601d805460ff60a81b1916600160a81b84151581029190911791829055601e8390556040805184815260ff9290930491909116151560208301527f519582fd959400ab5e398f78c2768dea99251e8e26aed5578213b059ce4cee60910160405180910390a15050565b6000546001600160a01b031633146111565760405162461bcd60e51b815260040161083090612209565b6001600160a01b0381166111bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610830565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6014546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561124f573d6000803e3d6000fd5b50565b6000826000036112645750600061073e565b60006112708385612276565b90508261127d8583612254565b146107ff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610830565b60006107ff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611831565b6000818484111561133a5760405162461bcd60e51b81526004016108309190611f9c565b5060006113478486612349565b95945050505050565b601f5460009060ff16156113705761136984848461185f565b90506107ff565b6001600160a01b03841660009081526001602052604090205460ff161580156113b257506001600160a01b03831660009081526001602052604090205460ff16155b1561140757601d54600160a01b900460ff166114075760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610830565b6001600160a01b03841660009081526001602052604090205460ff1615801561143957506001600160a01b0383163014155b801561145057506001600160a01b03831661dead14155b801561146a5750601d546001600160a01b03848116911614155b801561148457506018546001600160a01b03848116911614155b801561149e57506015546001600160a01b03848116911614155b80156114c357506001600160a01b03831660009081526009602052604090205460ff16155b15611564576001600160a01b0383166000908152600660205260409020546005546114ee848361235c565b11156115625760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610830565b505b6001600160a01b03841660009081526008602052604081205460ff16806115a357506001600160a01b03841660009081526008602052604090205460ff165b6015549091506000906001600160a01b038781169116146115d957816115d3576115ce868587611933565b6115dc565b836115dc565b60005b90506115e88685611ae2565b6115f0611b4f565b156115fd576115fd611ba5565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03891660009081526006909152919091205461164f918390611316565b6001600160a01b038716600090815260066020526040812091909155826116765781611678565b845b6001600160a01b03871660009081526006602052604090205490915061169e90826116f5565b6001600160a01b0380881660008181526006602052604090819020939093559151908916906000805160206123f7833981519152906116e09085815260200190565b60405180910390a35060019695505050505050565b600080611702838561235c565b9050838110156107ff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610830565b7f8cc651ceed4360bdb07d4dfc17daa4a6fa17092a313d2464a582a73e9b932800611791606461096c601254600f5461125290919063ffffffff16565b6117ad606461096c601154600f5461125290919063ffffffff16565b6117c9606461096c601354600f5461125290919063ffffffff16565b6040805160ff9485168152928416602084015292168183015290519081900360600190a1565b60006107ff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611316565b600081836118525760405162461bcd60e51b81526004016108309190611f9c565b5060006113478486612254565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b03861660009081526006909152918220546118b0918490611316565b6001600160a01b0380861660009081526006602052604080822093909355908516815220546118df90836116f5565b6001600160a01b0380851660008181526006602052604090819020939093559151908616906000805160206123f7833981519152906119219086815260200190565b60405180910390a35060019392505050565b601354601d54600091906001600160a01b0384811691161480156119715750601554600c5460009161196f91906001600160a01b0316316117ef565b115b1561197f575060115461199a565b601d546001600160a01b039081169086160361199a57506012545b60006119c760105460646119ae9190612276565b61096c8461095f600f548a61125290919063ffffffff16565b905060006119e6600f5461096c600e548561125290919063ffffffff16565b905060006119f483836117ef565b30600090815260066020526040902054909150611a1190826116f5565b30600090815260066020526040808220929092556018546001600160a01b031681522054611a3f90836116f5565b6018546001600160a01b0390811660009081526006602090815260409182902093909355518381523092918b16916000805160206123f7833981519152910160405180910390a38115611acc57600354611a9990836117ef565b6003556040518281526000906001600160a01b038a16906000805160206123f78339815191529060200160405180910390a35b611ad687846117ef565b98975050505050505050565b60045481111580611b0b57506001600160a01b03821660009081526009602052604090205460ff165b611b4b5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610830565b5050565b601d546000906001600160a01b03163314801590611b705750601f5460ff16155b8015611b855750601d54600160a81b900460ff165b80156109de575050601e5430600090815260066020526040902054101590565b601f805460ff19166001179055601954601a54600091611bc491611085565b611bd057600a54611bd3565b60005b90506000611bf7600261096c600f5461096c86601e5461125290919063ffffffff16565b90506000611c1082601e546117ef90919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611c4a57611c4a61236f565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611c7b57611c7b61236f565b6001600160a01b039283166020918202929092010152601b5460405163791ac94760e01b81524792919091169063791ac94790611cc5908690600090879030904290600401612385565b600060405180830381600087803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b505050506000611d0c82476117ef90919063ffffffff16565b90506000611d27611d1e8860026112d4565b600f54906117ef565b90506000611d3c600261096c8481878d611252565b90506000611d598361096c600b548761125290919063ffffffff16565b90506000611d768461096c600d548861125290919063ffffffff16565b90506000611d938561096c600c548961125290919063ffffffff16565b6015546040519192506000916001600160a01b039091169085908381818185875af1925050503d8060008114611de5576040519150601f19603f3d011682016040523d82523d6000602084013e611dea565b606091505b50506016546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114611e3a576040519150601f19603f3d011682016040523d82523d6000602084013e611e3f565b606091505b50506017546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611e8f576040519150601f19603f3d011682016040523d82523d6000602084013e611e94565b606091505b5060009250508b159050611f8457601b60009054906101000a90046001600160a01b03166001600160a01b031663f305d71986308e600080601460009054906101000a90046001600160a01b0316426040518863ffffffff1660e01b8152600401611f04969594939291906122e0565b60606040518083038185885af1158015611f22573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611f47919061231b565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050601f805460ff1916905550505050505050505050565b600060208083528351808285015260005b81811015611fc957858101830151858201604001528201611fad565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461124f57600080fd5b6000806040838503121561201257600080fd5b823561201d81611fea565b946020939093013593505050565b60008060006060848603121561204057600080fd5b833561204b81611fea565b9250602084013561205b81611fea565b929592945050506040919091013590565b60008060008060008060c0878903121561208557600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000602082840312156120c157600080fd5b5035919050565b6000602082840312156120da57600080fd5b81356107ff81611fea565b600080600080600060a086880312156120fd57600080fd5b853561210881611fea565b9450602086013561211881611fea565b9350604086013561212881611fea565b9250606086013561213881611fea565b9150608086013561214881611fea565b809150509295509295909350565b60008060006060848603121561216b57600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561219557600080fd5b82356121a081611fea565b915060208301356121b081611fea565b809150509250929050565b600080604083850312156121ce57600080fd5b50508035926020909101359150565b801515811461124f57600080fd5b600080604083850312156121fe57600080fd5b823561201d816121dd565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261227157634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761073e5761073e61223e565b60006020828403121561229f57600080fd5b5051919050565b6000602082840312156122b857600080fd5b81516107ff816121dd565b6000602082840312156122d557600080fd5b81516107ff81611fea565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561233057600080fd5b8351925060208401519150604084015190509250925092565b8181038181111561073e5761073e61223e565b8082018082111561073e5761073e61223e565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123d55784516001600160a01b0316835293830193918301916001016123b0565b50506001600160a01b0396909616606085015250505060800152939250505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220cca5245c4754730990754b2207c590a19c7e7316784aa45d01fe2b1f6001389364736f6c63430008120033