0x60806040523480156200001157600080fd5b5060405162001e2738038062001e2783398181016040528101906200003791906200058e565b806040518060400160405280600a81526020017f53436172656420446f67000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53434400000000000000000000000000000000000000000000000000000000008152508160039081620000b591906200083a565b508060049081620000c791906200083a565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200013f5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000136919062000932565b60405180910390fd5b62000150816200019860201b60201c565b506200019130620001666200025e60201b60201c565b600a62000174919062000adf565b6305f5e10062000185919062000b30565b6200026760201b60201c565b5062000c21565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002dc5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002d3919062000932565b60405180910390fd5b620002f060008383620002f460201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200034a5780600260008282546200033d919062000b7b565b9250508190555062000420565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015620003d9578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620003d09392919062000bc7565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200046b5780600260008282540392505081905550620004b8565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000517919062000c04565b60405180910390a3505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005568262000529565b9050919050565b620005688162000549565b81146200057457600080fd5b50565b60008151905062000588816200055d565b92915050565b600060208284031215620005a757620005a662000524565b5b6000620005b78482850162000577565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200064257607f821691505b602082108103620006585762000657620005fa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006c27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000683565b620006ce868362000683565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200071b620007156200070f84620006e6565b620006f0565b620006e6565b9050919050565b6000819050919050565b6200073783620006fa565b6200074f620007468262000722565b84845462000690565b825550505050565b600090565b6200076662000757565b620007738184846200072c565b505050565b5b818110156200079b576200078f6000826200075c565b60018101905062000779565b5050565b601f821115620007ea57620007b4816200065e565b620007bf8462000673565b81016020851015620007cf578190505b620007e7620007de8562000673565b83018262000778565b50505b505050565b600082821c905092915050565b60006200080f60001984600802620007ef565b1980831691505092915050565b60006200082a8383620007fc565b9150826002028217905092915050565b6200084582620005c0565b67ffffffffffffffff811115620008615762000860620005cb565b5b6200086d825462000629565b6200087a8282856200079f565b600060209050601f831160018114620008b257600084156200089d578287015190505b620008a985826200081c565b86555062000919565b601f198416620008c2866200065e565b60005b82811015620008ec57848901518255600182019150602085019450602081019050620008c5565b868310156200090c578489015162000908601f891682620007fc565b8355505b6001600288020188555050505b505050505050565b6200092c8162000549565b82525050565b600060208201905062000949600083018462000921565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009dd57808604811115620009b557620009b46200094f565b5b6001851615620009c55780820291505b8081029050620009d5856200097e565b945062000995565b94509492505050565b600082620009f8576001905062000acb565b8162000a08576000905062000acb565b816001811462000a21576002811462000a2c5762000a62565b600191505062000acb565b60ff84111562000a415762000a406200094f565b5b8360020a91508482111562000a5b5762000a5a6200094f565b5b5062000acb565b5060208310610133831016604e8410600b841016171562000a9c5782820a90508381111562000a965762000a956200094f565b5b62000acb565b62000aab84848460016200098b565b9250905081840481111562000ac55762000ac46200094f565b5b81810290505b9392505050565b600060ff82169050919050565b600062000aec82620006e6565b915062000af98362000ad2565b925062000b287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009e6565b905092915050565b600062000b3d82620006e6565b915062000b4a83620006e6565b925082820262000b5a81620006e6565b9150828204841483151762000b745762000b736200094f565b5b5092915050565b600062000b8882620006e6565b915062000b9583620006e6565b925082820190508082111562000bb05762000baf6200094f565b5b92915050565b62000bc181620006e6565b82525050565b600060608201905062000bde600083018662000921565b62000bed602083018562000bb6565b62000bfc604083018462000bb6565b949350505050565b600060208201905062000c1b600083018462000bb6565b92915050565b6111f68062000c316000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c578063a9059cbb11610066578063a9059cbb14610204578063bec3fa1714610234578063dd62ed3e14610250578063f2fde38b14610280576100cf565b8063715018a6146101be5780638da5cb5b146101c857806395d89b41146101e6576100cf565b806306fdde03146100d4578063095ea7b3146100f257806318160ddd1461012257806323b872dd14610140578063313ce5671461017057806370a082311461018e575b600080fd5b6100dc61029c565b6040516100e99190610db8565b60405180910390f35b61010c60048036038101906101079190610e73565b61032e565b6040516101199190610ece565b60405180910390f35b61012a610351565b6040516101379190610ef8565b60405180910390f35b61015a60048036038101906101559190610f13565b61035b565b6040516101679190610ece565b60405180910390f35b61017861038a565b6040516101859190610f82565b60405180910390f35b6101a860048036038101906101a39190610f9d565b610393565b6040516101b59190610ef8565b60405180910390f35b6101c66103db565b005b6101d06103ef565b6040516101dd9190610fd9565b60405180910390f35b6101ee610419565b6040516101fb9190610db8565b60405180910390f35b61021e60048036038101906102199190610e73565b6104ab565b60405161022b9190610ece565b60405180910390f35b61024e60048036038101906102499190610e73565b6104ce565b005b61026a60048036038101906102659190610ff4565b610530565b6040516102779190610ef8565b60405180910390f35b61029a60048036038101906102959190610f9d565b6105b7565b005b6060600380546102ab90611063565b80601f01602080910402602001604051908101604052809291908181526020018280546102d790611063565b80156103245780601f106102f957610100808354040283529160200191610324565b820191906000526020600020905b81548152906001019060200180831161030757829003601f168201915b5050505050905090565b60008061033961063d565b9050610346818585610645565b600191505092915050565b6000600254905090565b60008061036661063d565b9050610373858285610657565b61037e8585856106eb565b60019150509392505050565b60006012905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6103e36107df565b6103ed6000610866565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461042890611063565b80601f016020809104026020016040519081016040528092919081815260200182805461045490611063565b80156104a15780601f10610476576101008083540402835291602001916104a1565b820191906000526020600020905b81548152906001019060200180831161048457829003601f168201915b5050505050905090565b6000806104b661063d565b90506104c38185856106eb565b600191505092915050565b6104d66107df565b806104e030610393565b1015610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051890611106565b60405180910390fd5b61052c3083836106eb565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6105bf6107df565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106315760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016106289190610fd9565b60405180910390fd5b61063a81610866565b50565b600033905090565b610652838383600161092c565b505050565b60006106638484610530565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106e557818110156106d5578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106cc93929190611126565b60405180910390fd5b6106e48484848403600061092c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361075d5760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107549190610fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107cf5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107c69190610fd9565b60405180910390fd5b6107da838383610b03565b505050565b6107e761063d565b73ffffffffffffffffffffffffffffffffffffffff166108056103ef565b73ffffffffffffffffffffffffffffffffffffffff16146108645761082861063d565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161085b9190610fd9565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361099e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109959190610fd9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a105760006040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a079190610fd9565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015610afd578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610af49190610ef8565b60405180910390a35b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b55578060026000828254610b49919061118c565b92505081905550610c28565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610be1578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610bd893929190611126565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c715780600260008282540392505081905550610cbe565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d1b9190610ef8565b60405180910390a3505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610d62578082015181840152602081019050610d47565b60008484015250505050565b6000601f19601f8301169050919050565b6000610d8a82610d28565b610d948185610d33565b9350610da4818560208601610d44565b610dad81610d6e565b840191505092915050565b60006020820190508181036000830152610dd28184610d7f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610e0a82610ddf565b9050919050565b610e1a81610dff565b8114610e2557600080fd5b50565b600081359050610e3781610e11565b92915050565b6000819050919050565b610e5081610e3d565b8114610e5b57600080fd5b50565b600081359050610e6d81610e47565b92915050565b60008060408385031215610e8a57610e89610dda565b5b6000610e9885828601610e28565b9250506020610ea985828601610e5e565b9150509250929050565b60008115159050919050565b610ec881610eb3565b82525050565b6000602082019050610ee36000830184610ebf565b92915050565b610ef281610e3d565b82525050565b6000602082019050610f0d6000830184610ee9565b92915050565b600080600060608486031215610f2c57610f2b610dda565b5b6000610f3a86828701610e28565b9350506020610f4b86828701610e28565b9250506040610f5c86828701610e5e565b9150509250925092565b600060ff82169050919050565b610f7c81610f66565b82525050565b6000602082019050610f976000830184610f73565b92915050565b600060208284031215610fb357610fb2610dda565b5b6000610fc184828501610e28565b91505092915050565b610fd381610dff565b82525050565b6000602082019050610fee6000830184610fca565b92915050565b6000806040838503121561100b5761100a610dda565b5b600061101985828601610e28565b925050602061102a85828601610e28565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061107b57607f821691505b60208210810361108e5761108d611034565b5b50919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b60006110f0602183610d33565b91506110fb82611094565b604082019050919050565b6000602082019050818103600083015261111f816110e3565b9050919050565b600060608201905061113b6000830186610fca565b6111486020830185610ee9565b6111556040830184610ee9565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061119782610e3d565b91506111a283610e3d565b92508282019050808211156111ba576111b961115d565b5b9291505056fea2646970667358221220cc9b6fa2d95832f5be2de5eebe2691739a23cea3dab62941062f03d83128bb0064736f6c63430008140033000000000000000000000000061cfc607c26f2da24423f0d97497ccf2465b8cb