fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ck1PVE9ST0xBIE1JQ1JPUFJPQ0VTU09SICYgTUVNT1JZIFRFQ0hOT0xPR1kgR1JPVVAKTTY4MDAwIEhpLVBlcmZvcm1hbmNlIE1pY3JvcHJvY2Vzc29yIERpdmlzaW9uCk02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlClByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CgpNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgpUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKTU9UT1JPTEEgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELApJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQphbmQgYW55IHdhcnJhbnR5IGFnYWluc3QgaW5mcmluZ2VtZW50IHdpdGggcmVnYXJkIHRvIHRoZSBTT0ZUV0FSRQooSU5DTFVESU5HIEFOWSBNT0RJRklFRCBWRVJTSU9OUyBUSEVSRU9GKSBhbmQgYW55IGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscy4KClRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCklOIE5PIEVWRU5UIFNIQUxMIE1PVE9ST0xBIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgooSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLApCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQpBUklTSU5HIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUuCk1vdG9yb2xhIGFzc3VtZXMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQgc3VwcG9ydCBvZiB0aGUgU09GVFdBUkUuCgpZb3UgYXJlIGhlcmVieSBncmFudGVkIGEgY29weXJpZ2h0IGxpY2Vuc2UgdG8gdXNlLCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoZSBTT0ZUV0FSRQpzbyBsb25nIGFzIHRoaXMgZW50aXJlIG5vdGljZSBpcyByZXRhaW5lZCB3aXRob3V0IGFsdGVyYXRpb24gaW4gYW55IG1vZGlmaWVkIGFuZC9vcgpyZWRpc3RyaWJ1dGVkIHZlcnNpb25zLCBhbmQgdGhhdCBzdWNoIG1vZGlmaWVkIHZlcnNpb25zIGFyZSBjbGVhcmx5IGlkZW50aWZpZWQgYXMgc3VjaC4KTm8gbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSB1bmRlciBhbnkgcGF0ZW50cwpvciB0cmFkZW1hcmtzIG9mIE1vdG9yb2xhLCBJbmMuCn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgo2ODA2MCBTT0ZUV0FSRSBQQUNLQUdFIChLZXJuZWwgdmVyc2lvbikgU0lNUExFIFRFU1RTCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGUgZmlsZXMgaXRlc3Quc2EgYW5kIGZ0ZXN0LnNhIGNvbnRhaW4gc2ltcGxlIHRlc3RzIHRvIGNoZWNrCnRoZSBzdGF0ZSBvZiB0aGUgNjgwNjBJU1AgYW5kIDY4MDYwRlBTUCBvbmNlIHRoZXkgaGF2ZSBiZWVuIGluc3RhbGxlZC4KClJlbGVhc2UgZmlsZSBmb3JtYXQ6Ci0tLS0tLS0tLS0tLS0tLS0tLS0tClRoZSByZWxlYXNlIGZpbGVzIGl0ZXN0LnNhIGFuZCBmdGVzdC5zYSBhcmUgZXNzZW50aWFsbHkKaGV4YWRlY2ltYWwgaW1hZ2VzIG9mIHRoZSBhY3R1YWwgdGVzdHMuIFRoaXMgZm9ybWF0IGlzIHRoZQpPTkxZIGZvcm1hdCB0aGF0IHdpbGwgYmUgc3VwcG9ydGVkLiBUaGUgaGV4IGltYWdlcyB3ZXJlIGNyZWF0ZWQKYnkgYXNzZW1ibGluZyB0aGUgc291cmNlIGNvZGUgYW5kIHRoZW4gY29udmVydGluZyB0aGUgcmVzdWx0aW5nCmJpbmFyeSBvdXRwdXQgaW1hZ2VzIGludG8gQVNDSUkgdGV4dCBmaWxlcy4gVGhlIGhleGFkZWNpbWFsCm51bWJlcnMgYXJlIGxpc3RlZCB1c2luZyB0aGUgTW90b3JvbGEgQXNzZW1ibHkgc3ludGF4IGFzc2VtYmxlcgpkaXJlY3RpdmUgImRjLmwiIChkZWZpbmUgY29uc3RhbnQgbG9uZ3dvcmQpLiBUaGUgZmlsZXMgY2FuIGJlCmNvbnZlcnRlZCB0byBvdGhlciBhc3NlbWJseSBzeW50YXhlcyBieSB1c2luZyBhbnkgd29yZCBwcm9jZXNzb3IKd2l0aCBhIGdsb2JhbCBzZWFyY2ggYW5kIHJlcGxhY2UgZnVuY3Rpb24uCgpUbyBhc3Npc3QgaW4gYXNzZW1ibGluZyBhbmQgbGlua2luZyB0aGVzZSBtb2R1bGVzIHdpdGggb3RoZXIgbW9kdWxlcywKdGhlIGluc3RhbGxlciBzaG91bGQgYWRkIHN5bWJvbGljIGxhYmVscyB0byB0aGUgdG9wIG9mIHRoZSBmaWxlcy4KVGhpcyB3aWxsIGFsbG93IHRoZSBjYWxsaW5nIHJvdXRpbmVzIHRvIGFjY2VzcyB0aGUgZW50cnkgcG9pbnRzCm9mIHRoZXNlIHBhY2thZ2VzLgoKVGhlIHNvdXJjZSBjb2RlIGl0ZXN0LnMgYW5kIGZ0ZXN0LnMgaGF2ZSBiZWVuIGluY2x1ZGVkIGJ1dCBvbmx5CmZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLgoKUmVsZWFzZSBmaWxlIHN0cnVjdHVyZToKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCih0b3Agb2YgbW9kdWxlKQoJLS0tLS0tLS0tLS0tLS0tLS0KCXwJCXwgLSAxMjggYnl0ZS1zaXplZCBzZWN0aW9uCiAgICgxKSAgfCAgIENhbGwtT3V0CXwgLSA0IGJ5dGVzIHBlciBlbnRyeSAodXNlciBmaWxscyB0aGVzZSBpbikKCXwJCXwKCS0tLS0tLS0tLS0tLS0tLS0tCgl8CQl8IC0gOCBieXRlcyBwZXIgZW50cnkKICAgKDIpICB8IEVudHJ5IFBvaW50CXwgLSB1c2VyIGRvZXMgImJzciIgb3IgImpzciIgdG8gdGhpcyBhZGRyZXNzCgl8CQl8CgktLS0tLS0tLS0tLS0tLS0tLQoJfAkJfCAtIGNvZGUgc2VjdGlvbgogICAoMykgIH4JCX4KCXwJCXwKCS0tLS0tLS0tLS0tLS0tLS0tCihib3R0b20gb2YgbW9kdWxlKQoKVGhlIGZpcnN0IHNlY3Rpb24gb2YgdGhpcyBtb2R1bGUgaXMgdGhlICJDYWxsLW91dCIgc2VjdGlvbi4gVGhpcyBzZWN0aW9uCmlzIE5PVCBJTkNMVURFRCBpbiB7aSxmfXRlc3Quc2EgKGFuIGV4YW1wbGUgIkNhbGwtb3V0IiBzZWN0aW9uIGlzIHByb3ZpZGVkIGF0CnRoZSBlbmQgb2YgdGhpcyBmaWxlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIGlzIHRvIGFsbG93IHRoZSB0ZXN0CnJvdXRpbmVzIHRvIHJlZmVyZW5jZSBleHRlcm5hbCBwcmludGluZyBmdW5jdGlvbnMgdGhhdCBtdXN0IGJlIHByb3ZpZGVkCmJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIFRoaXMgc2VjdGlvbiBNVVNUIGJlIGV4YWN0bHkgMTI4IGJ5dGVzIGluCnNpemUuIFRoZXJlIGFyZSAzMiBmaWVsZHMsIGVhY2ggNCBieXRlcyBpbiBzaXplLiBFYWNoIGZpZWxkIGNvcnJlc3BvbmRzCnRvIGEgZnVuY3Rpb24gcmVxdWlyZWQgYnkgdGhlIHRlc3QgcGFja2FnZXMgKHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlaXIKbG9jYXRpb24gYXJlIGxpc3RlZCBpbiAiNjgwNjB7SVNQLEZQU1B9LVRFU1QgY2FsbC1vdXRzIiBiZWxvdykuIEVhY2ggZmllbGQKZW50cnkgc2hvdWxkIGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gUkVMQVRJVkUgdG8KdGhlIHN0YXJ0aW5nIGFkZHJlc3Mgb2YgdGhlICJjYWxsLW91dCIgc2VjdGlvbi4gVGhlICJDYWxsLW91dCIgc2VjdGlvbiBtdXN0CnNpdCBhZGphY2VudCB0byB0aGUge2ksZn10ZXN0LnNhIGltYWdlIGluIG1lbW9yeS4gU2luY2UgaXRlc3Quc2EgYW5kIGZ0ZXN0LnNhCmFyZSBpbmRpdmlkdWFsIHRlc3RzLCB0aGV5IGVhY2ggcmVxdWlyZSB0aGVpciBvd24gIkNhbGwtb3V0IiBzZWN0aW9ucy4KClRoZSBzZWNvbmQgc2VjdGlvbiwgdGhlICJFbnRyeS1wb2ludCIgc2VjdGlvbiwgaXMgdXNlZCBieSBleHRlcm5hbCByb3V0aW5lcwp0byBhY2Nlc3MgdGhlIHRlc3Qgcm91dGluZXMuIFNpbmNlIHRoZSB7aSxmfXRlc3Quc2EgaGV4IGZpbGVzIGNvbnRhaW4Kbm8gc3ltYm9sIG5hbWVzLCB0aGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb24gZW50cnkgcG9pbnRzIHRoYXQgYXJlIGZpeGVkCndpdGggcmVzcGVjdCB0byB0aGUgdG9wIG9mIHRoZSBwYWNrYWdlLiBUaGUgY3VycmVudGx5IGRlZmluZWQgZW50cnktcG9pbnRzCmFyZSBsaXN0ZWQgaW4gc2VjdGlvbiAiNjgwNjB7SVNQLEZQU1B9LVRFU1QgZW50cnkgcG9pbnRzIiBiZWxvdy4gQSBjYWxsaW5nCnJvdXRpbmUgd291bGQgc2ltcGx5IGV4ZWN1dGUgYSAiYnNyIiBvciAianNyIiB0aGF0IGp1bXBlZCB0byB0aGUgc2VsZWN0ZWQKZnVuY3Rpb24gZW50cnktcG9pbnQuCgpGb3IgZXhhbXBsZSwgdG8gcnVuIHRoZSAwNjBJU1AgdGVzdCwgd3JpdGUgYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMgdGhlCml0ZXN0LnNhIGRhdGEgYW5kIGV4ZWN1dGUgc29tZXRoaW5nIHNpbWlsYXIgdG86CgoJYnNyCV8wNjBJU1BfVEVTVCsxMjgrMAoKKF8wNjBJU1BfVEVTVCBpcyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgIkNhbGwtb3V0IiBzZWN0aW9uOyB0aGUgIkNhbGwtb3V0IgpzZWN0aW9uIGlzIDEyOCBieXRlcyBsb25nOyBhbmQgdGhlIDY4MDYwSVNQIHRlc3QgZW50cnkgcG9pbnQgaXMgbG9jYXRlZAowIGJ5dGVzIGZyb20gdGhlIHRvcCBvZiB0aGUgIkVudHJ5LXBvaW50IiBzZWN0aW9uLikKClRoZSB0aGlyZCBzZWN0aW9uIGlzIHRoZSBjb2RlIHNlY3Rpb24uIEFmdGVyIGVudGVyaW5nIHRocm91Z2ggYW4gIkVudHJ5LXBvaW50IiwKdGhlIGVudHJ5IGNvZGUganVtcHMgdG8gdGhlIGFwcHJvcHJpYXRlIHRlc3QgY29kZSB3aXRoaW4gdGhlIGNvZGUgc2VjdGlvbi4KCjY4MDYwSVNQLVRFU1QgQ2FsbC1vdXRzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMHgwOiBfcHJpbnRfc3RyaW5nKCkKMHg0OiBfcHJpbnRfbnVtYmVyKCkKCjY4MDYwRlBTUC1URVNUIENhbGwtb3V0czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoweDA6IF9wcmludF9zdHJpbmcoKQoweDQ6IF9wcmludF9udW1iZXIoKQoKVGhlIHRlc3QgcGFja2FnZXMgY2FsbCBfcHJpbnRfc3RyaW5nKCkgYW5kIF9wcmludF9udW1iZXIoKQphcyBzdWJyb3V0aW5lcyBhbmQgZXhwZWN0IHRoZSBtYWluIHByb2dyYW0gdG8gcHJpbnQgYSBzdHJpbmcKb3IgYSBudW1iZXIgdG8gYSBmaWxlIG9yIHRvIHRoZSBzY3JlZW4uCkluICJDIi1saWtlIGZhc2hpb24sIHRoZSB0ZXN0IHByb2dyYW0gY2FsbHM6CgoJcHJpbnRfc3RyaW5nKCJUZXN0IHBhc3NlZCIpOwoKCQlvcgoKCXByaW50X251bWJlcigyMCk7CgpGb3IgX3ByaW50X3N0cmluZygpLCB0aGUgdGVzdCBwcm9ncmFtcyBwYXNzIGEgbG9uZ3dvcmQgYWRkcmVzcwpvZiB0aGUgc3RyaW5nIG9uIHRoZSBzdGFjay4gRm9yIF9wcmludF9udW1iZXIoKSwgdGhlIHRlc3QgcHJvZ3JhbXMgcGFzcwphIGxvbmd3b3JkIG51bWJlciB0byBiZSBwcmludGVkLgoKRm9yIGRlYnVnZ2luZyBwdXJwb3NlcywgYWZ0ZXIgdGhlIG1haW4gcHJvZ3JhbSBwZXJmb3JtcyBhICJwcmludCIKZm9yIGEgdGVzdCBwYWNrYWdlLCBpdCBzaG91bGQgZmx1c2ggdGhlIG91dHB1dCBzbyB0aGF0IGl0J3Mgbm90CmJ1ZmZlcmVkLiBJbiB0aGlzIHdheSwgaWYgdGhlIHRlc3QgcHJvZ3JhbSBjcmFzaGVzLCBhdCBsZWFzdCB0aGUgcHJldmlvdXMKc3RhdGVtZW50cyBwcmludGVkIHdpbGwgYmUgc2Vlbi4KCjY4MDYwSVNQLVRFU1QgRW50cnktcG9pbnRzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMHgwOiBpbnRlZ2VyIHRlc3QKCjY4MDYwRlBTUC1URVNUIEVudHJ5LXBvaW50czoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoweDAwOiBtYWluIGZwIHRlc3QKMHgwODogRlAgdW5pbXBsZW1lbnRlZCB0ZXN0CjB4MTA6IEZQIGVuYWJsZWQgc25hbi9vcGVyci9vdmZsL3VuZmwvZHovaW5leAoKVGhlIGZsb2F0aW5nLXBvaW50IHVuaXQgdGVzdCBoYXMgMyBlbnRyeSBwb2ludHMgd2hpY2ggd2lsbCByZXF1aXJlCjMgZGlmZmVyZW50IGNhbGxzIHRvIHRoZSBwYWNrYWdlIGlmIGVhY2ggb2YgdGhlIHRocmVlIGZvbGxvd2luZyB0ZXN0cwppcyBkZXNpcmVkOgoKbWFpbiBmcCB0ZXN0OiB0ZXN0cyAoMSkgdW5pbXAgZWZmZWN0aXZlIGFkZHJlc3MgZXhjZXB0aW9uCgkJICAgICgyKSB1bnN1cHBvcnRlZCBkYXRhIHR5cGUgZXhjZXB0aW9ucwoJCSAgICAoMykgbm9uLW1hc2thYmxlIG92ZXJmbG93L3VuZGVyZmxvdyBleGNlcHRpb25zCgpGUCB1bmltcGxlbWVudGVkOiB0ZXN0cyBGUCB1bmltcGxlbWVudGVkIGV4Y2VwdGlvbi4gdGhpcyBvbmUgaXMKCQkgIHNlcGFyYXRlIGZyb20gdGhlIHByZXZpb3VzIHRlc3RzIGZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QKCQkgIHdhbnQgRlAgdW5pbXBsZW1lbnRlZCBpbnN0cnVjdGlvbnMuCgpGUCBlbmFibGVkOiB0ZXN0cyBlbmFibGVkIHNuYW4vb3BlcnIvb3ZmbC91bmZsL2R6L2luZXguCgkgICAgYmFzaWNhbGx5LCBpdCBlbmFibGVzIGVhY2ggb2YgdGhlc2UgZXhjZXB0aW9ucyBhbmQgZm9yY2VzCgkgICAgZWFjaCB1c2luZyBhbiBpbXBsZW1lbnRlZCBGUCBpbnN0cnVjdGlvbi4gdGhpcyBwcm9jZXNzCgkgICAgZXhlcmNpc2VzIF9mcHNwX3tzbmFuLG9wZXJyLG92ZmwsdW5mbCxkeixpbmV4fSgpIGFuZAoJICAgIF9yZWFsX3tzbmFuLG9wZXJyLG92ZmwsdW5mbCxkeixpbmV4fSgpLiB0aGUgdGVzdCBleHBlY3RzCgkgICAgX3JlYWxfWFhYWCgpIHRvIGRvIG5vdGhpbmcgZXhjZXB0IGNsZWFyIHRoZSBleGNlcHRpb24KCSAgICBhbmQgInJ0ZSIuIGlmIGEgc3lzdGVtJ3MgX3JlYWxfWFhYWCgpIGhhbmRsZXIgY3JlYXRlcyBhbgoJICAgIGFsdGVybmF0ZSByZXN1bHQsIHRoZSB0ZXN0IHdpbGwgcHJpbnQgImZhaWxlZCIgYnV0IHRoaXMKCSAgICBpcyBhY2NlcHRhYmxlLgoKTWlzY2VsbGFuZW91czoKLS0tLS0tLS0tLS0tLS0KQWdhaW4sIGl0ZXN0LnNhIGFuZCBmdGVzdC5zYSBhcmUgc2ltcGxlIHRlc3RzIGFuZCBkbyBub3QgdGhvcm91Z2hseQp0ZXN0IGFsbCA2ODA2MFNQIGNvbm5lY3Rpb25zLiBGb3IgZXhhbXBsZSwgdGhleSBkbyBub3QgdGVzdCBjb25uZWN0aW9ucwp0byBfcmVhbF9hY2Nlc3MoKSwgX3JlYWxfdHJhY2UoKSwgX3JlYWxfdHJhcCgpLCBldGMuIGJlY2F1c2UgdGhlc2UKd2lsbCBiZSBzeXN0ZW0taW1wbGVtZW50ZWQgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyBhbmQgdGhlIHRlc3QgcGFja2FnZXMKbXVzdCByZW1haW4gc3lzdGVtIGluZGVwZW5kZW50LgoKRXhhbXBsZSB0ZXN0IHBhY2thZ2Ugc2V0LXVwOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCl9wcmludF9zdHI6CgkuCQkJIyBwcm92aWRlZCBieSBzeXN0ZW0KCXJ0cwoKX3ByaW50X251bToKCS4JCQkjIHByb3ZpZGVkIGJ5IHN5c3RlbQoJcnRzCgoJLgoJLgoJYnNyCV8wNjBGUFNQX1RFU1QrMTI4KzAKCS4KCS4KCXJ0cwoKIyBiZWdpbm5pbmcgb2YgIkNhbGwtb3V0IiBzZWN0aW9uOyBwcm92aWRlZCBieSBpbnRlZ3JhdG9yLgojIE1VU1QgYmUgMTI4IGJ5dGVzIGxvbmcuCl8wNjBGUFNQX1RFU1Q6Cglsb25nCV9wcmludF9zdHIgLSBfMDYwRlBTUF9URVNUCglsb25nCV9wcmludF9udW0gLSBfMDYwRlBTUF9URVNUCglzcGFjZQkxMjAKCiMgZnRlc3Quc2Egc3RhcnRzIGhlcmU7IHN0YXJ0IG9mICJFbnRyeS1wb2ludCIgc2VjdGlvbi4KCWxvbmcJMHg2MGZmMDAwMCwgMHgwMDAwMjM0NgoJbG9uZwkweDYwZmYwMDAwLCAweDAwMDE4NzY2Cglsb25nCTB4NjBmZjAwMDAsIDB4MDAwMjMzMzgKCWxvbmcJMHgyNDM3NzI5OSwgMHhhYjI2NDNlYQoJCS4KCQkuCgkJLgo=