60806040526040518060400160405280600b81526020017f426173656420486f7070790000000000000000000000000000000000000000008152505f90816100479190610456565b506040518060400160405280600581526020017f484f5050590000000000000000000000000000000000000000000000000000008152506001908161008c9190610456565b50601260025f6101000a81548160ff021916908360ff1602179055505f6006553480156100b7575f80fd5b503360045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060025f9054906101000a900460ff1660ff16600a6101569190610681565b64e8d4a5100061016691906106cb565b60038190555060035460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60035460405161020f919061071b565b60405180910390a3610734565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061029757607f821691505b6020821081036102aa576102a9610253565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261030c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102d1565b61031686836102d1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61035a6103556103508461032e565b610337565b61032e565b9050919050565b5f819050919050565b61037383610340565b61038761037f82610361565b8484546102dd565b825550505050565b5f90565b61039b61038f565b6103a681848461036a565b505050565b5b818110156103c9576103be5f82610393565b6001810190506103ac565b5050565b601f82111561040e576103df816102b0565b6103e8846102c2565b810160208510156103f7578190505b61040b610403856102c2565b8301826103ab565b50505b505050565b5f82821c905092915050565b5f61042e5f1984600802610413565b1980831691505092915050565b5f610446838361041f565b9150826002028217905092915050565b61045f8261021c565b67ffffffffffffffff81111561047857610477610226565b5b6104828254610280565b61048d8282856103cd565b5f60209050601f8311600181146104be575f84156104ac578287015190505b6104b6858261043b565b86555061051d565b601f1984166104cc866102b0565b5f5b828110156104f3578489015182556001820191506020850194506020810190506104ce565b86831015610510578489015161050c601f89168261041f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156105a75780860481111561058357610582610525565b5b60018516156105925780820291505b80810290506105a085610552565b9450610567565b94509492505050565b5f826105bf576001905061067a565b816105cc575f905061067a565b81600181146105e257600281146105ec5761061b565b600191505061067a565b60ff8411156105fe576105fd610525565b5b8360020a91508482111561061557610614610525565b5b5061067a565b5060208310610133831016604e8410600b84101617156106505782820a90508381111561064b5761064a610525565b5b61067a565b61065d848484600161055e565b9250905081840481111561067457610673610525565b5b81810290505b9392505050565b5f61068b8261032e565b91506106968361032e565b92506106c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846105b0565b905092915050565b5f6106d58261032e565b91506106e08361032e565b92508282026106ee8161032e565b9150828204841483151761070557610704610525565b5b5092915050565b6107158161032e565b82525050565b5f60208201905061072e5f83018461070c565b92915050565b61189f806107415f395ff3fe6080604052600436106100f6575f3560e01c80638d1400b411610089578063c179c58011610058578063c179c5801461032b578063dd62ed3e14610355578063ea414b2814610391578063f2fde38b146103b9576100fd565b80638d1400b4146102735780638da5cb5b1461029b57806395d89b41146102c5578063a9059cbb146102ef576100fd565b80632dc0562d116100c55780632dc0562d146101cd578063313ce567146101f757806370a0823114610221578063715018a61461025d576100fd565b806306fdde0314610101578063095ea7b31461012b57806318160ddd1461016757806323b872dd14610191576100fd565b366100fd57005b5f80fd5b34801561010c575f80fd5b506101156103e1565b6040516101229190611106565b60405180910390f35b348015610136575f80fd5b50610151600480360381019061014c91906111b7565b61046c565b60405161015e919061120f565b60405180910390f35b348015610172575f80fd5b5061017b610559565b6040516101889190611237565b60405180910390f35b34801561019c575f80fd5b506101b760048036038101906101b29190611250565b61055f565b6040516101c4919061120f565b60405180910390f35b3480156101d8575f80fd5b506101e1610722565b6040516101ee91906112af565b60405180910390f35b348015610202575f80fd5b5061020b610747565b60405161021891906112e3565b60405180910390f35b34801561022c575f80fd5b50610247600480360381019061024291906112fc565b610759565b6040516102549190611237565b60405180910390f35b348015610268575f80fd5b5061027161076e565b005b34801561027e575f80fd5b5061029960048036038101906102949190611327565b6108ba565b005b3480156102a6575f80fd5b506102af6109d2565b6040516102bc91906112af565b60405180910390f35b3480156102d0575f80fd5b506102d96109f7565b6040516102e69190611106565b60405180910390f35b3480156102fa575f80fd5b50610315600480360381019061031091906111b7565b610a83565b604051610322919061120f565b60405180910390f35b348015610336575f80fd5b5061033f610afc565b60405161034c9190611237565b60405180910390f35b348015610360575f80fd5b5061037b60048036038101906103769190611352565b610b02565b6040516103889190611237565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b291906112fc565b610b22565b005b3480156103c4575f80fd5b506103df60048036038101906103da91906112fc565b610cdd565b005b5f80546103ed906113bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610419906113bd565b80156104645780601f1061043b57610100808354040283529160200191610464565b820191905f5260205f20905b81548152906001019060200180831161044757829003601f168201915b505050505081565b5f8160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105479190611237565b60405180910390a36001905092915050565b60035481565b5f8160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290611437565b60405180910390fd5b8160085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106a29190611482565b925050819055505f6064600654846106ba91906114b5565b6106c49190611523565b90505f81846106d39190611482565b90506106e0868683610e98565b5f821115610715576107148660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610e98565b5b6001925050509392505050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025f9054906101000a900460ff1681565b6007602052805f5260405f205f915090505481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f49061159d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610949576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109409061159d565b60405180910390fd5b606481111561098d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109849061162b565b60405180910390fd5b7fbabfa196f81e665bb47e8e09fb418e285407eb1e7fc79ed43adf2a56f53203fd600654826040516109c0929190611649565b60405180910390a18060068190555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054610a04906113bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610a30906113bd565b8015610a7b5780601f10610a5257610100808354040283529160200191610a7b565b820191905f5260205f20905b815481529060010190602001808311610a5e57829003601f168201915b505050505081565b5f80606460065484610a9591906114b5565b610a9f9190611523565b90505f8184610aae9190611482565b9050610abb338683610e98565b5f821115610af057610aef3360055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610e98565b5b60019250505092915050565b60065481565b6008602052815f5260405f20602052805f5260405f205f91509150505481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba89061159d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c16906116e0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f849a2ad8ad386f1e9897e9e0a62d16771c675e4740986a16fb31bd8e1dde9c9760405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d639061159d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190611748565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd906117b0565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90611818565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610fd29190611482565b925050819055508060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546110259190611836565b925050819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516110899190611237565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110d882611096565b6110e281856110a0565b93506110f28185602086016110b0565b6110fb816110be565b840191505092915050565b5f6020820190508181035f83015261111e81846110ce565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6111538261112a565b9050919050565b61116381611149565b811461116d575f80fd5b50565b5f8135905061117e8161115a565b92915050565b5f819050919050565b61119681611184565b81146111a0575f80fd5b50565b5f813590506111b18161118d565b92915050565b5f80604083850312156111cd576111cc611126565b5b5f6111da85828601611170565b92505060206111eb858286016111a3565b9150509250929050565b5f8115159050919050565b611209816111f5565b82525050565b5f6020820190506112225f830184611200565b92915050565b61123181611184565b82525050565b5f60208201905061124a5f830184611228565b92915050565b5f805f6060848603121561126757611266611126565b5b5f61127486828701611170565b935050602061128586828701611170565b9250506040611296868287016111a3565b9150509250925092565b6112a981611149565b82525050565b5f6020820190506112c25f8301846112a0565b92915050565b5f60ff82169050919050565b6112dd816112c8565b82525050565b5f6020820190506112f65f8301846112d4565b92915050565b5f6020828403121561131157611310611126565b5b5f61131e84828501611170565b91505092915050565b5f6020828403121561133c5761133b611126565b5b5f611349848285016111a3565b91505092915050565b5f806040838503121561136857611367611126565b5b5f61137585828601611170565b925050602061138685828601611170565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806113d457607f821691505b6020821081036113e7576113e6611390565b5b50919050565b7f416c6c6f77616e636520746f6f206c6f770000000000000000000000000000005f82015250565b5f6114216011836110a0565b915061142c826113ed565b602082019050919050565b5f6020820190508181035f83015261144e81611415565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61148c82611184565b915061149783611184565b92508282039050818111156114af576114ae611455565b5b92915050565b5f6114bf82611184565b91506114ca83611184565b92508282026114d881611184565b915082820484148315176114ef576114ee611455565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61152d82611184565b915061153883611184565b925082611548576115476114f6565b5b828204905092915050565b7f43616c6c6572206973206e6f7420746865206f776e65720000000000000000005f82015250565b5f6115876017836110a0565b915061159282611553565b602082019050919050565b5f6020820190508181035f8301526115b48161157b565b9050919050565b7f5472616e73616374696f6e207461782063616e6e6f74206578636565642031305f8201527f3025000000000000000000000000000000000000000000000000000000000000602082015250565b5f6116156022836110a0565b9150611620826115bb565b604082019050919050565b5f6020820190508181035f83015261164281611609565b9050919050565b5f60408201905061165c5f830185611228565b6116696020830184611228565b9392505050565b7f4e6577207461782077616c6c657420697320746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6116ca6022836110a0565b91506116d582611670565b604082019050919050565b5f6020820190508181035f8301526116f7816116be565b9050919050565b7f4e6577206f776e657220697320746865207a65726f20616464726573730000005f82015250565b5f611732601d836110a0565b915061173d826116fe565b602082019050919050565b5f6020820190508181035f83015261175f81611726565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373000000005f82015250565b5f61179a601c836110a0565b91506117a582611766565b602082019050919050565b5f6020820190508181035f8301526117c78161178e565b9050919050565b7f42616c616e636520746f6f206c6f7700000000000000000000000000000000005f82015250565b5f611802600f836110a0565b915061180d826117ce565b602082019050919050565b5f6020820190508181035f83015261182f816117f6565b9050919050565b5f61184082611184565b915061184b83611184565b925082820190508082111561186357611862611455565b5b9291505056fea2646970667358221220113d59f45e615a1f3d0b460a878444bf4bc48d37204f65c4347a5ba4ebf717fe64736f6c634300081a0033