60806040526040518060400160405280600881526020017f47616c20436f696e0000000000000000000000000000000000000000000000008152506001908161004891906103a4565b506040518060400160405280600381526020017f47414c00000000000000000000000000000000000000000000000000000000008152506002908161008d91906103a4565b5060126003557e32f02d891e4e467e4648483402f55d825aea328e971a0000000000000000006004553480156100c1575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060045460055f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610473565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806101e557607f821691505b6020821081036101f8576101f76101a1565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261025a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261021f565b610264868361021f565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6102a86102a361029e8461027c565b610285565b61027c565b9050919050565b5f819050919050565b6102c18361028e565b6102d56102cd826102af565b84845461022b565b825550505050565b5f90565b6102e96102dd565b6102f48184846102b8565b505050565b5b818110156103175761030c5f826102e1565b6001810190506102fa565b5050565b601f82111561035c5761032d816101fe565b61033684610210565b81016020851015610345578190505b61035961035185610210565b8301826102f9565b50505b505050565b5f82821c905092915050565b5f61037c5f1984600802610361565b1980831691505092915050565b5f610394838361036d565b9150826002028217905092915050565b6103ad8261016a565b67ffffffffffffffff8111156103c6576103c5610174565b5b6103d082546101ce565b6103db82828561031b565b5f60209050601f83116001811461040c575f84156103fa578287015190505b6104048582610389565b86555061046b565b601f19841661041a866101fe565b5f5b828110156104415784890151825560018201915060208501945060208101905061041c565b8683101561045e578489015161045a601f89168261036d565b8355505b6001600288020188555050505b505050505050565b6108c5806104805f395ff3fe608060405234801561000f575f80fd5b506004361061007b575f3560e01c806370a082311161005957806370a08231146100d95780638da5cb5b1461010957806395d89b4114610127578063a9059cbb146101455761007b565b806306fdde031461007f57806318160ddd1461009d578063313ce567146100bb575b5f80fd5b610087610175565b60405161009491906105d5565b60405180910390f35b6100a5610201565b6040516100b2919061060d565b60405180910390f35b6100c3610207565b6040516100d0919061060d565b60405180910390f35b6100f360048036038101906100ee9190610684565b61020d565b604051610100919061060d565b60405180910390f35b610111610253565b60405161011e91906106be565b60405180910390f35b61012f610276565b60405161013c91906105d5565b60405180910390f35b61015f600480360381019061015a9190610701565b610302565b60405161016c9190610759565b60405180910390f35b600180546101829061079f565b80601f01602080910402602001604051908101604052809291908181526020018280546101ae9061079f565b80156101f95780601f106101d0576101008083540402835291602001916101f9565b820191905f5260205f20905b8154815290600101906020018083116101dc57829003601f168201915b505050505081565b60045481565b60035481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600280546102839061079f565b80601f01602080910402602001604051908101604052809291908181526020018280546102af9061079f565b80156102fa5780601f106102d1576101008083540402835291602001916102fa565b820191905f5260205f20905b8154815290600101906020018083116102dd57829003601f168201915b505050505081565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361033a575f80fd5b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054821115610383575f80fd5b6103d38260055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461051490919063ffffffff16565b60055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506104648260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461053a90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610502919061060d565b60405180910390a36001905092915050565b5f82821115610526576105256107cf565b5b81836105329190610829565b905092915050565b5f808284610548919061085c565b90508381101561055b5761055a6107cf565b5b8091505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6105a782610565565b6105b1818561056f565b93506105c181856020860161057f565b6105ca8161058d565b840191505092915050565b5f6020820190508181035f8301526105ed818461059d565b905092915050565b5f819050919050565b610607816105f5565b82525050565b5f6020820190506106205f8301846105fe565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106538261062a565b9050919050565b61066381610649565b811461066d575f80fd5b50565b5f8135905061067e8161065a565b92915050565b5f6020828403121561069957610698610626565b5b5f6106a684828501610670565b91505092915050565b6106b881610649565b82525050565b5f6020820190506106d15f8301846106af565b92915050565b6106e0816105f5565b81146106ea575f80fd5b50565b5f813590506106fb816106d7565b92915050565b5f806040838503121561071757610716610626565b5b5f61072485828601610670565b9250506020610735858286016106ed565b9150509250929050565b5f8115159050919050565b6107538161073f565b82525050565b5f60208201905061076c5f83018461074a565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806107b657607f821691505b6020821081036107c9576107c8610772565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610833826105f5565b915061083e836105f5565b9250828203905081811115610856576108556107fc565b5b92915050565b5f610866826105f5565b9150610871836105f5565b9250828201905080821115610889576108886107fc565b5b9291505056fea2646970667358221220bd6594c25b03a9676784b5d1286143660ed04b2994e8c8c3a6e2fd17fda225ce64736f6c63430008190033