608060405234801561001057600080fd5b5060405161193038038061193083398181016040528101906100329190610525565b8181816003908161004391906107db565b50806004908161005391906107db565b505050610066848461006f60201b60201c565b5050505061099b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036100e15760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016100d891906108bc565b60405180910390fd5b6100f3600083836100f760201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361014957806002600082825461013d9190610906565b9250508190555061021c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156101d5578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016101cc93929190610949565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361026557806002600082825403925050819055506102b2565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161030f9190610980565b60405180910390a3505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061035b82610330565b9050919050565b61036b81610350565b811461037657600080fd5b50565b60008151905061038881610362565b92915050565b6000819050919050565b6103a18161038e565b81146103ac57600080fd5b50565b6000815190506103be81610398565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610417826103ce565b810181811067ffffffffffffffff82111715610436576104356103df565b5b80604052505050565b600061044961031c565b9050610455828261040e565b919050565b600067ffffffffffffffff821115610475576104746103df565b5b61047e826103ce565b9050602081019050919050565b60005b838110156104a957808201518184015260208101905061048e565b60008484015250505050565b60006104c86104c38461045a565b61043f565b9050828152602081018484840111156104e4576104e36103c9565b5b6104ef84828561048b565b509392505050565b600082601f83011261050c5761050b6103c4565b5b815161051c8482602086016104b5565b91505092915050565b6000806000806080858703121561053f5761053e610326565b5b600061054d87828801610379565b945050602061055e878288016103af565b935050604085015167ffffffffffffffff81111561057f5761057e61032b565b5b61058b878288016104f7565b925050606085015167ffffffffffffffff8111156105ac576105ab61032b565b5b6105b8878288016104f7565b91505092959194509250565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061061657607f821691505b602082108103610629576106286105cf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026106917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610654565b61069b8683610654565b95508019841693508086168417925050509392505050565b6000819050919050565b60006106d86106d36106ce8461038e565b6106b3565b61038e565b9050919050565b6000819050919050565b6106f2836106bd565b6107066106fe826106df565b848454610661565b825550505050565b600090565b61071b61070e565b6107268184846106e9565b505050565b5b8181101561074a5761073f600082610713565b60018101905061072c565b5050565b601f82111561078f576107608161062f565b61076984610644565b81016020851015610778578190505b61078c61078485610644565b83018261072b565b50505b505050565b600082821c905092915050565b60006107b260001984600802610794565b1980831691505092915050565b60006107cb83836107a1565b9150826002028217905092915050565b6107e4826105c4565b67ffffffffffffffff8111156107fd576107fc6103df565b5b61080782546105fe565b61081282828561074e565b600060209050601f8311600181146108455760008415610833578287015190505b61083d85826107bf565b8655506108a5565b601f1984166108538661062f565b60005b8281101561087b57848901518255600182019150602085019450602081019050610856565b868310156108985784890151610894601f8916826107a1565b8355505b6001600288020188555050505b505050505050565b6108b681610350565b82525050565b60006020820190506108d160008301846108ad565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006109118261038e565b915061091c8361038e565b9250828201905080821115610934576109336108d7565b5b92915050565b6109438161038e565b82525050565b600060608201905061095e60008301866108ad565b61096b602083018561093a565b610978604083018461093a565b949350505050565b6000602082019050610995600083018461093a565b92915050565b610f86806109aa6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806342966c681161007157806342966c681461016857806370a082311461018457806379cc6790146101b457806395d89b41146101d0578063a9059cbb146101ee578063dd62ed3e1461021e576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100fc57806323b872dd1461011a578063313ce5671461014a575b600080fd5b6100b661024e565b6040516100c39190610bad565b60405180910390f35b6100e660048036038101906100e19190610c68565b6102e0565b6040516100f39190610cc3565b60405180910390f35b610104610303565b6040516101119190610ced565b60405180910390f35b610134600480360381019061012f9190610d08565b61030d565b6040516101419190610cc3565b60405180910390f35b61015261033c565b60405161015f9190610d77565b60405180910390f35b610182600480360381019061017d9190610d92565b610345565b005b61019e60048036038101906101999190610dbf565b610359565b6040516101ab9190610ced565b60405180910390f35b6101ce60048036038101906101c99190610c68565b6103a1565b005b6101d86103c1565b6040516101e59190610bad565b60405180910390f35b61020860048036038101906102039190610c68565b610453565b6040516102159190610cc3565b60405180910390f35b61023860048036038101906102339190610dec565b610476565b6040516102459190610ced565b60405180910390f35b60606003805461025d90610e5b565b80601f016020809104026020016040519081016040528092919081815260200182805461028990610e5b565b80156102d65780601f106102ab576101008083540402835291602001916102d6565b820191906000526020600020905b8154815290600101906020018083116102b957829003601f168201915b5050505050905090565b6000806102eb6104fd565b90506102f8818585610505565b600191505092915050565b6000600254905090565b6000806103186104fd565b9050610325858285610517565b6103308585856105ab565b60019150509392505050565b60006012905090565b6103566103506104fd565b8261069f565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103b3826103ad6104fd565b83610517565b6103bd828261069f565b5050565b6060600480546103d090610e5b565b80601f01602080910402602001604051908101604052809291908181526020018280546103fc90610e5b565b80156104495780601f1061041e57610100808354040283529160200191610449565b820191906000526020600020905b81548152906001019060200180831161042c57829003601f168201915b5050505050905090565b60008061045e6104fd565b905061046b8185856105ab565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b6105128383836001610721565b505050565b60006105238484610476565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105a55781811015610595578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161058c93929190610e9b565b60405180910390fd5b6105a484848484036000610721565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361061d5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106149190610ed2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361068f5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106869190610ed2565b60405180910390fd5b61069a8383836108f8565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107115760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107089190610ed2565b60405180910390fd5b61071d826000836108f8565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107935760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161078a9190610ed2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108055760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016107fc9190610ed2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156108f2578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108e99190610ced565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361094a57806002600082825461093e9190610f1c565b92505081905550610a1d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109d6578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109cd93929190610e9b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a665780600260008282540392505081905550610ab3565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b109190610ced565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610b57578082015181840152602081019050610b3c565b60008484015250505050565b6000601f19601f8301169050919050565b6000610b7f82610b1d565b610b898185610b28565b9350610b99818560208601610b39565b610ba281610b63565b840191505092915050565b60006020820190508181036000830152610bc78184610b74565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610bff82610bd4565b9050919050565b610c0f81610bf4565b8114610c1a57600080fd5b50565b600081359050610c2c81610c06565b92915050565b6000819050919050565b610c4581610c32565b8114610c5057600080fd5b50565b600081359050610c6281610c3c565b92915050565b60008060408385031215610c7f57610c7e610bcf565b5b6000610c8d85828601610c1d565b9250506020610c9e85828601610c53565b9150509250929050565b60008115159050919050565b610cbd81610ca8565b82525050565b6000602082019050610cd86000830184610cb4565b92915050565b610ce781610c32565b82525050565b6000602082019050610d026000830184610cde565b92915050565b600080600060608486031215610d2157610d20610bcf565b5b6000610d2f86828701610c1d565b9350506020610d4086828701610c1d565b9250506040610d5186828701610c53565b9150509250925092565b600060ff82169050919050565b610d7181610d5b565b82525050565b6000602082019050610d8c6000830184610d68565b92915050565b600060208284031215610da857610da7610bcf565b5b6000610db684828501610c53565b91505092915050565b600060208284031215610dd557610dd4610bcf565b5b6000610de384828501610c1d565b91505092915050565b60008060408385031215610e0357610e02610bcf565b5b6000610e1185828601610c1d565b9250506020610e2285828601610c1d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e7357607f821691505b602082108103610e8657610e85610e2c565b5b50919050565b610e9581610bf4565b82525050565b6000606082019050610eb06000830186610e8c565b610ebd6020830185610cde565b610eca6040830184610cde565b949350505050565b6000602082019050610ee76000830184610e8c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f2782610c32565b9150610f3283610c32565b9250828201905080821115610f4a57610f49610eed565b5b9291505056fea2646970667358221220e353344ed1868b44c83d010291385e72da3bbd561a7bbe8928fb5a1881c6f4c364736f6c6343000819003300000000000000000000000058f71bb76ee5f0248da4bd909e0fb10de219d4400000000000000000000000000000000000000000033b2e3c9fd0803ce8000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000010556e69636f726e2052756e20f09fa684000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006554e494b524e0000000000000000000000000000000000000000000000000000