60806040523480156200001157600080fd5b5060405162001c1b38038062001c1b833981016040819052620000349162000123565b818160006200004483826200021c565b5060016200005382826200021c565b5050505050620002e8565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008657600080fd5b81516001600160401b0380821115620000a357620000a36200005e565b604051601f8301601f19908116603f01168101908282118183101715620000ce57620000ce6200005e565b81604052838152602092508683858801011115620000eb57600080fd5b600091505b838210156200010f5785820183015181830184015290820190620000f0565b600093810190920192909252949350505050565b600080604083850312156200013757600080fd5b82516001600160401b03808211156200014f57600080fd5b6200015d8683870162000074565b935060208501519150808211156200017457600080fd5b50620001838582860162000074565b9150509250929050565b600181811c90821680620001a257607f821691505b602082108103620001c357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021757600081815260208120601f850160051c81016020861015620001f25750805b601f850160051c820191505b818110156200021357828155600101620001fe565b5050505b505050565b81516001600160401b038111156200023857620002386200005e565b62000250816200024984546200018d565b84620001c9565b602080601f8311600181146200028857600084156200026f5750858301515b600019600386901b1c1916600185901b17855562000213565b600085815260208120601f198616915b82811015620002b95788860151825594840194600190910190840162000298565b5085821015620002d85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61192380620002f86000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde146101ee578063c87b56dd14610201578063d3fc986414610214578063e985e9c51461022757600080fd5b806370a08231146101b257806395d89b41146101d3578063a22cb465146101db57600080fd5b8063095ea7b3116100c8578063095ea7b31461016457806323b872dd1461017957806342842e0e1461018c5780636352211e1461019f57600080fd5b806301ffc9a7146100ef57806306fdde0314610117578063081812fc1461012c575b600080fd5b6101026100fd366004611355565b610270565b60405190151581526020015b60405180910390f35b61011f610355565b60405161010e91906113dd565b61013f61013a3660046113f0565b6103e7565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010e565b610177610172366004611432565b61041b565b005b61017761018736600461145c565b610578565b61017761019a36600461145c565b6105ff565b61013f6101ad3660046113f0565b61061a565b6101c56101c0366004611498565b61068c565b60405190815260200161010e565b61011f610740565b6101776101e93660046114b3565b61074f565b6101776101fc3660046115b2565b61075e565b61011f61020f3660046113f0565b6107ec565b61017761022236600461162e565b610895565b610102610235366004611699565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061030357507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061034f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060008054610364906116cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610390906116cc565b80156103dd5780601f106103b2576101008083540402835291602001916103dd565b820191906000526020600020905b8154815290600101906020018083116103c057829003601f168201915b5050505050905090565b60006103f2826108b7565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006104268261061a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036104ce5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821614806104f757506104f78133610235565b6105695760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016104c5565b610573838361092b565b505050565b61058233826109cb565b6105f45760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016104c5565b610573838383610a8b565b6105738383836040518060200160405280600081525061075e565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff168061034f5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016104c5565b600073ffffffffffffffffffffffffffffffffffffffff82166107175760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e6572000000000000000000000000000000000000000000000060648201526084016104c5565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b606060018054610364906116cc565b61075a338383610d38565b5050565b61076833836109cb565b6107da5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f7665640000000000000000000000000000000000000060648201526084016104c5565b6107e684848484610e4b565b50505050565b60606107f7826108b7565b60008281526006602052604090208054610810906116cc565b80601f016020809104026020016040519081016040528092919081815260200182805461083c906116cc565b80156108895780601f1061085e57610100808354040283529160200191610889565b820191906000526020600020905b81548152906001019060200180831161086c57829003601f168201915b50505050509050919050565b61089f8383610ed4565b60008281526006602052604090206107e6828261176d565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff166109285760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e204944000000000000000060448201526064016104c5565b50565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906109858261061a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806109d78361061a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610a45575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b80610a8357508373ffffffffffffffffffffffffffffffffffffffff16610a6b846103e7565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16610aab8261061a565b73ffffffffffffffffffffffffffffffffffffffff1614610b345760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104c5565b73ffffffffffffffffffffffffffffffffffffffff8216610bbc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016104c5565b8273ffffffffffffffffffffffffffffffffffffffff16610bdc8261061a565b73ffffffffffffffffffffffffffffffffffffffff1614610c655760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e657200000000000000000000000000000000000000000000000000000060648201526084016104c5565b600081815260046020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610db35760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104c5565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610e56848484610a8b565b610e6284848484610eee565b6107e65760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104c5565b61075a8282604051806020016040528060008152506110c7565b600073ffffffffffffffffffffffffffffffffffffffff84163b156110bc576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290610f65903390899088908890600401611887565b6020604051808303816000875af1925050508015610fbe575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610fbb918101906118d0565b60015b611071573d808015610fec576040519150601f19603f3d011682016040523d82523d6000602084013e610ff1565b606091505b5080516000036110695760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104c5565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050610a83565b506001949350505050565b6110d18383611150565b6110de6000848484610eee565b6105735760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016104c5565b73ffffffffffffffffffffffffffffffffffffffff82166111b35760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104c5565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156112255760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104c5565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156112975760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104c5565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461092857600080fd5b60006020828403121561136757600080fd5b813561137281611327565b9392505050565b6000815180845260005b8181101561139f57602081850181015186830182015201611383565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006113726020830184611379565b60006020828403121561140257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461142d57600080fd5b919050565b6000806040838503121561144557600080fd5b61144e83611409565b946020939093013593505050565b60008060006060848603121561147157600080fd5b61147a84611409565b925061148860208501611409565b9150604084013590509250925092565b6000602082840312156114aa57600080fd5b61137282611409565b600080604083850312156114c657600080fd5b6114cf83611409565b9150602083013580151581146114e457600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115611539576115396114ef565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561157f5761157f6114ef565b8160405280935085815286868601111561159857600080fd5b858560208301376000602087830101525050509392505050565b600080600080608085870312156115c857600080fd5b6115d185611409565b93506115df60208601611409565b925060408501359150606085013567ffffffffffffffff81111561160257600080fd5b8501601f8101871361161357600080fd5b6116228782356020840161151e565b91505092959194509250565b60008060006060848603121561164357600080fd5b61164c84611409565b925060208401359150604084013567ffffffffffffffff81111561166f57600080fd5b8401601f8101861361168057600080fd5b61168f8682356020840161151e565b9150509250925092565b600080604083850312156116ac57600080fd5b6116b583611409565b91506116c360208401611409565b90509250929050565b600181811c908216806116e057607f821691505b602082108103611719577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561057357600081815260208120601f850160051c810160208610156117465750805b601f850160051c820191505b8181101561176557828155600101611752565b505050505050565b815167ffffffffffffffff811115611787576117876114ef565b61179b8161179584546116cc565b8461171f565b602080601f8311600181146117ee57600084156117b85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611765565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561183b5788860151825594840194600190910190840161181c565b508582101561187757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526118c66080830184611379565b9695505050505050565b6000602082840312156118e257600080fd5b81516113728161132756fea2646970667358221220abbcdc1acc11f5b7baa390828a57a6064f0ad3ca240e3d7ddd3de1378e86f45e64736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d544553545f3732315f64657634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006543732315f340000000000000000000000000000000000000000000000000000