60806040526040518060400160405280601081526020017f43727970746f4d696e6572546f6b656e000000000000000000000000000000008152505f908161004791906103a6565b506040518060400160405280600381526020017f43544d00000000000000000000000000000000000000000000000000000000008152506001908161008c91906103a6565b50601260025f6101000a81548160ff021916908360ff16021790555069d3c21bcecceda10000006003553480156100c1575f80fd5b503360045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060035460055f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610475565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101e757607f821691505b6020821081036101fa576101f96101a3565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261025c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610221565b6102668683610221565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6102aa6102a56102a08461027e565b610287565b61027e565b9050919050565b5f819050919050565b6102c383610290565b6102d76102cf826102b1565b84845461022d565b825550505050565b5f90565b6102eb6102df565b6102f68184846102ba565b505050565b5b818110156103195761030e5f826102e3565b6001810190506102fc565b5050565b601f82111561035e5761032f81610200565b61033884610212565b81016020851015610347578190505b61035b61035385610212565b8301826102fb565b50505b505050565b5f82821c905092915050565b5f61037e5f1984600802610363565b1980831691505092915050565b5f610396838361036f565b9150826002028217905092915050565b6103af8261016c565b67ffffffffffffffff8111156103c8576103c7610176565b5b6103d282546101d0565b6103dd82828561031d565b5f60209050601f83116001811461040e575f84156103fc578287015190505b610406858261038b565b86555061046d565b601f19841661041c86610200565b5f5b828110156104435784890151825560018201915060208501945060208101905061041e565b86831015610460578489015161045c601f89168261036f565b8355505b6001600288020188555050505b505050505050565b6117a9806104825f395ff3fe608060405234801561000f575f80fd5b50600436106100fe575f3560e01c80636c827edc11610095578063a9059cbb11610064578063a9059cbb1461029f578063b0a8d5ca146102cf578063dd62ed3e146102d9578063f8b2cb4f14610309576100fe565b80636c827edc1461021557806370a08231146102335780638da5cb5b1461026357806395d89b4114610281576100fe565b806323b872dd116100d157806323b872dd14610178578063313ce567146101a857806332590c5c146101c6578063648ec7b9146101e4576100fe565b806306fdde0314610102578063095ea7b31461012057806318160ddd1461015057806321b79d981461016e575b5f80fd5b61010a610339565b60405161011791906110ff565b60405180910390f35b61013a600480360381019061013591906111b0565b6103c4565b6040516101479190611208565b60405180910390f35b6101586104b1565b6040516101659190611230565b60405180910390f35b6101766104b7565b005b610192600480360381019061018d9190611249565b610769565b60405161019f9190611208565b60405180910390f35b6101b0610a49565b6040516101bd91906112b4565b60405180910390f35b6101ce610a5b565b6040516101db9190611230565b60405180910390f35b6101fe60048036038101906101f991906112cd565b610a61565b60405161020c9291906112f8565b60405180910390f35b61021d610a8d565b60405161022a9190611230565b60405180910390f35b61024d600480360381019061024891906112cd565b610a9a565b60405161025a9190611230565b60405180910390f35b61026b610aaf565b604051610278919061132e565b60405180910390f35b610289610ad4565b60405161029691906110ff565b60405180910390f35b6102b960048036038101906102b491906111b0565b610b60565b6040516102c69190611208565b60405180910390f35b6102d7610cf6565b005b6102f360048036038101906102ee9190611347565b611029565b6040516103009190611230565b60405180910390f35b610323600480360381019061031e91906112cd565b611049565b6040516103309190611230565b60405180910390f35b5f8054610345906113b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610371906113b2565b80156103bc5780601f10610393576101008083540402835291602001916103bc565b820191905f5260205f20905b81548152906001019060200180831161039f57829003601f168201915b505050505081565b5f8160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161049f9190611230565b60405180910390a36001905092915050565b60035481565b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f9054906101000a900460ff1615610544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053b9061142c565b60405180910390fd5b61546060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546105919190611477565b4210156105d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ca9061151a565b60405180910390fd5b68056bc75e2d6310000060055f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054101561067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067490611582565b60405180910390fd5b4260075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0181905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff167f371d1d217e089d8abb6eb4453f63564ad157fa1e149bfc4f8348d4496d82406a4260405161075f9190611230565b60405180910390a2565b5f8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156107ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e1906115ea565b60405180910390fd5b8160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410156108a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089c90611652565b60405180910390fd5b8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108f19190611670565b925050819055508160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109449190611477565b925050819055508160065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546109d29190611670565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a369190611230565b60405180910390a3600190509392505050565b60025f9054906101000a900460ff1681565b61546081565b6007602052805f5260405f205f91509050805f015490806001015f9054906101000a900460ff16905082565b68056bc75e2d6310000081565b6005602052805f5260405f205f915090505481565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60018054610ae1906113b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0d906113b2565b8015610b585780601f10610b2f57610100808354040283529160200191610b58565b820191905f5260205f20905b815481529060010190602001808311610b3b57829003601f168201915b505050505081565b5f8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541015610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd8906115ea565b60405180910390fd5b8160055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c2d9190611670565b925050819055508160055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610c809190611477565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ce49190611230565b60405180910390a36001905092915050565b60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f9054906101000a900460ff16610d82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d79906116ed565b60405180910390fd5b61546060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154610dcf9190611477565b421015610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0890611755565b60405180910390fd5b68056bc75e2d6310000060055f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610e879190611670565b9250508190555068056bc75e2d6310000060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ee39190611477565b925050819055505f60075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef68056bc75e2d63100000604051610fc89190611230565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167ff5fe99eae6f3a43a5b7caedc1c3738701929b94183f3caba206f95c2bf43b8ab68056bc75e2d6310000060405161101f9190611230565b60405180910390a2565b6006602052815f5260405f20602052805f5260405f205f91509150505481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110d18261108f565b6110db8185611099565b93506110eb8185602086016110a9565b6110f4816110b7565b840191505092915050565b5f6020820190508181035f83015261111781846110c7565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61114c82611123565b9050919050565b61115c81611142565b8114611166575f80fd5b50565b5f8135905061117781611153565b92915050565b5f819050919050565b61118f8161117d565b8114611199575f80fd5b50565b5f813590506111aa81611186565b92915050565b5f80604083850312156111c6576111c561111f565b5b5f6111d385828601611169565b92505060206111e48582860161119c565b9150509250929050565b5f8115159050919050565b611202816111ee565b82525050565b5f60208201905061121b5f8301846111f9565b92915050565b61122a8161117d565b82525050565b5f6020820190506112435f830184611221565b92915050565b5f805f606084860312156112605761125f61111f565b5b5f61126d86828701611169565b935050602061127e86828701611169565b925050604061128f8682870161119c565b9150509250925092565b5f60ff82169050919050565b6112ae81611299565b82525050565b5f6020820190506112c75f8301846112a5565b92915050565b5f602082840312156112e2576112e161111f565b5b5f6112ef84828501611169565b91505092915050565b5f60408201905061130b5f830185611221565b61131860208301846111f9565b9392505050565b61132881611142565b82525050565b5f6020820190506113415f83018461131f565b92915050565b5f806040838503121561135d5761135c61111f565b5b5f61136a85828601611169565b925050602061137b85828601611169565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806113c957607f821691505b6020821081036113dc576113db611385565b5b50919050565b7f596f752063616e206f6e6c79206d696e65206f6e6365000000000000000000005f82015250565b5f611416601683611099565b9150611421826113e2565b602082019050919050565b5f6020820190508181035f8301526114438161140a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114818261117d565b915061148c8361117d565b92508282019050808211156114a4576114a361144a565b5b92915050565b7f596f75206e65656420746f2077616974206265666f7265206d696e696e6720615f8201527f6761696e00000000000000000000000000000000000000000000000000000000602082015250565b5f611504602483611099565b915061150f826114aa565b604082019050919050565b5f6020820190508181035f830152611531816114f8565b9050919050565b7f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6500000000005f82015250565b5f61156c601b83611099565b915061157782611538565b602082019050919050565b5f6020820190508181035f83015261159981611560565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f6115d4601483611099565b91506115df826115a0565b602082019050919050565b5f6020820190508181035f830152611601816115c8565b9050919050565b7f416c6c6f77616e636520657863656564656400000000000000000000000000005f82015250565b5f61163c601283611099565b915061164782611608565b602082019050919050565b5f6020820190508181035f83015261166981611630565b9050919050565b5f61167a8261117d565b91506116858361117d565b925082820390508181111561169d5761169c61144a565b5b92915050565b7f596f75206d757374207374617274206d696e696e6720666972737400000000005f82015250565b5f6116d7601b83611099565b91506116e2826116a3565b602082019050919050565b5f6020820190508181035f830152611704816116cb565b9050919050565b7f4d696e696e672074696d65206e6f7420636f6d706c65746564207965740000005f82015250565b5f61173f601d83611099565b915061174a8261170b565b602082019050919050565b5f6020820190508181035f83015261176c81611733565b905091905056fea26469706673582212206233d525df75b9639047aec705fd5dd94fc9f3a71bd3a02a3a6208c98c6d0a3364736f6c634300081a0033