60806040526312cc0300426200001691906200051c565b60055534801562000025575f80fd5b5060405162001bb838038062001bb883398181016040528101906200004b9190620005bb565b6040518060400160405280600a81526020017f4e6175676874436f696e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f30783000000000000000000000000000000000000000000000000000000000008152508160039081620000c891906200085b565b508060049081620000da91906200085b565b5050508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012d6200023060201b60201c565b60ff16600a6200013e919062000a8f565b620f42406200014e919062000adf565b6006819055506200018b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1663055d4a806200023860201b60201c565b6200019e81600a6200023860201b60201c565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000220919062000b3a565b60405180910390a3505062000bbc565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002ab575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002a2919062000b66565b60405180910390fd5b620002be5f8383620002c260201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000316578060025f8282546200030991906200051c565b92505081905550620003e7565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620003a2578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003999392919062000b81565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000430578060025f82825403925050819055506200047a565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620004d9919062000b3a565b60405180910390a3505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200052882620004e6565b91506200053583620004e6565b925082820190508082111562000550576200054f620004ef565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000585826200055a565b9050919050565b620005978162000579565b8114620005a2575f80fd5b50565b5f81519050620005b5816200058c565b92915050565b5f8060408385031215620005d457620005d362000556565b5b5f620005e385828601620005a5565b9250506020620005f685828601620005a5565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200067c57607f821691505b60208210810362000692576200069162000637565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620006f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006b9565b620007028683620006b9565b95508019841693508086168417925050509392505050565b5f819050919050565b5f620007436200073d6200073784620004e6565b6200071a565b620004e6565b9050919050565b5f819050919050565b6200075e8362000723565b620007766200076d826200074a565b848454620006c5565b825550505050565b5f90565b6200078c6200077e565b6200079981848462000753565b505050565b5b81811015620007c057620007b45f8262000782565b6001810190506200079f565b5050565b601f8211156200080f57620007d98162000698565b620007e484620006aa565b81016020851015620007f4578190505b6200080c6200080385620006aa565b8301826200079e565b50505b505050565b5f82821c905092915050565b5f620008315f198460080262000814565b1980831691505092915050565b5f6200084b838362000820565b9150826002028217905092915050565b620008668262000600565b67ffffffffffffffff8111156200088257620008816200060a565b5b6200088e825462000664565b6200089b828285620007c4565b5f60209050601f831160018114620008d1575f8415620008bc578287015190505b620008c885826200083e565b86555062000937565b601f198416620008e18662000698565b5f5b828110156200090a57848901518255600182019150602085019450602081019050620008e3565b868310156200092a578489015162000926601f89168262000820565b8355505b6001600288020188555050505b505050505050565b5f8160011c9050919050565b5f808291508390505b60018511156200099c57808604811115620009745762000973620004ef565b5b6001851615620009845780820291505b808102905062000994856200093f565b945062000954565b94509492505050565b5f82620009b6576001905062000a88565b81620009c5575f905062000a88565b8160018114620009de5760028114620009e95762000a1f565b600191505062000a88565b60ff841115620009fe57620009fd620004ef565b5b8360020a91508482111562000a185762000a17620004ef565b5b5062000a88565b5060208310610133831016604e8410600b841016171562000a595782820a90508381111562000a535762000a52620004ef565b5b62000a88565b62000a6884848460016200094b565b9250905081840481111562000a825762000a81620004ef565b5b81810290505b9392505050565b5f62000a9b82620004e6565b915062000aa883620004e6565b925062000ad77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009a5565b905092915050565b5f62000aeb82620004e6565b915062000af883620004e6565b925082820262000b0881620004e6565b9150828204841483151762000b225762000b21620004ef565b5b5092915050565b62000b3481620004e6565b82525050565b5f60208201905062000b4f5f83018462000b29565b92915050565b62000b608162000579565b82525050565b5f60208201905062000b7b5f83018462000b55565b92915050565b5f60608201905062000b965f83018662000b55565b62000ba5602083018562000b29565b62000bb4604083018462000b29565b949350505050565b610fee8062000bca5f395ff3fe608060405234801561000f575f80fd5b50600436106100e8575f3560e01c806348db5f891161008a578063a457c2d711610064578063a457c2d714610260578063a9059cbb14610290578063d085835a146102c0578063dd62ed3e146102de576100e8565b806348db5f89146101f457806370a082311461021257806395d89b4114610242576100e8565b806323b872dd116100c657806323b872dd146101585780632ff2e9dc14610188578063313ce567146101a657806339509351146101c4576100e8565b806306fdde03146100ec578063095ea7b31461010a57806318160ddd1461013a575b5f80fd5b6100f461030e565b6040516101019190610c67565b60405180910390f35b610124600480360381019061011f9190610d18565b61039e565b6040516101319190610d70565b60405180910390f35b6101426103c0565b60405161014f9190610d98565b60405180910390f35b610172600480360381019061016d9190610db1565b6103c9565b60405161017f9190610d70565b60405180910390f35b6101906103f7565b60405161019d9190610d98565b60405180910390f35b6101ae6103fd565b6040516101bb9190610e1c565b60405180910390f35b6101de60048036038101906101d99190610d18565b610405565b6040516101eb9190610d70565b60405180910390f35b6101fc61043b565b6040516102099190610e44565b60405180910390f35b61022c60048036038101906102279190610e5d565b610460565b6040516102399190610d98565b60405180910390f35b61024a6104a5565b6040516102579190610c67565b60405180910390f35b61027a60048036038101906102759190610d18565b610535565b6040516102879190610d70565b60405180910390f35b6102aa60048036038101906102a59190610d18565b6105b0565b6040516102b79190610d70565b60405180910390f35b6102c86105d2565b6040516102d59190610d98565b60405180910390f35b6102f860048036038101906102f39190610e88565b6105d8565b6040516103059190610d98565b60405180910390f35b60606003805461031d90610ef3565b80601f016020809104026020016040519081016040528092919081815260200182805461034990610ef3565b80156103945780601f1061036b57610100808354040283529160200191610394565b820191905f5260205f20905b81548152906001019060200180831161037757829003601f168201915b5050505050905090565b5f806103a861065a565b90506103b5818585610661565b600191505092915050565b5f600254905090565b5f806103d361065a565b90506103e0858285610673565b6103eb858585610705565b60019150509392505050565b60065481565b5f6012905090565b5f8061040f61065a565b905061043081858561042185896105d8565b61042b9190610f50565b610661565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6060600480546104b490610ef3565b80601f01602080910402602001604051908101604052809291908181526020018280546104e090610ef3565b801561052b5780601f106105025761010080835404028352916020019161052b565b820191905f5260205f20905b81548152906001019060200180831161050e57829003601f168201915b5050505050905090565b5f8061053f61065a565b90505f61054c82866105d8565b905083811015610597578481856040517fa60f030c00000000000000000000000000000000000000000000000000000000815260040161058e93929190610f83565b60405180910390fd5b6105a48286868403610661565b60019250505092915050565b5f806105ba61065a565b90506105c7818585610705565b600191505092915050565b60055481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61066e83838360016107f5565b505050565b5f61067e84846105d8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106ff57818110156106f0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106e793929190610f83565b60405180910390fd5b6106fe84848484035f6107f5565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610775575f6040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161076c9190610e44565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107e5575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107dc9190610e44565b60405180910390fd5b6107f08383836109c4565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610865575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161085c9190610e44565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108d5575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108cc9190610e44565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156109be578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109b59190610d98565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a14578060025f828254610a089190610f50565b92505081905550610ae2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610a9d578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a9493929190610f83565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b29578060025f8282540392505081905550610b73565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd09190610d98565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015610c14578082015181840152602081019050610bf9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f610c3982610bdd565b610c438185610be7565b9350610c53818560208601610bf7565b610c5c81610c1f565b840191505092915050565b5f6020820190508181035f830152610c7f8184610c2f565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610cb482610c8b565b9050919050565b610cc481610caa565b8114610cce575f80fd5b50565b5f81359050610cdf81610cbb565b92915050565b5f819050919050565b610cf781610ce5565b8114610d01575f80fd5b50565b5f81359050610d1281610cee565b92915050565b5f8060408385031215610d2e57610d2d610c87565b5b5f610d3b85828601610cd1565b9250506020610d4c85828601610d04565b9150509250929050565b5f8115159050919050565b610d6a81610d56565b82525050565b5f602082019050610d835f830184610d61565b92915050565b610d9281610ce5565b82525050565b5f602082019050610dab5f830184610d89565b92915050565b5f805f60608486031215610dc857610dc7610c87565b5b5f610dd586828701610cd1565b9350506020610de686828701610cd1565b9250506040610df786828701610d04565b9150509250925092565b5f60ff82169050919050565b610e1681610e01565b82525050565b5f602082019050610e2f5f830184610e0d565b92915050565b610e3e81610caa565b82525050565b5f602082019050610e575f830184610e35565b92915050565b5f60208284031215610e7257610e71610c87565b5b5f610e7f84828501610cd1565b91505092915050565b5f8060408385031215610e9e57610e9d610c87565b5b5f610eab85828601610cd1565b9250506020610ebc85828601610cd1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610f0a57607f821691505b602082108103610f1d57610f1c610ec6565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f5a82610ce5565b9150610f6583610ce5565b9250828201905080821115610f7d57610f7c610f23565b5b92915050565b5f606082019050610f965f830186610e35565b610fa36020830185610d89565b610fb06040830184610d89565b94935050505056fea26469706673582212204b2cb17fadce8d7a6abc6a32164fecf4258376dda5c14b471b901db2851e7a0164736f6c63430008150033000000000000000000000000e08108597b80b4cc363256c2f1e35f1cc3386d1c000000000000000000000000c7a2210b90f0e57e65f29ddb0281b4b87fcbac55