60806040523480156200001157600080fd5b506040805190810160405280600c81526020017f5072696d617320546f6b656e0000000000000000000000000000000000000000815250600290805190602001906200005f9291906200022a565b5060126003819055506040805190810160405280600381526020017f505354000000000000000000000000000000000000000000000000000000000081525060049080519060200190620000b59291906200022a565b506040805190810160405280600481526020017f56322e300000000000000000000000000000000000000000000000000000000081525060059080519060200190620001039291906200022a565b50600354600a0a6305f5e10002600781905550600754600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600754600681905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426008819055506000600a8190555060006009819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a3620002d9565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200026d57805160ff19168380011785556200029e565b828001600101855582156200029e579182015b828111156200029d57825182559160200191906001019062000280565b5b509050620002ad9190620002b1565b5090565b620002d691905b80821115620002d2576000816000905550600101620002b8565b5090565b90565b6127bb80620002e96000396000f30060806040526004361061011d576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde0314610122578063095ea7b3146101b25780630988ca8c1461021757806318160ddd146102a05780631bfe0308146102cb578063217fe6c61461035457806323b872dd146103f5578063313ce5671461047a57806354fd4d50146104a557806370a0823114610535578063732016671461058c5780637d72aa65146106035780638df15e191461068c57806395d89b41146106d9578063a4faf89e14610769578063a5a98d781461082a578063a9059cbb14610855578063ba6afc50146108ba578063be30eda8146108e5578063c669c95514610952578063dd62ed3e14610a13575b600080fd5b34801561012e57600080fd5b50610137610a8a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561017757808201518184015260208101905061015c565b50505050905090810190601f1680156101a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101be57600080fd5b506101fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b28565b604051808215151515815260200191505060405180910390f35b34801561022357600080fd5b5061029e600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610c1a565b005b3480156102ac57600080fd5b506102b5610c9b565b6040518082815260200191505060405180910390f35b3480156102d757600080fd5b50610352600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610ca1565b005b34801561036057600080fd5b506103db600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509192919290505050610e4d565b604051808215151515815260200191505060405180910390f35b34801561040157600080fd5b50610460600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ed4565b604051808215151515815260200191505060405180910390f35b34801561048657600080fd5b5061048f61121e565b6040518082815260200191505060405180910390f35b3480156104b157600080fd5b506104ba611224565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104fa5780820151818401526020810190506104df565b50505050905090810190601f1680156105275780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561054157600080fd5b50610576600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112c2565b6040518082815260200191505060405180910390f35b34801561059857600080fd5b50610601600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061134c565b005b34801561060f57600080fd5b5061068a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091929192905050506116c3565b005b34801561069857600080fd5b506106d7600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061186f565b005b3480156106e557600080fd5b506106ee6119cb565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561072e578082015181840152602081019050610713565b50505050905090810190601f16801561075b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561077557600080fd5b506108106004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050611a69565b604051808215151515815260200191505060405180910390f35b34801561083657600080fd5b5061083f611c83565b6040518082815260200191505060405180910390f35b34801561086157600080fd5b506108a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611de8565b604051808215151515815260200191505060405180910390f35b3480156108c657600080fd5b506108cf611f9a565b6040518082815260200191505060405180910390f35b3480156108f157600080fd5b50610950600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fa4565b005b34801561095e57600080fd5b506109f96004803603810190808035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919291929080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050612290565b604051808215151515815260200191505060405180910390f35b348015610a1f57600080fd5b50610a74600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612584565b6040518082815260200191505060405180910390f35b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610b205780601f10610af557610100808354040283529160200191610b20565b820191906000526020600020905b815481529060010190602001808311610b0357829003601f168201915b505050505081565b600081600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b610c97826001836040518082805190602001908083835b602083101515610c565780518252602082019150602081019050602083039250610c31565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061260b90919063ffffffff16565b5050565b60065481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610cfc57600080fd5b610d79826001836040518082805190602001908083835b602083101515610d385780518252602082019150602081019050602083039250610d13565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061262490919063ffffffff16565b7fd211483f91fc6eff862467f8de606587a30c8fc9981056f051b897a418df803a8282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e0e578082015181840152602081019050610df3565b50505050905090810190601f168015610e3b5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6000610ecc836001846040518082805190602001908083835b602083101515610e8b5780518252602082019150602081019050602083039250610e66565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061268290919063ffffffff16565b905092915050565b600081610ee0856112c2565b10158015610f6a575081600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1515610f7557600080fd5b610fc782600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061105c82600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061112e82600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b60035481565b60058054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112ba5780601f1061128f576101008083540402835291602001916112ba565b820191906000526020600020905b81548152906001019060200180831161129d57829003601f168201915b505050505081565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054039050919050565b6040805190810160405280600881526020017f556e6c6f636b657200000000000000000000000000000000000000000000000081525061138c3382610c1a565b81841015151561139b57600080fd5b83600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101515156113e957600080fd5b61143b84600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f6381d9813cabeb57471b5a7e05078e64845ccdb563146a6911d536f24ce960f18585604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611527575060008214155b156116bc5761157e82600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061161382600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35b5050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561171e57600080fd5b61179b826001836040518082805190602001908083835b60208310151561175a5780518252602082019150602081019050602083039250611735565b6001836020036101000a038019825116818451168082178552505050505050905001915050908152602001604051809103902061273190919063ffffffff16565b7fbfec83d64eaa953f2708271a023ab9ee82057f8f3578d548c1a4ba0b5b7004898282604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611830578082015181840152602081019050611815565b50505050905090810190601f16801561185d5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a15050565b6040805190810160405280600681526020017f4c6f636b657200000000000000000000000000000000000000000000000000008152506118af3382610c1a565b816118b9846112c2565b101515156118c657600080fd5b61191882600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d4278383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a1505050565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a615780601f10611a3657610100808354040283529160200191611a61565b820191906000526020600020905b815481529060010190602001808311611a4457829003601f168201915b505050505081565b6000806040805190810160405280601581526020017f496e63656e74697665734469737472696275746f720000000000000000000000815250611aac3382610c1a565b83518551141515611abc57600080fd5b600091505b8451821015611c7757611af68483815181101515611adb57fe5b90602001906020020151600a546126db90919063ffffffff16565b600a81905550611b7c8483815181101515611b0d57fe5b90602001906020020151600c60008886815181101515611b2957fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600c60008785815181101515611b8e57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508482815181101515611be457fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8685815181101515611c4b57fe5b906020019060200201516040518082815260200191505060405180910390a38180600101925050611ac1565b60019250505092915050565b60008060008060006040805190810160405280601181526020017f496e666c6174696f6e4f70657261746f72000000000000000000000000000000815250611ccb3382610c1a565b4294506201518085811515611cdc57fe5b0493508360095414151515611cf057600080fd5b836009819055506301e133806008548603811515611d0a57fe5b0491506001821015611d395761016d600a600754811515611d2757fe5b04811515611d3157fe5b049250611d6c565b601482101515611d4c5760009250611d6b565b6103e861016d8360050260640360075402811515611d6657fe5b040292505b5b611d8183600a5461270690919063ffffffff16565b600a81905550611d9c8360065461270690919063ffffffff16565b6006819055507fb1231b3402177cbf2e12f37b280d75337efb1be12ac563171940fc3627da5df3600a546040518082815260200191505060405180910390a1600a549550505050505090565b600081611df4336112c2565b10151515611e0157600080fd5b611e5382600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611ee882600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600a54905090565b6040805190810160405280600681526020017f4c6f636b65720000000000000000000000000000000000000000000000000000815250611fe43382610c1a565b81611fee856112c2565b10151515611ffb57600080fd5b61204d82600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506120e282600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061217782600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461270690919063ffffffff16565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a37f625fed9875dada8643f2418b838ae0bc78d9a148a18eee4ee1979ff0f3f5d4278383604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a150505050565b6000806040805190810160405280601381526020017f496e63656e7469766573436f6c6c6563746f72000000000000000000000000008152506122d33382610c1a565b835185511415156122e357600080fd5b600091505b84518210156125785761231d848381518110151561230257fe5b90602001906020020151600a5461270690919063ffffffff16565b600a819055506123a3848381518110151561233457fe5b90602001906020020151600c6000888681518110151561235057fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600c600087858151811015156123b557fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061247d848381518110151561240e57fe5b90602001906020020151600b6000888681518110151561242a57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126db90919063ffffffff16565b600b6000878581518110151561248f57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff1685838151811015156124fd57fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef868581518110151561254c57fe5b906020019060200201516040518082815260200191505060405180910390a381806001019250506122e8565b60019250505092915050565b6000600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126158282612682565b151561262057600080fd5b5050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60008082840390508383111515156126ef57fe5b828101841415156126fc57fe5b8091505092915050565b600080828401905083811015151561271a57fe5b8281038414151561272757fe5b8091505092915050565b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050505600a165627a7a72305820c25743e753c5ef699bd0430bc0e07061bd02228d5ff44df74aca75001cbffedb0029