6080604052641ac688be0060055564012a05f200600655348015610021575f80fd5b506040518060400160405280601b81526020017f5b4520542048202d2042204f204e20555320cbb3204e204520545d00000000008152506040518060400160405280600181526020017f2400000000000000000000000000000000000000000000000000000000000000815250816003908161009d91906105a7565b5080600490816100ad91906105a7565b5050506100ca3369d3c21bcecceda10000006100cf60201b60201c565b61078b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361013f575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161013691906106b5565b60405180910390fd5b6101505f838361015460201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101a4578060025f82825461019891906106fb565b92505081905550610272565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561022d578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016102249392919061073d565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102b9578060025f8282540392505081905550610303565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103609190610772565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103e857607f821691505b6020821081036103fb576103fa6103a4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261045d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610422565b6104678683610422565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104ab6104a66104a18461047f565b610488565b61047f565b9050919050565b5f819050919050565b6104c483610491565b6104d86104d0826104b2565b84845461042e565b825550505050565b5f90565b6104ec6104e0565b6104f78184846104bb565b505050565b5b8181101561051a5761050f5f826104e4565b6001810190506104fd565b5050565b601f82111561055f5761053081610401565b61053984610413565b81016020851015610548578190505b61055c61055485610413565b8301826104fc565b50505b505050565b5f82821c905092915050565b5f61057f5f1984600802610564565b1980831691505092915050565b5f6105978383610570565b9150826002028217905092915050565b6105b08261036d565b67ffffffffffffffff8111156105c9576105c8610377565b5b6105d382546103d1565b6105de82828561051e565b5f60209050601f83116001811461060f575f84156105fd578287015190505b610607858261058c565b86555061066e565b601f19841661061d86610401565b5f5b828110156106445784890151825560018201915060208501945060208101905061061f565b86831015610661578489015161065d601f891682610570565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61069f82610676565b9050919050565b6106af81610695565b82525050565b5f6020820190506106c85f8301846106a6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6107058261047f565b91506107108361047f565b9250828201905080821115610728576107276106ce565b5b92915050565b6107378161047f565b82525050565b5f6060820190506107505f8301866106a6565b61075d602083018561072e565b61076a604083018461072e565b949350505050565b5f6020820190506107855f83018461072e565b92915050565b611217806107985f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c806370a082311161008a578063a9059cbb11610064578063a9059cbb14610215578063c67bbc2414610245578063d67b06c114610263578063dd62ed3e1461027f576100cd565b806370a08231146101a957806390825c28146101d957806395d89b41146101f7576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d57806325e6f5161461016d578063313ce5671461018b575b5f80fd5b6100d96102af565b6040516100e69190610c67565b60405180910390f35b61010960048036038101906101049190610d25565b61033f565b6040516101169190610d7d565b60405180910390f35b610127610361565b6040516101349190610da5565b60405180910390f35b61015760048036038101906101529190610dbe565b61036a565b6040516101649190610d7d565b60405180910390f35b610175610398565b6040516101829190610c67565b60405180910390f35b6101936103d5565b6040516101a09190610e29565b60405180910390f35b6101c360048036038101906101be9190610e42565b6103dd565b6040516101d09190610da5565b60405180910390f35b6101e1610422565b6040516101ee9190610da5565b60405180910390f35b6101ff61042b565b60405161020c9190610c67565b60405180910390f35b61022f600480360381019061022a9190610d25565b6104bb565b60405161023c9190610d7d565b60405180910390f35b61024d6104dd565b60405161025a9190610da5565b60405180910390f35b61027d60048036038101906102789190610fad565b6104e6565b005b61029960048036038101906102949190610ff4565b610573565b6040516102a69190610da5565b60405180910390f35b6060600380546102be9061105f565b80601f01602080910402602001604051908101604052809291908181526020018280546102ea9061105f565b80156103355780601f1061030c57610100808354040283529160200191610335565b820191905f5260205f20905b81548152906001019060200180831161031857829003601f168201915b5050505050905090565b5f806103496105f5565b90506103568185856105fc565b600191505092915050565b5f600254905090565b5f806103746105f5565b905061038185828561060e565b61038c8585856106a0565b60019150509392505050565b60606040518060400160405280600b81526020017f737461626c6520636f696e000000000000000000000000000000000000000000815250905090565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f600654905090565b60606004805461043a9061105f565b80601f01602080910402602001604051908101604052809291908181526020018280546104669061105f565b80156104b15780601f10610488576101008083540402835291602001916104b1565b820191905f5260205f20905b81548152906001019060200180831161049457829003601f168201915b5050505050905090565b5f806104c56105f5565b90506104d28185856106a0565b600191505092915050565b5f600554905090565b5f815111610529576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610520906110d9565b60405180910390fd5b5f5b815181101561056f5761056282828151811061054a576105496110f7565b5b6020026020010151690a968163f0a57b400000610790565b808060010191505061052b565b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610609838383600161080f565b505050565b5f6106198484610573565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461069a578181101561068b578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161068293929190611133565b60405180910390fd5b61069984848484035f61080f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610710575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107079190611168565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610780575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107779190611168565b60405180910390fd5b61078b8383836109de565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610800575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107f79190611168565b60405180910390fd5b61080b5f83836109de565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361087f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108769190611168565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108ef575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108e69190611168565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156109d8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109cf9190610da5565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a2e578060025f828254610a2291906111ae565b92505081905550610afc565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610ab7578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610aae93929190611133565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b43578060025f8282540392505081905550610b8d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610da5565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610c3982610bf7565b610c438185610c01565b9350610c53818560208601610c11565b610c5c81610c1f565b840191505092915050565b5f6020820190508181035f830152610c7f8184610c2f565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cc182610c98565b9050919050565b610cd181610cb7565b8114610cdb575f80fd5b50565b5f81359050610cec81610cc8565b92915050565b5f819050919050565b610d0481610cf2565b8114610d0e575f80fd5b50565b5f81359050610d1f81610cfb565b92915050565b5f8060408385031215610d3b57610d3a610c90565b5b5f610d4885828601610cde565b9250506020610d5985828601610d11565b9150509250929050565b5f8115159050919050565b610d7781610d63565b82525050565b5f602082019050610d905f830184610d6e565b92915050565b610d9f81610cf2565b82525050565b5f602082019050610db85f830184610d96565b92915050565b5f805f60608486031215610dd557610dd4610c90565b5b5f610de286828701610cde565b9350506020610df386828701610cde565b9250506040610e0486828701610d11565b9150509250925092565b5f60ff82169050919050565b610e2381610e0e565b82525050565b5f602082019050610e3c5f830184610e1a565b92915050565b5f60208284031215610e5757610e56610c90565b5b5f610e6484828501610cde565b91505092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610ea782610c1f565b810181811067ffffffffffffffff82111715610ec657610ec5610e71565b5b80604052505050565b5f610ed8610c87565b9050610ee48282610e9e565b919050565b5f67ffffffffffffffff821115610f0357610f02610e71565b5b602082029050602081019050919050565b5f80fd5b5f610f2a610f2584610ee9565b610ecf565b90508083825260208201905060208402830185811115610f4d57610f4c610f14565b5b835b81811015610f765780610f628882610cde565b845260208401935050602081019050610f4f565b5050509392505050565b5f82601f830112610f9457610f93610e6d565b5b8135610fa4848260208601610f18565b91505092915050565b5f60208284031215610fc257610fc1610c90565b5b5f82013567ffffffffffffffff811115610fdf57610fde610c94565b5b610feb84828501610f80565b91505092915050565b5f806040838503121561100a57611009610c90565b5b5f61101785828601610cde565b925050602061102885828601610cde565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061107657607f821691505b60208210810361108957611088611032565b5b50919050565b7f4e6f20726563697069656e74732070726f7669646564000000000000000000005f82015250565b5f6110c3601683610c01565b91506110ce8261108f565b602082019050919050565b5f6020820190508181035f8301526110f0816110b7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61112d81610cb7565b82525050565b5f6060820190506111465f830186611124565b6111536020830185610d96565b6111606040830184610d96565b949350505050565b5f60208201905061117b5f830184611124565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6111b882610cf2565b91506111c383610cf2565b92508282019050808211156111db576111da611181565b5b9291505056fea2646970667358221220a0c2e81284bd89ec5f09ccc7a335b4e1503bcc9e05a88a2610d371352eb28e8b64736f6c63430008190033