0x60806040523480156200001157600080fd5b50604051620018dd380380620018dd83398181016040528101906200003791906200032f565b6040518060400160405280600681526020017f56697267696c00000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5656440000000000000000000000000000000000000000000000000000000000815250750d5d238a4abe9806872a4904598d6d880000000000008260049081620000cb9190620005db565b508160059081620000dd9190620005db565b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200013181336200013b60201b60201c565b50505050620007dd565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620001ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001c59062000723565b60405180910390fd5b620001e260008284620002c060201b60201c565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000233919062000774565b92505081905550816000808282546200024d919062000774565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620002b49190620007c0565b60405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002f782620002ca565b9050919050565b6200030981620002ea565b81146200031557600080fd5b50565b6000815190506200032981620002fe565b92915050565b600060208284031215620003485762000347620002c5565b5b6000620003588482850162000318565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003e357607f821691505b602082108103620003f957620003f86200039b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000424565b6200046f868362000424565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004bc620004b6620004b08462000487565b62000491565b62000487565b9050919050565b6000819050919050565b620004d8836200049b565b620004f0620004e782620004c3565b84845462000431565b825550505050565b600090565b62000507620004f8565b62000514818484620004cd565b505050565b5b818110156200053c5762000530600082620004fd565b6001810190506200051a565b5050565b601f8211156200058b576200055581620003ff565b620005608462000414565b8101602085101562000570578190505b620005886200057f8562000414565b83018262000519565b50505b505050565b600082821c905092915050565b6000620005b06000198460080262000590565b1980831691505092915050565b6000620005cb83836200059d565b9150826002028217905092915050565b620005e68262000361565b67ffffffffffffffff8111156200060257620006016200036c565b5b6200060e8254620003ca565b6200061b82828562000540565b600060209050601f8311600181146200065357600084156200063e578287015190505b6200064a8582620005bd565b865550620006ba565b601f1984166200066386620003ff565b60005b828110156200068d5784890151825560018201915060208501945060208101905062000666565b86831015620006ad5784890151620006a9601f8916826200059d565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f6e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b60006200070b600d83620006c2565b91506200071882620006d3565b602082019050919050565b600060208201905081810360008301526200073e81620006fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007818262000487565b91506200078e8362000487565b9250828201905080821115620007a957620007a862000745565b5b92915050565b620007ba8162000487565b82525050565b6000602082019050620007d76000830184620007af565b92915050565b6110f080620007ed6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806370a082311161007157806370a082311461014057806394bf804d1461017057806395d89b411461018c5780639dc29fac146101aa578063a9059cbb146101c6578063dd62ed3e146101e2576100a9565b806306fdde03146100ae578063095ea7b3146100cc57806318160ddd146100e857806323b872dd14610106578063313ce56714610122575b600080fd5b6100b6610212565b6040516100c39190610c5a565b60405180910390f35b6100e660048036038101906100e19190610d15565b6102a4565b005b6100f06102b3565b6040516100fd9190610d64565b60405180910390f35b610120600480360381019061011b9190610d7f565b6102bc565b005b61012a61057e565b6040516101379190610d64565b60405180910390f35b61015a60048036038101906101559190610dd2565b610587565b6040516101679190610d64565b60405180910390f35b61018a60048036038101906101859190610dff565b6105d0565b005b610194610744565b6040516101a19190610c5a565b60405180910390f35b6101c460048036038101906101bf9190610d15565b6107d6565b005b6101e060048036038101906101db9190610d15565b6108e4565b005b6101fc60048036038101906101f79190610e3f565b610a53565b6040516102099190610d64565b60405180910390f35b60606004805461022190610eae565b80601f016020809104026020016040519081016040528092919081815260200182805461024d90610eae565b801561029a5780601f1061026f5761010080835404028352916020019161029a565b820191906000526020600020905b81548152906001019060200180831161027d57829003601f168201915b5050505050905090565b6102af338383610ada565b5050565b60008054905090565b8281806102c883610587565b1015610309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030090610f2b565b60405180910390fd5b610314858585610bc5565b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156103d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ca90610f97565b60405180910390fd5b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461045f9190610fe6565b9250508190555082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104b59190610fe6565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461050b919061101a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161056f9190610d64565b60405180910390a35050505050565b60006012905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106579061109a565b60405180910390fd5b61066c60008284610bc5565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106bb919061101a565b92505081905550816000808282546106d3919061101a565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516107389190610d64565b60405180910390a35050565b60606005805461075390610eae565b80601f016020809104026020016040519081016040528092919081815260200182805461077f90610eae565b80156107cc5780601f106107a1576101008083540402835291602001916107cc565b820191906000526020600020905b8154815290600101906020018083116107af57829003601f168201915b5050505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085d9061109a565b60405180910390fd5b61087282600083610bc5565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108c19190610fe6565b92505081905550806000808282546108d99190610fe6565b925050819055505050565b3381806108f083610587565b1015610931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092890610f2b565b60405180910390fd5b61093c338585610bc5565b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461098b9190610fe6565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109e1919061101a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a459190610d64565b60405180910390a350505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6e11fb1b7f119e3f2fa29896ef5fdf8b8a2d0d4df6fe90ba8668e7d8b2ffa25e83604051610bb89190610d64565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c04578082015181840152602081019050610be9565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c2c82610bca565b610c368185610bd5565b9350610c46818560208601610be6565b610c4f81610c10565b840191505092915050565b60006020820190508181036000830152610c748184610c21565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610cac82610c81565b9050919050565b610cbc81610ca1565b8114610cc757600080fd5b50565b600081359050610cd981610cb3565b92915050565b6000819050919050565b610cf281610cdf565b8114610cfd57600080fd5b50565b600081359050610d0f81610ce9565b92915050565b60008060408385031215610d2c57610d2b610c7c565b5b6000610d3a85828601610cca565b9250506020610d4b85828601610d00565b9150509250929050565b610d5e81610cdf565b82525050565b6000602082019050610d796000830184610d55565b92915050565b600080600060608486031215610d9857610d97610c7c565b5b6000610da686828701610cca565b9350506020610db786828701610cca565b9250506040610dc886828701610d00565b9150509250925092565b600060208284031215610de857610de7610c7c565b5b6000610df684828501610cca565b91505092915050565b60008060408385031215610e1657610e15610c7c565b5b6000610e2485828601610d00565b9250506020610e3585828601610cca565b9150509250929050565b60008060408385031215610e5657610e55610c7c565b5b6000610e6485828601610cca565b9250506020610e7585828601610cca565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610ec657607f821691505b602082108103610ed957610ed8610e7f565b5b50919050565b7f6e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b6000610f15601283610bd5565b9150610f2082610edf565b602082019050919050565b60006020820190508181036000830152610f4481610f08565b9050919050565b7f636865636b20616c6c6f77616e63652100000000000000000000000000000000600082015250565b6000610f81601083610bd5565b9150610f8c82610f4b565b602082019050919050565b60006020820190508181036000830152610fb081610f74565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610ff182610cdf565b9150610ffc83610cdf565b925082820390508181111561101457611013610fb7565b5b92915050565b600061102582610cdf565b915061103083610cdf565b925082820190508082111561104857611047610fb7565b5b92915050565b7f6e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b6000611084600d83610bd5565b915061108f8261104e565b602082019050919050565b600060208201905081810360008301526110b381611077565b905091905056fea26469706673582212209b543034ef4802702f6a4f507f6d122c46cafaa13246d55b4e7670f8412fa68464736f6c63430008120033000000000000000000000000cb5f0d5761b60388657b1a059133db381b7137c8